我有一个累积转移矩阵,其中包含从1到5的所有可能状态的概率。现在,模拟未来状态的算法如下:初始状态是随机选择的,然后产生0到1之间的随机值。为了确定马尔可夫过程中的下一个状态,将随机数的值与从先前状态确定的累积转移矩阵的第i-*行的元素进行比较。如果随机数的值大于先前状态的累积概率但小于或等于后续状态的累积概率,则选择后续状态以表示下一状态。
cum_trans <- matrix(c(0.1686747,0.4337349,0.6265060,0.7289157,1,
0.2765957,0.5053191,0.6648936,0.7659574,1,
0.2518519,0.4740741,0.6518519,0.7407407,1,
0.1911765,0.4705882,0.6617647,0.7941176,1,
0.2096774,0.4892473,0.6827957,0.7419355,1
), nrow = 5, ncol = 5, byrow = TRUE)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.1686747 0.4337349 0.6265060 0.7289157 1
[2,] 0.2765957 0.5053191 0.6648936 0.7659574 1
[3,] 0.2518519 0.4740741 0.6518519 0.7407407 1
[4,] 0.1911765 0.4705882 0.6617647 0.7941176 1
[5,] 0.2096774 0.4892473 0.6827957 0.7419355 1
state<-matrix(NA, nrow=1,ncol=25)
i<-sample(1:5,1)
state[1]<-i
for (k in 2:25){
rr<-runif(1)
state[k]<-findInterval(rr,cum_trans[i,])+1
i<-state[k]
}
state
所以我检查了我的算法它是否有效,但结果与其他算法相比并不相同。有人可以看到可能的问题。