SIRモデル(2)
あらまし
感染症モデルについての備忘録です。
過去記事の一覧はこちら。 記事一覧 - Baggage Claim
SIRモデルのpythonコード
SIRモデルのコードを示そう。 Scipy の odeint を使う。
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt
odeint のドキュメント。 scipy.integrate.odeint — SciPy v1.4.1 Reference Guide
odeint(func, y0, t, args=()) で func に記述したシステムに対し、初期条件 y0 と時間刻み t を array で、パラメータをタプルで渡すと、 y がarray で戻ってくる。
# SIRモデルの本体 def func_sir(init_list, t, beta, gam): dsdt = -beta * init_list[0] * init_list[1] didt = beta * init_list[0] * init_list[1] - gam * init_list[1] drdt = gam * init_list[1] return [dsdt, didt, drdt] # 可視化 def make_fig(t_list, val_list): fig = plt.figure() plt.plot(t_list, val_list[:, 0], label = "S") plt.plot(t_list, val_list[:, 1], label = "I") plt.plot(t_list, val_list[:, 2], label = "R") plt.legend() plt.show() # 本文 if (__name__ == '__main__'): t_list = np.linspace(0, 50, 1000) # 時間刻み beta = 1 / 1000 # パラメータ gam = 1 / 10 parm = (beta, gam) init_list = [999, 1, 0] #初期値 S(0), I(0), R(0) N = 1000 # 総人口 R0 = N * beta *(1/gam) # 基本再生産数 val_list = odeint(func_sir, init_list, t_list, parm) # 計算 make_fig(t_list, val_list) #可視化
おわりに
より発展的なモデル(SEIRモデルやSIRSモデル など)も出ているので、興味のある方はGoogle先生にお尋ねいただきたい。
参考文献
SIRモデルの基礎については、この2文献を参考にした。 著者の西浦先生は近日メディアで頻繁に情報発信を行っている方だ。 なお、この2文献はパラメータ \beta の定義に少しだけ違いがある。 この記事では、2文献目のものに準じて解説を行った。
- 西浦博,稲葉寿 : 感染症の流行:感染症数理モデルにおける定量的課題, 統計数理, Vol. 54, No. 2, pp. 461-480, 2006.
- 稲葉寿:微分方程式と感染症数理疫学, 数理科学, Vol. 46, No.4, pp. 19-25, 2008.
pythonでの実装については、
scipy.integrate.odeintの使い方まとめ - Qiita
感染病の数学予測モデルの紹介 (SIRモデル) - Qiita
を参考にした。