我试图使用 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
据说拟合是基于'序列矩阵',可以检索如下:
R> createSequenceMatrix(stringchar = weathersOfDays)
cloudy rain sunny
cloudy 43 35 31
rain 32 30 17
sunny 34 14 128
我的问题是我有多个序列形式的数据,因为有很多吸收状态并且链相对较短。
我想为它们提供数据并安装模型,但是该包允许提供单个数据序列。或者,我可以构建如上所示的序列矩阵,并将其提供给模型,但我在包中没有看到可以处理它的函数。
长话短说 - 我有多个短数据序列,我想根据这些序列拟合马尔可夫链模型。
最佳答案
有一个示例至少部分回答了您的请求。 holson 'data.frame' 实际上是一个矩阵,其中行是生命轨迹,列是时间序列,通过运行
singleMc<-markovchainFit(data=holson[,2:12],name="holson")
一个转移矩阵是合适的。这要求序列长度是偶数。在您的示例中,如果您在达到吸收状态时停止记录序列,我想您的长度可能不均匀。所以你必须重复该行的最后一个状态,直到达到生命历史的最大长度
关于R Markovchain package - 基于状态序列矩阵拟合马尔可夫链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36814303/