模拟马尔可夫链的概率数不正确

时间:2013-04-27 15:17:47

标签: r markov-chains markov

我的转移概率矩阵就像这样

             BP          IP             SP 


BPBP     0.4586757     0.3772354     0.1640889

IPBP     0.3489484     0.4746654     0.1763862

SPBP     0.3756522     0.4162319     0.2081159

BPIP     0.3646061     0.4640000     0.1713939

IPIP     0.2666122     0.5654956     0.1678922

SPIP     0.3054187     0.4860427     0.2085386

BPSP     0.4125561     0.3974215     0.1900224

IPSP     0.2974337     0.5069415     0.1956247

SPSP     0.3576642     0.4333942     0.2089416

和从中模拟一阶MC的代码是

  function(trans,initprob,N)
  {
  BrokerPosition <- c("BP", "IP", "SP")
  mysequence<-character()
  firstposition <- sample(BrokerPosition, 1, rep=TRUE, prob=initprob)
  mysequence[1]   <- firstposition
  for (i in 2:N){
   prevposition <- mysequence[i-1]
   probabilities  <- trans[,prevposition]
   BPosition<- sample(BrokerPosition, 1, rep=TRUE, prob=probabilities)
   mysequence[i]  <- BPosition
                }
  return(mysequence)
  } 

但由于这是一个非方形矩阵,我得到了概率不匹配的错误,任何想法如何解决这个问题

1 个答案:

答案 0 :(得分:2)

您正在以错误的方向使用转换矩阵: 试试

trans[ paste( mysequence[c(i-2,i-1)], collapse="" ), ]

另一种方法是将您的二阶马尔可夫链转换为第一顺序马尔可夫链: 例如,之后的州 IPBP将是BPIP,BPBP,BPSP(以及其他,IP *和SP *,将具有零概率)。 然后,转移矩阵是一个9 * 9矩阵,有很多零。