我的转移概率矩阵是这样的
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)
}
但由于这是一个非方阵,我收到概率不匹配的错误,知道如何解决这个问题
最佳答案
您以错误的方向使用转换矩阵: 尝试使用
trans[ paste( mysequence[c(i-2,i-1)], collapse="" ), ]
另一种方法是将二阶马尔可夫链转换为一阶马尔可夫链: 例如,之后的状态 IPBP 将是 BPIP、BPBP、BPSP(其他 IP* 和 SP* 的概率为零)。 那么转移矩阵是一个带有很多零的 9*9 矩阵。
关于r - 模拟马尔可夫链的概率数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16253725/