R 绘制概率P(Xn=s)随时间的变化曲线?

R 绘制概率P(Xn=s)随时间的变化曲线?,r,markov-chains,markov,R,Markov Chains,Markov,整个问题: 我们有一个具有5种状态的马尔可夫链模型:s,t,m,f,r TPM如下所示: P <- matrix(c(.84,.03,.01,.03,.03, .11,.80,.15,.19,.09, .01,.04,.70,.02,.05, .04,.10,.07,.75,.00, .00,.03,.07,.01,.8

整个问题: 我们有一个具有5种状态的马尔可夫链模型:s,t,m,f,r

TPM如下所示:

      P <- matrix(c(.84,.03,.01,.03,.03,
                    .11,.80,.15,.19,.09,
                    .01,.04,.70,.02,.05,
                    .04,.10,.07,.75,.00,
                    .00,.03,.07,.01,.83),
                  nrow=5

                   )

我需要绘制p(Xn=s)(在y轴上)与n=0、1、2、3、4、5(x轴)的关系。

expm包有一个矩阵幂函数,
%^%
。我首先检查了第10个州,但它还没有达到稳定,所以我选择了第20个州

每个连续的状态都在进行中
a%*%p,a%*%(p%^%2),…,a%*%(p%^%20)

所以我想我已经准备好了,没关系

evolve <- sapply(1:20, function(n){ a%*% (P %^% n)})  # 5 x 20 matrix
png(); matplot( 1:20, t(evolve) );dev.off()  # matplot needs data in rows

evolve这是一个基本的R解决方案,它支持矩阵幂运算并查看进化的进度

n <- 20
res <- do.call(rbind,Reduce(`%*%`,c(list(a),replicate(n,P,simplify = FALSE)),accumulate = T))
evolve <- sapply(1:20, function(n){ a%*% (P %^% n)})  # 5 x 20 matrix
png(); matplot( 1:20, t(evolve) );dev.off()  # matplot needs data in rows
n <- 20
res <- do.call(rbind,Reduce(`%*%`,c(list(a),replicate(n,P,simplify = FALSE)),accumulate = T))
matplot(seq(nrow(r)),r)