5
我试图端口的简单生存模式from here (the first one in introduction)形式PyMC 2至3 PyMC但是,我没有找到“发现”任何同等装饰和我试图写一个新的分发失败。有人可以提供一个例子,这是如何在PyMC 3中完成的?生存分析PyMC 3
我试图端口的简单生存模式from here (the first one in introduction)形式PyMC 2至3 PyMC但是,我没有找到“发现”任何同等装饰和我试图写一个新的分发失败。有人可以提供一个例子,这是如何在PyMC 3中完成的?生存分析PyMC 3
这是一个棘手的端口,需要三个新概念:
theano
张量DensityDist
dict
作为observed
此代码提供了与PyMC2版本您链接到上面的等效模型:
import pymc3 as pm
from pymc.examples import melanoma_data as data
import theano.tensor as t
times = data.t # not to be confused with the theano tensor t!
failure = (data.censored==0).astype(int)
with pm.Model() as model:
beta0 = pm.Normal('beta0', mu=0.0, tau=0.0001)
beta1 = pm.Normal('beta1', mu=0.0, tau=0.0001)
lam = t.exp(beta0 + beta1*data.treat)
def survival_like(failure, value):
return t.sum(failure * t.log(lam) - lam * value)
survive = pm.DensityDist('survive', survival_like,
observed={'failure': failure, 'value': times})
with model:
start = pm.find_MAP()
step = pm.NUTS(scaling=start)
trace = pm.sample(10000, step=step, start=start)
pm.traceplot(trace);
输出如下:
当传递'观察= {...}',如何将参数传递给'survival_like'?参数是否必须按字母顺序排列?谢谢! –
我不相信它很重要。但你可以做一个简单的测试来确认。 – inversion
谢谢!我能够潜入PyMC代码库看到'logp'调用与'** data',所以从字典中的值将被传递到正确的说法,不论顺序。 https://github.com/pymc-devs/pymc3/blob/master/pymc3/model.py#L535 –