You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中带患者进出的四状态马尔可夫链循环模拟修改需求

R语言四状态马尔可夫链患者模拟代码修改方案

核心修改逻辑

针对需求,我们需要在每次迭代的起始阶段完成两个关键操作:

  • 用rpois(1, lambda = 10)生成随机数量的新患者,全部加入状态1
  • 移除当前所有处于状态4的患者

以下是修改后的完整代码,保留原有的100次迭代、100初始患者、1000次重复模拟的核心设定,仅调整循环内的前置逻辑:

# 定义四状态转移矩阵(示例矩阵,可根据实际需求替换)
transition_matrix <- matrix(c(
  0.7, 0.2, 0.1, 0.0,  # 状态1转移概率
  0.1, 0.6, 0.2, 0.1,  # 状态2转移概率
  0.0, 0.1, 0.5, 0.4,  # 状态3转移概率
  0.0, 0.0, 0.0, 1.0   # 状态4为吸收态,此处修改后会被移除,不影响迭代
), nrow = 4, byrow = TRUE)

# 模拟参数设置
n_iterations <- 100
n_initial_patients <- 100
n_simulations <- 1000

# 存储每次模拟各状态的患者数量
results <- array(0, dim = c(n_simulations, n_iterations, 4))

# 重复模拟循环
for (sim in 1:n_simulations) {
  # 初始化患者状态:全部从状态1开始
  current_states <- rep(1, n_initial_patients)
  
  for (iter in 1:n_iterations) {
    # --- 新增:迭代开始时的操作 ---
    # 生成新患者并加入状态1
    new_patients <- rpois(1, lambda = 10)
    current_states <- c(current_states, rep(1, new_patients))
    
    # 移除所有处于状态4的患者
    current_states <- current_states[current_states != 4]
    # ------------------------------
    
    # 统计当前各状态患者数量
    state_counts <- table(factor(current_states, levels = 1:4))
    results[sim, iter, ] <- as.numeric(state_counts)
    
    # 执行马尔可夫状态转移
    if (length(current_states) > 0) {
      current_states <- sapply(current_states, function(s) {
        sample(1:4, size = 1, prob = transition_matrix[s, ])
      })
    }
  }
}

# 可视化结果:各状态患者数量的均值变化
library(ggplot2)
library(reshape2)

# 计算各迭代步的状态均值
mean_results <- apply(results, c(2,3), mean)
mean_df <- melt(mean_results)
colnames(mean_df) <- c("Iteration", "State", "Mean_Patients")

ggplot(mean_df, aes(x = Iteration, y = Mean_Patients, color = factor(State))) +
  geom_line(linewidth = 1) +
  labs(title = "四状态马尔可夫链患者模拟均值变化",
       x = "迭代次数", y = "平均患者数量", color = "状态") +
  theme_minimal()

关键修改说明

  1. 迭代前置操作:在每个iter循环的最开头,先完成新患者添加和状态4患者移除,确保后续的状态转移是基于更新后的患者群体
  2. 状态4处理:由于状态4患者会被直接移除,转移矩阵中状态4的概率设置不影响模拟逻辑(即使设为吸收态也会被清除)
  3. 空群体判断:加入if (length(current_states) > 0)的判断,避免当所有患者都被移除后出现转移错误
  4. 结果统计:用factor(current_states, levels = 1:4)确保即使某状态没有患者,也能统计到0值,保证结果数组的维度一致性

内容的提问来源于stack exchange,提问作者farrow90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:31:06