使用R实现SIR模型,模拟流行病传播过程
SIR模型是一种经典的传染病传播模型,其中S代表易感个体(Susceptible),I代表感染个体(Infected),R代表恢复个体(Recovered)。SIR模型的基本原理是,通过一定的传播速率和恢复速率来描述易感个体被感染,以及感染个体恢复的过程。
SIR模型(易感-感染-恢复模型)用于描述传染病在群体中的传播过程。在该模型中,人口分为三类个体: - 易感者(S):尚未感染但易感的个体。 - 感染者(I):已经感染并能够传播疾病的个体。 - 恢复者(R):已经从疾病中恢复并获得免疫力的个体。
SIR模型的核心方程为:
易感者变化:dS/dt = -β * S * I
感染者变化:dI/dt = β * S * I - γ * I
恢复者变化: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"))
通过仿真结果,可以观察到随着时间的推移,感染者比例会先急剧上升,之后由于恢复者的增加,感染者数量逐渐减少。恢复者的比例会不断上升,而易感者比例会不断下降。