PyMC 3中的生存分析

Mar*_*old 6 survival-analysis pymc

我试图将简单的生存模型从这里(介绍中的第一个)从PyMC 2移植到PyMC 3.然而,我没有找到任何等同于"观察"的装饰器,并且我尝试编写新的分发失败了.有人可以提供一个例子,如何在PyMC 3中完成这项工作?

inv*_*ion 5

这是一个棘手的端口,并且需要三个新概念:

  1. theano张量的使用
  2. 使用 DensityDist
  3. 通过dictasobserved

此代码提供与您上面链接到的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);
Run Code Online (Sandbox Code Playgroud)

输出如下:

在此处输入图片说明