R语言二状态马尔可夫链模拟:按指定转移概率生成500个观测值的方法
R语言两状态马尔可夫链模拟实现
第一步:初始化参数
- 状态集合:
k <- c(0,1) - 随机生成转移概率参数:
v <- runif(2, 0.3, 0.7)alpha <- v[1]:当前状态为0时,下一状态仍为0的概率beta <- v[2]:当前状态为1时,下一状态切换为0的概率
第二步:单步状态转移逻辑实现
通过sample()函数实现按指定概率抽样,核心判断逻辑如下:
if (Xn == k[1]) { # 当前状态为0,按概率alpha保留0,1-alpha切换为1 Xn_plus_1 <- sample(k, size = 1, prob = c(alpha, 1 - alpha)) } else { # 当前状态为1,按概率beta切换为0,1-beta保留1 Xn_plus_1 <- sample(k, size = 1, prob = c(beta, 1 - beta)) }
第三步:for循环生成500个观测值
完整模拟代码如下,运行后X向量将存储X1到X500的全部观测结果:
# 可选:设定随机种子保证结果可复现,不需要可删除该行 set.seed(123) # 初始化存储500个观测的向量 X <- numeric(500) # 设定初始状态X1,也可改为sample(k, 1)随机生成初始状态 X[1] <- 0 # 循环生成X2到X500 for (n in 1:499) { current_X <- X[n] if (current_X == k[1]) { X[n+1] <- sample(k, size = 1, prob = c(alpha, 1 - alpha)) } else { X[n+1] <- sample(k, size = 1, prob = c(beta, 1 - beta)) } }
模拟完成后可通过head(X)查看前若干个观测值,验证转移逻辑是否符合预期。
内容的提问来源于stack exchange,提问作者Jose Moquiambo
相关产品推荐
相关产品推荐

