求绘制马尔可夫链中P(Xn=s)随时间变化曲线的方法
绘制马尔可夫链状态s的概率随步数变化曲线
针对你提出的马尔可夫链状态概率变化曲线绘制需求,我用R语言给出完整的实现方案——毕竟你给出的转移矩阵就是用R语法定义的,适配性最好:
问题回顾
我们有5个状态s、t、m、f、r的马尔可夫链,转移概率矩阵(TPM)已明确,极限分布也已算出。初始分布是均匀分布(每个状态概率为1/5),需要绘制n=0,1,2,3,4,5时,状态s的概率P(Xn = s)的变化曲线。
R语言实现代码
# 1. 定义转移概率矩阵,添加byrow=TRUE保证行顺序和题目一致 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, byrow = TRUE ) # 2. 初始分布向量,对应s、t、m、f、r的初始概率 initial_alpha <- rep(1/5, 5) # 3. 计算n=0到5时状态s的概率 prob_s <- vector(length = 6) # 存储n=0到5的概率值 prob_s[1] <- initial_alpha[1] # n=0时就是初始概率 current_alpha <- initial_alpha for (step in 2:6) { current_alpha <- current_alpha %*% P # 矩阵乘法更新分布 prob_s[step] <- current_alpha[1] # 提取状态s的概率 } # 4. 绘制变化曲线 plot( x = 0:5, y = prob_s, type = "b", # 同时显示点和折线 main = "状态s的概率随马尔可夫链步数变化", xlab = "步数n", ylab = "P(Xn = s)", pch = 16, # 实心圆点标记 col = "#2E86AB", # 蓝色系更醒目 ylim = c(0.1, 0.22) # 固定纵轴范围,突出变化细节 ) grid(lty = 2, col = "gray") # 添加灰色虚线网格
关键细节说明
- 转移矩阵的
byrow=TRUE:这一步很重要,确保矩阵的行和你给出的转移概率顺序完全匹配,否则计算结果会出错; - 分布更新逻辑:每一步的分布向量都是前一步向量和转移矩阵的乘积,这是马尔可夫链的核心性质;
- 绘图参数:用
type="b"同时展示点和线,能清晰看到每个步数对应的概率值,ylim固定纵轴范围可以让变化趋势更明显。
运行这段代码后,你会看到状态s的概率从初始的0.2(1/5)开始,逐步向极限分布的0.1478365收敛的过程。
内容的提问来源于stack exchange,提问作者tagdodger33
相关产品推荐
相关产品推荐

