[R] Making a markov transition matrix

Ingmar Visser I.Visser at uva.nl
Mon Jan 23 10:45:57 CET 2006

```Ajay,
On a similar note, there are two other packages as well for similar models:
hmm.discnp for hidden Markov models of univariate discrete non-parametric
distributions and depmix for hidden Markov models for multivariate data, ie
gaussians, multinomials etc, and combinations of these
hth, ingmar

>
> Ajay--you seem to have gotten your question answered regarding putting your
> dataframe in the correct format, etc.  If you haven't already, you might
> want to check out the MSM package for multi-state Markov and hidden Markov
> models in continuous time.  It's been quite useful for some of my work
> regarding estimating Markov chains/matrices and is actively maintained.
>
>
> Thanks,
> Charles
>
> <<< you wrote >>>
>
> Folks,
>
> I am holding a dataset where firms are observed for a fixed (and
> small) set of years. The data is in "long" format - one record for one
> firm for one point in time. A state variable is observed (a factor).
>
> I wish to make a markov transition matrix about the time-series
> evolution of that state variable. The code below does this. But it's
> hardcoded to the specific years that I observe. How might one
> generalise this and make a general function which does this? :-)
>
>          -ans.
>
>
>
> set.seed(1001)
>
> # Raw data in long format --
> raw <- data.frame(name=c("f1","f1","f1","f1","f2","f2","f2","f2"),
>                 year=c(83,   84,  85,  86,  83,  84,  85,  86),
>                 state=sample(1:3, 8, replace=TRUE)
>                 )
> # Shift to wide format --
> fixedup <- reshape(raw, timevar="year", idvar="name", v.names="state",
>                  direction="wide")
> # Now tediously build up records for an intermediate data structure
> try <- rbind(
>            data.frame(prev=fixedup\$state.83, new=fixedup\$state.84),
>            data.frame(prev=fixedup\$state.84, new=fixedup\$state.85),
>            data.frame(prev=fixedup\$state.85, new=fixedup\$state.86)
>            )
> # This is a bad method because it is hardcoded to the specific values
> # of "year".
> markov <- table(destination\$prev.state, destination\$new.state)
>
> --
> Ajay Shah                                      http://www.mayin.org/ajayshah
>
> ajayshah at mayin.org
> http://ajayshahblog.blogspot.com
> <*(:-? - wizard who doesn't know the answer.
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

```