[R] "Improvement with the R code"

Berry, Charles ccberry at ucsd.edu
Mon Aug 28 17:58:52 CEST 2017


All of this can be done without for loops. 

Use head(..., -1), tail(..., -1) to get the pre and post states.

Use factor or pmin to recode them as necessary

Use table(pre, post) to get the transition counts.

Use prop.table(table_of_counts,1) to get the probabilities.

HTH,

Chuck


> On Aug 28, 2017, at 8:31 AM, Elie Canonici Merle <elie.canonicimerle at gmail.com> wrote:
> 
> Hi,
> 
> I think you overthought this one a little bit, I don't know if this is the
> kind of code you are expecting but I came up with something like that:
> 
> generate_transition_matrix <-  function(data, n_states) {
> 
>    #To be sure I imagine you should check n_states is right at this point
> 
>    transitions <- matrix(0, n_states, n_states)
> 
>    #we could improve a little bit here because at step N+1 source is dest
> from step N
>    #but it would not be as readable
>    for (k in 1:(length(data) - 1)) {
>        source_state <- data[k]
>        dest_state <- data[k+1]
>        transitions[source_state, dest_state] <- transitions[source_state,
> dest_state] + 1
>    }
> 
>    for (k in 1:n_states)
>        transitions[k,] <- transitions[k,] / sum(transitions[k,])
>    transitions
> }
> 
> checkdf=data.frame(clusterNum=c(3,2,3,1,1,3,4,3,2,1,1,3,2,1,3,2))
> no_of_state=4
> 
> transition_matrix= generate_transition_matrix(checkdf$clusterNum,
> no_of_state)
> transition_matrix
> 
> 
> 
> 2017-08-28 16:37 GMT+02:00 niharika singhal <niharikasinghal1990 at gmail.com>:
> 
>> Hello,
>> 
>> I am trying to implement a formula
>> 
>> aij= transition from state S_i to S_j/no of transition at state S_i
>> 
>> 
>> 
>> Code I have written is working with three state {1,2,3 }, but if the number
>> of states become={1,2,3,4,......n} then the code will not work, so can some
>> help me with this.
>> 
>> For   and some rows of my  data frame look like
>> 
>> checkdf=data.frame(clusterNum=c(3,2,3,1,1,3,4,3,2,1,1,3,2,1,3,2)
>> no_of_state=3
>> transition_matrix=matrix(NA,nrow=no_of_state, ncol=no_of_state)
>> for(k in 1: no_of_state)
>> {
>>  count1=0
>>  count2=0
>>  count3=0
>>  #For last point no transition takes place
>>  for(j in 1: (nrow(checkdf)-1))
>>  {
>> 
>>    if(checkdf$clusterNum[j]==k)
>>    {
>>      if(checkdf$clusterNum[j+1]==1){
>>        count1=count1+1
>>      }
>>      else if(checkdf$clusterNum[j+1]==2){
>>        count2=count2+1
>>       }
>>      else {
>>        count3=count3+1
>>       }
>>    }
>>  }
>> 
>>  no_of_points=(count1+count2+count3)
>>  s1=count1/no_of_points
>>  s2=count2/no_of_points
>>  s3=count3/no_of_points
>>  transition_matrix[k,]=c(s1, s2, s3)
>> 
>> }
>> 
>> I know the code is not written nicely and I want to improve it.
>> 
>> Thanks in advance
>> Niharika
>> 
>>        [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/
>> posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>> 
> 
> 	[[alternative HTML version deleted]]
> 



More information about the R-help mailing list