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文献目のものに準じて解説を行った。

pythonでの実装については、

scipy.integrate.odeintの使い方まとめ - Qiita

感染病の数学予測モデルの紹介 (SIRモデル) - Qiita

を参考にした。