スキップしてメイン コンテンツに移動

感染症モデル入門(4):統計言語[R]によるSIRモデルのシミュレーション

1.SIRモデルを統計言語[R]でシミュレーションする。


以下にRのプログラムを示す。なるべくシンプルなコーディングを目指したので、統計言語[R]の初歩的な知識があれば、コメント(#)行をみれば、何をやっているのかがわかるであろう。
このプログラムは、自分のPCに[R]が既にインストールしてあれば、その上で動く。あるいは、手軽に試してみたい場合には、ネット上にオンラインで[R]を走らせるサイトがいくつかある。たとえば、

1) ここcompile R onlineをクリックして、以下のプログラムをコピペして、左下にある[run it]をクリックするか、自分のPCでF8を押せばよい。あるいは、
2) ここpaiza.ioでも同様なことができる。

試してみてはいかがだろうか?

# ==================================================
#  [R]によるSIRモデルの計算 ##==================================================
##### シミュレーション期間の設定とS,I,Rベクトルの定義
No_of_Days=50; N1=No_of_Days+1; S=I=R=R_t=numeric(N1); 
##### S,I,Rの初期値とパラメータ値の設定
S[1]=100; I[1]=1; R[1]=0; beta=0.01; gamma=0.1
##### SIRモデルの繰り返し計算
for (t in 1:No_of_Days){
    S[t+1] = S[t] - beta*S[t]*I[t]
    I[t+1] = I[t] + beta*S[t]*I[t] - gamma*I[t]
    R[t+1] = R[t] + gamma*I[t]
    R_t[t+1] = S[t+1]*beta/gamma
}
##### S,I,Rのグラフを描く(S,I,Rと横軸に日数をひとまとめのデータフレームとしてから)
output = data.frame( S, I, R, date=1:N1 )
library(ggplot2)
ggplot( output, aes(date)) +
  geom_line(aes(y = S, colour = "S")) +
  geom_line(aes(y = I, colour = "I")) +
  geom_line(aes(y = R, colour = "R"))
##### 再生産数 R_tのグラフを描く
plot(R_t, type="l", lwd=2, xaxt="n")
# ==================================================

2.  S,I,R の推移をグラフでしめす

上のプログラムを実行すれば、次のようSIRと実行再生産数R_tの推移をえることができる。
自分なりのシナリオを描いて、政策シミュレーションをやってみたい場合には、上のプログラムの

##### S,I,Rの初期値とパラメータ値の設定

S[1]=100; I[1]=1; R[1]=0; beta=0.01; gamma=0.1

で、それぞれの初期値S[1]=100; I[1]=1; R[1]=0; と 感染率と回復率のパラメータを変化させてることで可能である。

統計言語[R]によるSIRモデルの計算結果

Rによる実行再生算数:R_t



コメント

このブログの人気の投稿

感染症モデル入門 (3) Excelで感染症 SIRモデルをシミュレーションする

感染症流行をExcelでシミュレーションする(ファイルがダウンロード出来ます)。 1.準備:ファイルのダウンロードをする。 SIRモデルのわかりやすい(つまり最も簡単な)Excelシートを作成した。Excelファイルを用いたシミュレーションは以下の二通りの方法で実行できる。 1.1 「Google スプレッドシート」を用いてオンラインでSIRモデルのシミュレーションを行う 。  オンラインでシミュレーションをする場合には、Google スプレッドシートをつかいます。「 ここ 」をクリックしてください。「感染症数理モデル_入門と応用_森平_2020-05-29」というファイルがGoogle スプレッドシート上で開くはずです。次のような画面を見ることができます。 携帯などから利用していて、通信環境などが良くないときには、オフラインでの実行をおすすめします。>ファイル?オフラインで実行する、とすれば、自分の携帯にダウンロードしてあるGoogle スプレッドシート上でこのプログラムが実行できるはずです。 1.2 Excelファイルとしてダウンロードして、自分のPC上でシミュレーションをおこなう。  Excelシートとして使い時は、上で示したGoogle スプレッドシートのメニュー上で >ファイル>ダウンロード>MicroSoft Excel (.xlsx)  としてファイルをExcelプログラムしてダウンロードしてください。ダウンロードしたファイルを実行すると、次のような画面が現れるはずです。 2.初期値とパラメータ値を設定する。 2.1 Excelのシートで説明しよう。1行目は変数名とパラメー名前である。2行目の薄緑色のセルに具体的な数値を与える必要がある。ここでは次のような値を初期値とパラメータ値として設定している。 1)  感染可能人数の初期値:$S_0=100$人 2)  感染者人数の初期値:$I_0=1$人 3)  回復人数の初期値:$R_0=0$人 4)  感染率:$\beta=0.01$,つまり1パーセント 5)  回復率:$\beta=0.1$,つまり10パーセント (削減率については今回は計算結果に影響の無いようにしている) これらの数値を入力すれば、直ちに50日間の感染症流行の推

感染症モデル入門 (5) 再生産数Rtとそれに基づくリスク管理

再生産数$R_t$を理解する。 1.再生産数とはなにか? SIRモデルから導出する。 離散的なSIR感染症モデルの2番目の式(2)を次のように変形する。 \begin{eqnarray}   {I_{t + 1}} &=& {I_t} + \beta {S_t}{I_t} - \gamma {I_t} \hfill \label{eqtn:1} \\    \Rightarrow \,\,\,\,\,\,{I_{t + 1}} - {I_t} &=& \left( {\beta {S_t} - \gamma } \right){I_t} \hfill \nonumber \\    \Rightarrow \,\,\,\,\,\,\frac{{{I_{t + 1}} - {I_t}}}{{{I_t}}} &=& \left( {\beta {S_t} - \gamma } \right) \end{eqnarray}  最後の式1の左辺の「感染者数の伸び率」が0を超える(下回る)ことは、感染人数$I_t$が増加(減少)することを意味する。言い換えれば、右辺が、 \[\begin{gathered}   \beta {S_{t}} - \gamma  > 0 \,\,\,\,\,\,\Rightarrow \,\,\,\,\,\,{S_{t}} > \frac{\gamma }{\beta } \hfill \\ \end{gathered} \] であれば、感染者数は増加する。 両辺を $\gamma/\beta$ で割ると, 明日の時点における再生産数を得ることができる。 \begin{equation} \boxed{\,\,{{\bar R}_t} \equiv {S_t}\frac{\beta }{\gamma } > 1\,\,} \end{equation}  これを時点$t$における実行再生産数と呼ぶ。回復人数を示す$R_t$と区別するために、$R$の上にバーを付けて再生産数$\bar{R}_t$としている。この意味について以下で議論する。その前に感染症の「閾値定理」と「基本再生産数」を定義する。 2.基本再生産数$\bar R_0$の

新型コロナ対策の三種の神器とは、著名な医学雑誌掲載論文の結論

新型コロナ対策の効果は? メタ分析の結果が発表 新型コロナウィルスにどのように立ち向かうべきか? 決定的な特効薬やワクチンがまだ実現していない現状では、100年前のスペイン風邪の世界的な流行と同様な方法しか無いのが、現状だろう。そこで、  医学の研究誌として有名な「 The Lancet 」に注目すべきと言うか、やっぱり、という論文が掲載されました。以下のURLからも無料でダウンロードできます。 Chu, D. K., Akl, E. A., Duda, S., Solo, K., Yaacoub, S., Schünemann, H. J., Chu, D. K., Akl, E. A., El-harakeh, A., Bognanni, A., Lotfi, T., Loeb, M., Hajizadeh, A., Bak, A., Izcovich, A., Cuello-Garcia, C. A., Chen, C., Harris, D. J., Borowiack, E., … Schünemann, H. J. (2020). Physical distancing, face masks, and eye protection to prevent person-to-person transmission of SARS-CoV-2 and COVID-19: A systematic review and meta-analysis. The Lancet,. https://doi.org/10.1016/S0140-6736(20)31142-9 これは、数百の論文から厳選した論文をさらに統計的に分析し、そこから共通して見られる、しかも確度の高い結論を導き出そうとするメタ分析という手法(統計パッケージSTATAでも利用できます)をつかって、新型コロナウィルス対策として何が重要なのかを見つけ出そうとしたものです。下の図がその結論(日本語の説明を加えておきました)なのですが、 マスクをすること、適切な社会的距離を保つこと、目の防護シールドをつけることは他感染者確率を減らすに有効であることを示しています。もし、そうしたことをしないと感染確率が、そうでない場合に比較して相当大きくなることをしめしています。  つまり、