我试图使用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
我的问题是我有多个序列形式的数据,因为有很多吸收状态,链条相对较短。
我想喂它们并安装模型,但是包装允许输入单个数据序列。或者,我可以构建如上所示的序列矩阵,并将其提供给模型,但是我没有在包中看到可以处理它的函数。
长话短说 - 我有多个短数据序列,基于此我想要一个马尔可夫链模型。
答案 0 :(得分:0)
有一个示例可以回答您的请求,至少部分是这样。 holson&#39; data.frame&#39;实际上是一个矩阵,其中行是生命轨迹和列时间序列,并且通过运行
singleMc<-markovchainFit(data=holson[,2:12],name="holson")
适合转换矩阵。这要求序列长度是均匀的。在你的例子中,我想你可能有不均匀的长度,如果你在达到吸收状态时停止记录序列。因此,您必须重复该行的最后一个状态,直到达到生命历史的最大长度