使用R进行马尔可夫链模拟

时间:2018-10-20 07:35:50

标签: r ggplot2 markov-chains

我想在不同的时间t绘制状态的概率分布图。我有转换矩阵

qtdCurtidas: 1

要绘制从p1到p50的图形,我使用以下代码。

P1 <- matrix(c(0, 1, 0, 0, 0, 0, 2/3, 1/3, 0, 1, 0, 0, 0, 0, 0, 1), 4, 4, byrow=TRUE) 

但是结果很奇怪,任何人都可以找出我的代码出了错吗?

1 个答案:

答案 0 :(得分:1)

问题在于您对P1^k的计算。在R中,使用^逐个地乘幂,而不是通过矩阵乘法。要计算P1的矩阵幂,您需要将其相乘,或使用%^%包中的expm运算符。 (其他软件包中也可能有此操作的其他实现。)

这样编写循环:

# Calculate probabilities for 50 steps.
P1tok <- diag(4)   # the identity matrix
for(k in 1:50){
  P1tok <- P1tok %*% P1     # multiply by another P1
  nsteps <- initState*P1tok
  one[k] <- nsteps[1,1]
  two[k] <- nsteps[1,2]
  three[k] <- nsteps[1,3]
  four[k] <- nsteps[1,4]
}