感染症流行の数理モデル


はじめに

新型コロナウイルスが世界的に大流行しており、世界保健機関(WHO)は1月30日に緊急事態宣言を行いました。
コロナウイルスのような感染症を数理モデルを用いてシミュレーションを行い、感染流行を予測する試みが以前から行われてきました。
この記事では、感染症流行の数理モデルの中で最も基本的なSIRモデルの紹介を行い、Pythonを用いて数値シミュレーションを行います。

SIRモデルとは

SIRモデルは感染症の短期的な流行過程を決定論的に記述する古典的なモデル方程式です[1]。モデルの名前は未感染者(Susceptible)、感染者(Infected)、回復により免疫を得た人(Recovered、あるいは感染後死亡 Removed)からきています。このモデルは1927年にW. O. KermackとA. G. McKendrickによって提案されました[2]。このモデルは次のような常微分方程式で表すことができます。

\begin{align}
\frac{dS(t)}{dt}&=-\beta S(t)I(t) \\
\frac{dI(t)}{dt}&=\beta S(t)I(t)-\gamma I(t) \\
\frac{dR(t)}{dt}&=-\gamma I(t)
\end{align}

ここで、各変数の意味は以下の通りです。

  • $S(t)$:時間tにおける未感染者数
  • $I(t)$:時間tにおける感染者数
  • $R(t)$:時間tにおける回復者数あるいは死亡者数
  • $\beta$:感染率
  • $\gamma$:回復率あるいは隔離率

SIRモデルは連立常微分方程式のため、一般解を求めるのは困難です。
そのため、この記事では数値計算でよく使われているルンゲクッタ法を用いてシミュレーションを行います。
シミュレーションの初期条件は以下の通りです(※ここで使用する値は適当に決めたもので、特にこれといった根拠は一切ありません)。

  • 人口数(N):100万人
  • 初期感染者:100人
  • 感染率($\beta$):0.0000005
  • 回復率($\gamma$):0.07

ソースコード

main.py
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

def main():
  # 各パラメータの設定
  N = 1000000
  alpha=0.5/N
  beta=0.07
  dt=0.1

  init_SIR_value=[N-100, 100, 0] # 初期条件の設定
  times = np.arange(0.0, 100, dt) # 期間設定
  results = odeint(SIR, init_SIR_value, times, args=(alpha,beta)) #odeintで計算
  # 可視化
  plt.title("SIR Model")
  plt.plot(times[::10],results[::10,0]/N, color=(0.0,1,0.0), linewidth=1.0, label='S')
  plt.plot(times[::10],results[::10,1]/N, color=(1.0,0,0.0), linewidth=1.0, label='I')
  plt.plot(times[::10],results[::10,2]/N, color=(0.0,0,1.0), linewidth=1.0, label='R')
  plt.xlim(0,100)
  plt.legend()
  plt.xlabel('day')
  plt.ylabel('value')
  plt.grid(True)
  plt.show()


def SIR(v,t,alpha,beta):
  return [-alpha*v[0]*v[1], alpha*v[0]*v[1]-beta*v[1], beta*v[1]]

if __name__ == '__main__':
  main()

シミュレーションの結果

上記のプログラムを実行すると以下のような結果が得られます。

感染者数はあるピークを迎えたら減衰していくことがグラフから読み取れます。

おわりに

この記事では感染症流行の数理モデルのひとつであるSIRモデルについて紹介を行い、シミュレーションにて感染流行の推移を行いました。
新型コロナウイルスはインフルエンザなどの感染症と異なり、潜伏期間が長いのでこのモデルを適用するのは不向きだと言われています。
そこで、このモデルに潜伏期間を考慮したSEIRモデルという数理モデルも提案されています。
今回はこのモデルについて紹介はしませんが、また機会があれば別の記事で紹介をします。

参考文献

[1] SIRモデル -Wikipedia-
[2] A Contribution to the Mathematical Theory of Epidemics