我有几个独立观察到的不同长度的序列,称为movs
,并想计算movs的一般过渡矩阵。有两个问题:
- 并非所有状态都出现在每个序列中。
-
我无法将它们连接起来。
df<-data.frame(activityID=rep(1:4,c(10,5,4,1(((,movs=sample(c("A","B","C"(,20,replace=T((
我已经查看了包markovchain
,它有一个函数markovchainfit
和一个参数possibleStates
,它允许我预定义序列中将存在的所有状态,即使它们没有出现在所有状态中。 https://rdrr.io/a/cran/markovchain/man/markovchainFit.html
但是因为序列不在行中并且因为它们的长度不同,所以我将 df 转换为列表:
d<-split(df$movs, df$activityID)
然后运行markovfitlist
但它没有possibleStates
参数。
markovchain::markovchainListFit(data = d,byrow = F)
所以现在我为每个序列都有一个过渡矩阵 -我如何将它们全部组合成 1 个包含所有状态的过渡矩阵?
您可以使用PyEMMA(基于Python(来实现此目的,它首先将所有序列组合在一个计数矩阵中。该矩阵给出每对状态的转移计数,然后馈送到转移矩阵估计器中。 对于您正在使用的这个 R 包,可能同样的事情,因为它是一项非常常见的任务。