Некоторые вопросы по индексу в моделях ODE в Pymc3 - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в Pymc3, во время кодирования у меня возникают следующие вопросы:
Эта модель была построена для получения значений параметров модели SEIR эпидеми c.

Сначала создайте наблюдаемое значение yobs.

import matplotlib.pyplot as plt
import numpy as np
# 参数设置
T = 100
S, E, I, R = np.zeros(shape=T), np.zeros(
    shape=T), np.zeros(shape=T), np.zeros(shape=T)
N = 10000
E[0] = 0
I[0] = 1
S[0] = N-I[0]
R[0] = 0
beta = 0.6
sigma = 0.1
gamma = 0.1

def seir(t, p1, p2, p3):
    S[t+1] = S[t]-p1*S[t]*I[t]/N
    E[t+1] = E[t]+p1*S[t]*I[t]/N-p2*E[t]
    I[t+1] = I[t]+p2*E[t]-p3*I[t]
    R[t+1] = R[t]+p3*I[t]
    return S, E, I, R

for t in range(T-1):
    S, E, I, R = seir(t, beta, sigma, gamma)
yobs=np.stack([S,E,I,R],axis=1)

Затем создайте модель SEIR с помощью Pymc3 со ссылкой на учебное пособие.

import matplotlib.pyplot as plt 
from scipy.integrate import odeint
import numpy as np
import pymc3 as pm
from pymc3.ode import DifferentialEquation

t = np.linspace(0, 100, 100)
def seir(y, t, p):
    dSdt = -(p[0] * y[0] * y[2] / N)
    dEdt = p[0] * y[0] * y[2] / N - p[1]*y[1]
    dIdt = p[1]*y[1]-p[2]*y[2]
    dRdt = p[2]*y[2]
    return [dSdt, dEdt, dIdt, dRdt]
seir_model=DifferentialEquation(seir,times=t,n_states=4,n_theta=3,t0=0)
with pm.Model() as model:
    beta = pm.Uniform('beta',0,1)
    sigma = pm.Uniform('sigma',0,0.5)
    gamma = pm.Uniform('gamma',0,0.5)
    sigma_2 = pm.HalfCauchy('sigma_2',1)
    seir_curves = seir_model(y0=[9999, 100, 10, 1], theta=[beta, sigma, gamma])

    Yobs = pm.Normal('Y', mu=pm.math.log(seir_curves), sd=sigma_2, observed=yobs)
for RV in model.basic_RVs:
    print(RV.name, RV.logp(model.test_point))

Когда я на этом этапе, мне интересно значение pm.math.log(seir_curves) и seir_curves , а также в этой строке:

Yobs = pm.Normal('Y', mu=pm.math.log(seir_curves), sd=sigma_2, observed=yobs)

Почему mu и sd должны быть такими значениями?
Этот вопрос кажется глупым, но я буду признателен, если кто-нибудь ответит мне или дай мне несколько советов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...