SIR(感受性者-感染者-回復者)モデル SciPy

SIR(感受性者-感染者-回復者)モデル

医療研究でよく使われるロジスティック成長モデルを使用して、ある疾患の感染拡大をモデル化し、その結果をグラフ化します。

この例では、SIR(感受性者-感染者-回復者)モデルを使用します。

このモデルは、感染症の感染拡大を説明するために広く使用されています。

以下がPythonコードの例です:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

# SIRモデルの微分方程式を定義
def sir_model(t, y, beta, gamma):
S, I, R = y
dSdt = -beta * S * I
dIdt = beta * S * I - gamma * I
dRdt = gamma * I
return [dSdt, dIdt, dRdt]

# 初期条件
initial_S = 0.99 # 初期感受性者の割合
initial_I = 0.01 # 初期感染者の割合
initial_R = 0.0 # 初期回復者の割合

# パラメータ
beta = 0.3 # 伝播率
gamma = 0.1 # 回復率

# 解を求める時間範囲
t_start = 0
t_end = 200
t_span = (t_start, t_end)

# 初期条件をまとめる
initial_conditions = [initial_S, initial_I, initial_R]

# 微分方程式を解く
solution = solve_ivp(
sir_model, t_span, initial_conditions, args=(beta, gamma),
dense_output=True, t_eval=np.linspace(t_start, t_end, 1000)
)

# 結果をグラフ化
t = np.linspace(t_start, t_end, 1000)
y = solution.sol(t)

plt.figure(figsize=(10, 6))
plt.plot(t, y[0], label='Susceptible')
plt.plot(t, y[1], label='Infected')
plt.plot(t, y[2], label='Recovered')
plt.xlabel('Time')
plt.ylabel('Proportion')
plt.title('Spread of Infection Using the SIR Model')plt.legend()
plt.grid(True)
plt.show()

このコードは、感染症の感染拡大をモデル化し、感受性者、感染者、回復者の割合を時間に対してグラフ化します。

感染者の数が増減する様子を示すグラフが得られます。

この例は、医療研究感染症の制御戦略の評価に役立つものです。

ソースコード解説

以下はソースコードの詳細な説明です:

1. 必要なライブラリのインポート:

  • numpy:数値計算ライブラリ。
  • scipy.integrate.solve_ivp:微分方程式を解くためのSciPyの関数。
  • matplotlib.pyplot:グラフ描画のためのmatplotlibのサブライブラリ。

2. SIRモデルの微分方程式の定義:

  • sir_model 関数:SIRモデルの微分方程式を定義しています。
    このモデルは感受性者(S)、感染者(I)、回復者(R)の3つの状態変数を持ちます。
    微分方程式は感染症の伝播と回復を表現しており、beta は伝播率、gamma は回復率を表します。

3. 初期条件:

  • initial_S:初期感受性者の割合。
  • initial_I:初期感染者の割合。
  • initial_R:初期回復者の割合。

4. パラメータ:

  • beta:伝播率。感染者が感受性者に感染する速度を示します。
  • gamma:回復率。感染者が回復し、回復者に移行する速度を示します。

5. 解を求める時間範囲:

  • t_start:シミュレーションの開始時間。
  • t_end:シミュレーションの終了時間。
  • t_span:時間範囲をタプルでまとめたもの。

6. 初期条件をまとめる:

  • initial_conditions:初期感受性者、初期感染者、初期回復者の割合をまとめたリスト。

7. 微分方程式を解く:

  • solve_ivp 関数を使用して、SIRモデルの微分方程式を解きます。
    t_span で指定した時間範囲内で、初期条件から始まり、betagamma のパラメータを使用して微分方程式を解きます。
    dense_output=Truet_eval は解の密度を制御します。

8. 結果をグラフ化:

  • ty を使用して、時間と各状態変数(感受性者、感染者、回復者)の割合の結果を取得します。
  • matplotlib を使用して、これらの結果をグラフ化します。
    感受性者、感染者、回復者の割合が時間に対してどのように変化するかを示す折れ線グラフが生成されます。
  • グラフには軸ラベル、タイトル、凡例が含まれており、結果の視覚化を改善しています。

このコードは、SIRモデルを使用して感染症の感染拡大をモデル化し、その結果をグラフ化するためのものです。

感染者数が時間とともにどのように変化するかを示しており、感染症の伝播の理解や制御策の評価に役立ちます。

グラフ解説

グラフは、SIR(Susceptible-Infectious-Recovered)モデルによってモデル化された感染症の感染拡大を示しています。

以下はグラフの詳細な説明です:

1. 横軸 (X軸) - 時間 (Time):

  • X軸は時間を表しており、感染拡大の経過を時間の単位で示しています。
    時間は0から始まり、200までの範囲で変化しています。

2. 縦軸 (Y軸) - 割合 (Proportion):

  • Y軸は割合を表しており、感受性者 (Susceptible)、感染者 (Infected)、回復者 (Recovered) の各グループの割合を示しています。
    割合は0から1の範囲で変動し、1に近づくほど大きな割合を表します。

3. 感受性者 (Susceptible):

  • グラフ中の一つ目の曲線は”Susceptible”(感受性者)を表しています。
    初めは高い割合で始まり、時間の経過とともに減少します。
    感受性者は感染者と接触することで感染する可能性を持つ人々を指します。

4. 感染者 (Infected):

  • グラフ中の二つ目の曲線は”Infected”(感染者)を表しています。
    感染者の割合は初めは低く、感染拡大が進行するにつれて増加し、最終的に減少します。
    感染者は病気を保持し、他の人々に感染を広げる要因です。

5. 回復者 (Recovered):

  • グラフ中の三つ目の曲線は”Recovered”(回復者)を表しています。
    回復者の割合は初めは0で始まり、感染者が回復するにつれて増加します。
    回復者は感染症から回復し、免疫を持つ個人です。

6. タイトル (Title):

  • グラフのタイトルは”Spread of Infection Using the SIR Model(SIRモデルによる感染症の拡大)”となっており、このグラフがSIRモデルに基づいて感染症の拡大を説明していることを示しています。

このグラフは、感染症がどのように広がり、感受性者、感染者、回復者の割合が時間の経過とともに変化するかを可視化しています。

感染症が拡大し、最終的には感染者の数が減少することがSIRモデルによって示されています。