R Markovchain包 - 基于状态序列矩阵拟合马尔可夫链

时间:2016-04-23 17:46:22

标签: r matrix chain markov

我试图使用R markovchain包。

我对markovchainFit函数和序列矩阵有疑问。

默认情况下,markovchainFit函数以状态序列作为参数运行。 然后在文档中说这个函数将该序列更改为序列矩阵,可以使用createSequenceMatrix函数检索它。

我的问题是 - 可以用序列矩阵作为参数以某种方式运行markovchainFit(或者至少与多个数据序列的vecotr一起运行)?

我问,因为在我的模型中我有多种吸收状态。 这意味着示例序列可能很短,因为它将以吸收状态结束。 我的数据集中有多个序列,我可以根据它们创建序列矩阵。 然而,我没有一个长序列可以用作markovchainFit的参数(因为每个序列在几个状态之后被吸收)。

我的问题中的术语基于以下文档: CRAN markovchain包介绍

在该文章的天气示例中,介绍了一个简单的场景。 有3种状态(晴天,阴天,下雨),转换矩阵如输入所示:

       sunny cloudy rain
sunny  0.7   0.20   0.10
cloudy 0.3   0.40   0.30
rain   0.2   0.45   0.35

基于该矩阵构建马尔可夫链对象:

R> weatherMatrix <- matrix(data = c(0.70, 0.2, 0.1,
+                                   0.3, 0.4, 0.3,
+                                   0.2, 0.45, 0.35), byrow = byRow, nrow = 3,
+ dimnames = list(weatherStates, weatherStates))
R> mcWeather <- new("markovchain", states = weatherStates, byrow = byRow,
+ transitionMatrix = weatherMatrix, name = "Weather")

然后从马尔可夫链生成一系列数据 - 以演示如何从该样本中拟合模型:

R> weathersOfDays <- rmarkovchain(n = 365, object = mcWeather, t0 = "sunny")

然后根据数据拟合新的马尔可夫链:

R> weatherFittedLAPLACE <- markovchainFit(data = weathersOfDays,
+                                    method = "laplace", laplacian = 0.01,
+                                    name = "Weather LAPLACE")
R> weatherFittedLAPLACE$estimate

估计结果如下,以显示数据如何接近原始转换矩阵:

       cloudy    rain       sunny
cloudy 0.3944786 0.32110428 0.2844171
rain   0.4050361 0.37972922 0.2152347
sunny  0.1932057 0.07958871 0.7272056

据说,拟合基于&#39;序列矩阵&#39;,可以按如下方式检索:

R> createSequenceMatrix(stringchar = weathersOfDays)

       cloudy rain sunny
cloudy 43     35   31
rain   32     30   17
sunny  34     14   128

我的问题是我有多个序列形式的数据,因为有很多吸收状态,链条相对较短。

我想喂它们并安装模型,但是包装允许输入单个数据序列。或者,我可以构建如上所示的序列矩阵,并将其提供给模型,但是我没有在包中看到可以处理它的函数。

长话短说 - 我有多个短数据序列,基于此我想要一个马尔可夫链模型。

1 个答案:

答案 0 :(得分:0)

有一个示例可以回答您的请求,至少部分是这样。 holson&#39; data.frame&#39;实际上是一个矩阵,其中行是生命轨迹和列时间序列,并且通过运行

singleMc<-markovchainFit(data=holson[,2:12],name="holson")

适合转换矩阵。这要求序列长度是均匀的。在你的例子中,我想你可能有不均匀的长度,如果你在达到吸收状态时停止记录序列。因此,您必须重复该行的最后一个状态,直到达到生命历史的最大长度