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

如何用R绘制SIR模型中不同beta值下的感染人数I曲线?

解决R语言SIR模型多beta值感染曲线绘制问题

你可以通过遍历指定的beta值,循环计算每个beta对应的SIR模型结果,再将每条感染曲线叠加到同一张图上。修改后的完整代码如下:

library(deSolve)

# 定义SIR模型函数
sir_model <- function(time, variables, parameters) {
  with(as.list(c(variables, parameters)), {
    dS <- -beta * I * S
    dI <-  beta * I * S - gamma * I
    dR <-  gamma * I
    return(list(c(dS, dI, dR)))
  })
}

# 固定参数与初始值
initial_values <- c(S = 999, I = 1, R = 0)
time_series <- seq(0, 100)
gamma <- 0.3
beta_values <- c(0.001, 0.002, 0.003, 0.004, 0.005)
# 定义对应beta的颜色,方便区分
line_colors <- c("black", "red", "blue", "green", "purple")

# 初始化空图,设置坐标轴范围和标签(type="n"表示不绘制任何点线)
plot(
  x = time_series,
  y = numeric(length(time_series)), # 空y值
  type = "n",
  xlab = "time (days)",
  ylab = "Number of infections",
  ylim = c(0, max(sapply(beta_values, function(b) {
    # 提前计算所有beta对应的最大感染数,用来设置y轴范围
    params <- c(beta = b, gamma = gamma)
    res <- ode(y = initial_values, times = time_series, func = sir_model, parms = params)
    max(res[, "I"])
  })))
)

# 循环遍历每个beta值,计算并绘制曲线
for (i in seq_along(beta_values)) {
  current_beta <- beta_values[i]
  parameters <- c(beta = current_beta, gamma = gamma)
  
  # 运行SIR模型
  sir_result <- ode(
    y = initial_values,
    times = time_series,
    func = sir_model,
    parms = parameters
  )
  sir_result_df <- as.data.frame(sir_result)
  
  # 将当前beta对应的感染曲线添加到图中
  lines(
    x = sir_result_df$time,
    y = sir_result_df$I,
    col = line_colors[i],
    lwd = 2 # 设置线宽,更清晰
  )
}

# 添加图例,说明每条曲线对应的beta值
legend(
  "topright",
  legend = paste("β =", beta_values),
  col = line_colors,
  lwd = 2
)

关键修改说明

  • 先定义所有要测试的beta_values向量,以及对应的颜色向量line_colors,方便区分不同曲线
  • 用plot(type="n")初始化空图,通过sapply提前计算所有beta对应的最大感染数,设置合适的y轴范围,避免部分曲线超出显示范围
  • 在for循环中,每次替换parameters里的beta值,重新运行SIR模型,再用lines()函数将曲线叠加到已有图上(而不是重新开新图)
  • 最后添加图例,让每条曲线对应的beta值一目了然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:22