R:当序列长度不相等时计算马尔可夫转移矩阵



我有几个独立观察到的不同长度的序列,称为movs,并想计算movs的一般过渡矩阵。有两个问题:

  1. 并非所有状态都出现在每个序列中。
  2. 我无法将它们连接起来。

    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 包,可能同样的事情,因为它是一项非常常见的任务。

最新更新