SIRモデル(感染症モデル)について〜googleのスプレッドシートでグラフ化してみる〜

SIRモデル

※ この記事はnoteをやっていた頃に投稿した記事です。こちらのブログに移しました。
(note投稿日:2022年11月6日)

関連記事

SIRモデル(感染症モデル)について〜SIRモデルとは〜

SIR数列モデル

記号

N : 人口
Sn : n日目の感受性者数
In : n日目の感染者数
Rn : n日目の回復した人数
β : 感染率
γ : 回復率

{Sn+1Sn=βSnInIn+1In=βSnInγInRn+1Rn=γIn

設定

次のような状況を考える。

N=10000000 (人口一千万人)
I1=1 (感染者数1人)
S1=9999999
R1=0
γ=0.1 (感染したら10日で回復)

感染率について

前回は全体を12人とし、その12人全員が毎日接触するとしていた。今回は以下のように設定する。

  • 感染者1人に対し、1日10人と接触する
  • 感染者と感受性者が接触すると1日あたり0.05の確率で感受性者が感染するとする

n日目、感受性者の割合はSn/Nである。
なので、感染者1人が誰か1人(感受性者または感染者または回復した人)と接触する場合、感染する可能性のある人の割合はSn/Nとなる。

n日目の感染者数がInで、感染者1人に対し、1日10人と接触するとしているので、接触したとき感染する確率(0.05)を無視すると、感染者数は

10×In×Sn/N

となる。

よって、接触したとき感染する確率0.05を含ると、n日目からn+1日目にかけての感染者数は

0.05×10×In×Sn/N

以上のことから感染率β

β=0.05×10/N

とすることにする。

googleのスプレッドシートでグラフ化してみる

項目を作成する

  • 一行目に「日数」「感受性者数」「感染者数」「回復した人数」の項目を作成する。
  • 上とは別の列に初期値に必要な項目とその値を設定する
  • 感染率は0.5/Nとしている

初期値の設定

  • 日数を記入
  • 今回は100日ぐらいまで調べようと思うので1から100までA列に記入
  • 回復した人数は「0」
  • 感染者数は「感染者数初期値」
  • 図のスプレッドシートでは「=F3」
  • 感受性者数は「全体-感染者数初期値」
  • 図のスプレッドシートでは「=F2-F3」

2日目の感受性者数

  • S2=S1βS1I1より、感受性者数の列の2日目のセルに式「S1βS1I1」を記入する
  • 図のスプレッドシートでは「=B2-$F$4*B2*C2」
  • 感染率βは固定のため、シートのF4は$マークをつけておく

2日目の感染者数

  • I2I1=βS1I1γI1より、感染者数の列の2日目のセルに式「I1+βS1I1γI1」を記入する
  • 図のスプレッドシートでは「=C2+$F$4*B2*C2-$F$5*C2」
  • 感染率βと回復率γは固定のため、シートのF4とF5は$マークをつけておく

2日目の回復した人数

  • R2R1=γI1より、回復した人数の列の2日目のセルに式「R1+γI1」を記入する
  • 図のスプレッドシートでは「=D2+$F$5*C2」
  • 回復率γは固定のため、シートのF5は$マークをつけておく

n日目の感受性者数、感染者数、回復した人数

  • 感受性者数、感染者数、回復した人数それぞれの列で2日目の行のセルの右下にカーソルを合わせて100日目までクリックしながら下にスライドさせる

グラフ挿入

  • 感受性者数と感染者数と回復した人数の列を選択し、挿入→グラフをクリック
  • すると折れ線グラフがいい感じに現れる
  • 後はタイトル変えたり、横軸に日数を付け加えたりなどグラフの微調整をする
タイトルとURLをコピーしました