从HMM高斯混合分布中获得下一个观测值

时间:2012-07-25 07:16:59

标签: r hidden-markov-models viterbi

我有一个长度为1000的连续单变量xts对象,我将其转换为一个名为x的data.frame,供程序包RHmm使用。

我已经选择在混合发行版中有5种状态和4种高斯分布。

我所追求的是下一次观察的预期平均值。我该怎么做呢?

所以到目前为止我所拥有的是:

  1. 运行HMMFit()函数
  2. 的转换矩阵
  3. 混合物中每种高斯分布的一组均值和方差,以及它们各自的比例,所有这些也都是由HMMFit()函数生成的
  4. 使用HMMFit函数的输出并将其放入viterbi函数
  5. 时与输入数据相关的过去隐藏状态的列表

    我如何从我所获得的状态获得下一个隐藏状态(即第1001个值),然后使用它从高斯分布中获得加权平均值。

    我认为我非常接近,不太确定下一部分是什么......最后一个状态是状态5,我是否以某种方式使用转换矩阵中的第5行来获得下一个状态?

    我所追求的只是下一次观察中所期望的加权平均值,因此下一个隐藏状态甚至不是必需的。我是否将第5行中的概率乘以每种均值,加权到每种状态的比例?然后将它们总结在一起?

    这是我使用的代码。

    # have used 2000 iterations to ensure convergence
    a <- HMMFit(x, nStates=5, nMixt=4, dis="MIXTURE", control=list(iter=2000)
    v <- viterbi(a,x)
    a
    v
    

    一如既往,我们将非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

下一个预测值使用最后隐藏状态last(v$states)来获取每个状态的转换矩阵a$HMM$transMat[last(v$states),]的概率权重,分布均值a$HMM$distribution$mean按比例加a$HMM$distribution$proportion,然后它全部成倍增加并相加。因此,在上述情况下,它将如下:

sum(a$HMM$transMat[last(v$states),] * .colSums((matrix(unlist(a$HMM$distribution$mean), nrow=4,ncol=5)) * (matrix(unlist(a$HMM$distribution$proportion), nrow=4,ncol=5)), m=4,n=5))