AKJPプロンプト

Mathematical.jp BU/repo



感染率による感染者数増加の比較


感染率の違いによるの比較

人口と感染症の数理モデルとしてのSIRモデルにて、感染率の違いによる感染者数の増減をグラフ化してどのようになるかをR Studioを使用して比較してみましょう。

感染率の違いによる感染者数の増減比較

感染率の違いによる感染者数の増減をグラフ化してどのよになるかを比較してみましょう。

感染率を0.9と0.4にした場合の比較で今回は変数S、I、Rをそれぞれ簡単にしてRを0とします。

感染率90%の場合

次のように入力していきます。パッケージのodeをインストールしていない場合はインストールしておいてください。

sir2021_90 <- function(t, y, parameters){
            with(
            as.list(c(parameters, y)),
                            list(c
                                      (S = -lambda * S * I,
                                       I = lambda * S * I - gamma * I,
                                       R = lambda * I)
                                )
             )
    }

R=0としてSはS = 0.999、Iは I = 0.001として値を代入していきます。

y_init <- c(S = 0.999, I = 0.001, R = 0)

感染率として入力していきます。

out2021_90 <- ode(y = y_init, times = 1:50, func = sir2021_90, parms = c(lambda = 0.9, gamma = 0.1))
write.csv(out2021_90, "out2021_90.csv")
out2021_90_csv <- read.csv("out2021_90.csv",header=TRUE,sep=",")
out2021_90_data <- read.csv(file = "out2021_90.csv", header = TRUE, sep = ",")
out2021_90_data_1 <- as.data.frame(out2021_90_data)

Withを使ってSIRそれぞれを描画するために以下のように入力していきます。

with(out2021_90_data_1, {
plot(time, S, type = "l", col = "blue", xlab = "経過日数", ylab = "人口")
lines(time, I, col = "red")
lines(time, R, col = "green")
})
legend("right", c("感染人口", "感染者", "回復者"), col = c("blue", "red", "green"), lty = 1, bty = "n")

感染率40%の場合

sir2021_40 <- function(t, y, parameters){
    with(
        as.list(c(parameters, y)),
        list(c
             (S = -lambda * S * I,
                 I = lambda * S * I - gamma * I,
                 R = lambda * I)
        )
    )
}
y_init <- c(S = 0.999, I = 0.001, R = 0)

感染率をとして入力していきます。

out2021_40 <- ode(y = y_init, times = 1:50, func = sir2021_40, parms = c(lambda = 0.4, gamma = 0.1))
write.csv(out2021_40, "out2021_40.csv")
out2021_40_csv <- read.csv("out2021_40.csv",header=TRUE,sep=",")
out2021_40_data <- read.csv(file = "out2021_40.csv", header = TRUE, sep = ",")
out2021_40_data_1 <- as.data.frame(out2021_40_data)
with(out2021_40_data_1, {
plot(time, S, type = "l", col = "blue", xlab = "経過日数", ylab = "人口")
lines(time, I, col = "red")
lines(time, R, col = "green")
})
legend("right", c("感染人口", "感染者", "回復者"), col = c("blue", "red", "green"), lty = 1, bty = "n")

2つの感染者数推移比較

感染率40%の場合の感染者数の推移をグラフ化します。

with(out2021_40_data_1, plot(time, I, pch = 19, col = "red", ylim = c(0, 1)))

90%の場合に比べると山の形がなだらかで分散が大きいように見えます。

実際に上記のグラフと感染率90%のグラフとを比較してみましょう。

with(out2021_50_data_1, plot(time, I, pch = 19, col = "red", ylim = c(0, 1)))
with(out2021_90_data_1, lines(time, I, col = "red"))

次のように出力されます。

感染力を比較的抑えることができると上のプロット図のように一日当たりの感染者数を抑えられるようになります。
感染力抑止によって感染者流向のピークを下げさせて感染者数の増加の速さを抑制し感染拡大を抑止することができるということがわかります。


PAGE TOP