SIR模型

使用R实现SIR模型,模拟流行病传播过程


日期

基本介绍

SIR模型是一种经典的传染病传播模型,其中S代表易感个体(Susceptible),I代表感染个体(Infected),R代表恢复个体(Recovered)。SIR模型的基本原理是,通过一定的传播速率和恢复速率来描述易感个体被感染,以及感染个体恢复的过程。

SIR模型仿真

SIR模型(易感-感染-恢复模型)用于描述传染病在群体中的传播过程。在该模型中,人口分为三类个体: - 易感者(S):尚未感染但易感的个体。 - 感染者(I):已经感染并能够传播疾病的个体。 - 恢复者(R):已经从疾病中恢复并获得免疫力的个体。

模型方程

SIR模型的核心方程为:

  1. 易感者变化:dS/dt = -β * S * I

  2. 感染者变化:dI/dt = β * S * I - γ * I

  3. 恢复者变化:dR/dt = γ * I

其中: - β 是传染率,控制感染者向易感者传播病毒的速度。 - γ 是恢复率,控制感染者恢复并转为恢复者的速度。

library(deSolve)
library(ggplot2)

# 定义SIR模型的微分方程
sir_model <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # 定义SIR模型的方程
    dS <- -beta * S * I
    dI <- beta * S * I - gamma * I
    dR <- gamma * I
    
    # 返回微分方程的导数
    list(c(dS, dI, dR))
  })
}

模拟过程

在本模型中,我们使用了以下初始条件: - 易感者初始比例:99% - 感染者初始比例:1% - 恢复者初始比例:0%

传染率 β 设置为 0.3,恢复率 γ 设置为 0.1,模拟天数为 160天。

# 初始条件
S0 <- 0.99  # 易感者初始比例
I0 <- 0.01  # 感染者初始比例
R0 <- 0.0   # 恢复者初始比例
state <- c(S = S0, I = I0, R = R0)

# 参数
beta <- 0.3  # 传播率
gamma <- 0.1  # 恢复率
parameters <- c(beta = beta, gamma = gamma)

# 时间范围
times <- seq(0, 160, by = 1)

# 使用ode函数求解微分方程
out <- ode(y = state, times = times, func = sir_model, parms = parameters)

# 将输出结果转换为数据框
out_df <- as.data.frame(out)

结果展示

ggplot(out_df, aes(x = time)) +
  geom_line(aes(y = S, color = "易感者 (S)")) +
  geom_line(aes(y = I, color = "感染者 (I)")) +
  geom_line(aes(y = R, color = "恢复者 (R)")) +
  labs(x = "时间 (t)", y = "人数比例", 
       title = "SIR模型:流行病传播模拟", 
       color = "群体类别") +
  theme_minimal() +
  theme(legend.position = "top") +
  scale_color_manual(values = c("blue", "red", "green"))

结果分析

通过仿真结果,可以观察到随着时间的推移,感染者比例会先急剧上升,之后由于恢复者的增加,感染者数量逐渐减少。恢复者的比例会不断上升,而易感者比例会不断下降。

李康国
417网吧网管