SIRモデル
感染"初期"で、S(t)がその範囲の人口 Nだとすると
$ \frac{dI(t)}{dt} = I(t)N\beta - I(t)\gamma
で、初期 I(0)だとして解くと
$ I(t) = I(0)exp(\gamma(\frac{N\beta}{\gamma} -1 ))t
この N*beta / gamma の部分をR0として アールノートと呼ぶ
R0がプラスなら指数関数は増大、マイナスなら減少
依存するのは、
N: 人口数
beta:
人と人(SとIが)どれくらい接触するか、
接触した際にどれくらい感染しやすいか(ここがウイルス固有の数字になる?)
gamma: 回復する時間。Covid-19ならだいたい9日くらい。頭の中で数字をいじるときには、0.1 くらいにしておけばよい? R0を2, gamma=0.1にすれば、I(0) * exp(0.1t)
この場合、N*betaが0.2になるので、Nを100万とすれば、betaは 2/100万で良い?
ここらあたりで、自分で数字をいじる。単に指数関数の結果を並べればよい
https://gyazo.com/f426ba1ce9021947c382e3f10a10e292
R0が2, gamma=0.1だと、 だいたいt=7(日)で倍になる。利率10%で7年廻したイメージ。
どれくらいで飽和するのか?
今までは、S(uceptible)がNだとしてたが、SIRでは感染したら、もう感染しないので、それを見るので、
Nのところを S = N - I にすればよい。
....うまくいかない....よくわかりません....
どこかから拾ってきた pythonのscriptをやる
code: sir.py
def SIR_EQ(v, t, beta, gamma):
return [
beta * v0 * v1 - gamma * v1, ]
t_max = 300
dt = 1
times = np.arange(0, t_max, dt)
S_0 = 50000000
I_0 = 1000
R_0 = 0
N_total = S_0 + I_0 + R_0
gamma_const = 0.08
R0 = 3
beta_const = R0/N_total*gamma_const
args = (beta_const, gamma_const)
result = odeint(SIR_EQ, ini_state, times, args)
plt.stackplot(times, result:,1/S_0,result:,2/S_0,result:,0/S_0) Gamma=0.08として(12.5日で回復)、
https://gyazo.com/d170450a3c98c884516a2d1c28659cd0
R0が3。感染者のピークが3割(80日くらい)、100日くらいで9割くらいが感染中か済み
https://gyazo.com/59ed4e0296715454ba479a3d2853aab5
R0が2 15%(130日くらい)がピーク。 200日くらいで8割が感染中か済
https://gyazo.com/b713e0b5ed53c59ce215de3ea856c369
R0が1.5 10%弱がピークに感染中(250日くらい)になる。300日くらいで6割が感染済みか感染中。
致死率が0.1%以下(通常のインフルエンザ)なら許容できるかもだけど、COVID-19は優しくない..... 次に実効再生産数. 感染が始まってから、データとしてどれくらいの感染速度になってるかを見る
NをSに戻して、 $ exp(\gamma(\frac{S\beta}{\gamma} -1 )t)だったので、
$ R_0 = \frac{S\beta}{\gamma}だったので、
$ R = \frac{S\beta}{\gamma}
....R0からRを出す部分がよくわからない。
ここは、Sが定数でなくなるので、微分方程式をとき直す必要がある?