如何使用 DepmixS4 包预测新数据的状态概率或状态,用于隐马尔可夫模型

机器算法验证 r 隐马尔可夫模型 混合分布
2022-03-22 00:40:39

似乎我可以很好地学习参数并找到训练数据的后验概率,但我不知道如何对新数据进行新的预测。问题尤其来自协变量上的转移概率变化,因此编写代码来预测新数据并非易事。

标准方法是定义(依赖)混合物并拟合模型:

mod <- depmix(EventTime ~ 1, data = data[1:40320,], nstates = 2, family
=multinomial("identity"), transition = ~ Count, instart = runif(2))

fm <- fit(mod, emcontrol=em.control(classification="soft", maxit = 60))

我们上面的内容应该类似于二元 HMM,因为它试图将事件是否发生分类为在序列中移动的 1/0 因变量。转移协变量是一个频率计数变量,它应该直接影响状态的转移概率,然后控制 1/0 因变量的发射概率。

可以获取模型的参数并将参数设置为另一个新模型。然而,没有明确的预测方法,即使图书馆的内部应该有某个地方。

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

请注意,在文档中它说可以运行维特比算法来为新数据生成状态。然而,这对我来说并不是特别有用,它似乎完美地拟合了数据,表明它仍在学习拟合新数据。

probs2 <- viterbi(modNew)

请注意,我是这个话题的新手。这个实施阶段对我来说很困难,但它似乎是分析的基本部分。

2个回答

你解决了这个问题吗?如果没有,也许您可​​以尝试:

sum(forwardbackward(setpars(depmix(list(var~1), data=newData, nstates=3,family=list(gaussian())), getpars(originalModel)))[["alpha"]][nrow(data),])

这个单线通过在原始模型上运行前向算法来获得新数据的概率。如果您找到更好的解决方案,请告诉我,因为我自己正在解决这个问题。

安装新模型,然后调用posterior().

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

modNew <- fit(modNew)

predStates <- posterior(modNew)

predStates$state