r中无专用包的随机流行病模型(如SIRS)

2024-09-26 18:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

作为家庭作业,我需要使用区间为U(0,1)-SI、SIS、SIRS、SEIR、SEIR的随机数建立随机模型,而不需要使用专用工具、公式、循环和条件表达式。基于matlab中的示例代码,我成功地创建了一个工作SI模型,但为I->;我得到两条简单的曲线。我也有python中的代码,但我无法将其转换为强制R使用。我已经为此挣扎了7天,请帮助我至少修改此代码,以获得一个工作的SIR模型,了解正确的代码结构。我只是在学习R语言更高级的应用

致意 拉德克


library(ggplot2)

beta <- 0.5
gamma <- 0.1
sigma <- 0.1
eta <- 0.2

N <- 1000
Czas <- seq(0, 100, 0.001)
Tmi <- length(Czas)


zmS <- rep(0, Tmi)
zmI <- rep(0, Tmi)
zmR <- rep(0, Tmi)

zmI[1] = 1
zmS[1] = N - zmI[1]
zmR[1] = 0

u1 <- runif(Tmi, 0, 1)
u2 <- runif(Tmi, 0, 1)
u3 <- runif(Tmi, 0, 1)

for (i in 1: (Tmi - 1)) {
  
  p1 = (beta * zmI[i] * zmS[i]) / (N^2)
  p2 = (gamma * zmI[i]) / N
  p3 = (eta * zmR[i]) / N
  
  if (u1[i] < p1) {
    zmS[i + 1] = zmS[i] - 1
    zmI[i + 1] = zmI[i] + 1
  } else {
    zmS[i + 1] = zmS[i]
    zmI[i + 1] = zmI[i]
  }
  
  if (u2[i] < p2) {
    zmI[i + 1] = zmI[i] - 1
    zmR[i + 1] = zmR[i] + 1
  } else {
    zmI[i + 1] = zmI[i]
  }
  
}

SIRS <- data.frame(zmS, zmI, zmR)

ggplot(SIRS, aes(Czas)) + 
  geom_line(aes(y = zmS, colour = "S")) + 
  geom_line(aes(y = zmI, colour = "I")) + 
  geom_line(aes(y = zmR, colour = "R"))

Tags: 代码模型lineaeszmicolourgeomsi

热门问题