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

时间:2019-08-10 20:40:13

标签: r markov-chains

我有几个观察到的不同长度的独立序列,称为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个转移矩阵?

1 个答案:

答案 0 :(得分:1)

您可以为此使用PyEMMA(基于Python),它首先将所有序列组合在一个计数矩阵中。该矩阵给出每对状态的跃迁计数,然后被馈送到跃迁矩阵估计器中。 对于您使用的这个R包,可能是同一件事,因为这是一项非常常见的任务。