如何在Base R中实现关联状态的硬币抛掷模拟?
用Base R实现状态关联的硬币抛掷模拟
下面是完全基于Base R的实现代码,逻辑和你描述的状态依赖规则完全一致:
# 定义模拟的总次数 n <- 100 # 创建空的字符向量存储每一次抛掷结果 states <- character(n) # 生成初始状态:以0.5概率随机选择H或T states[1] <- sample(c("H", "T"), size = 1, prob = c(0.5, 0.5)) # 循环生成后续状态 for (i in 2:n) { prev_state <- states[i - 1] # 根据前一个状态设置抽样概率 if (prev_state == "H") { states[i] <- sample(c("H", "T"), size = 1, prob = c(0.6, 0.4)) } else { states[i] <- sample(c("H", "T"), size = 1, prob = c(0.4, 0.6)) } } # 查看前几个结果 head(states) # 统计H和T的出现次数 table(states)
代码解释
- 初始化向量:创建长度为
n的空字符向量,用来依次存储每次抛掷的状态。 - 初始状态生成:使用
sample()函数以均等概率生成第一个状态,满足你提出的第二步要求。 - 循环生成后续状态:从第2个元素开始,每次根据前一个状态的取值,切换对应的抽样概率:
- 当前状态为H时,下一次H的概率为0.6,T为0.4;
- 当前状态为T时,下一次T的概率为0.6,H为0.4。
- 结果验证:
head()可以快速查看前几个模拟结果,table()用来统计两种状态的总出现次数,和你用markovchain包的输出逻辑一致。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

