
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@mayin.org
http://ajayshahblog.blogspot.com
<*(:-? - wizard who doesn't know the answer.


	[[alternative HTML version deleted]]


