R 绘制概率P(Xn=s)随时间的变化曲线?
整个问题: 我们有一个具有5种状态的马尔可夫链模型:s,t,m,f,r TPM如下所示: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
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)