Überlebensanalyse in PyMC 3
-
21-12-2019 - |
Frage
Ich habe versucht, ein einfaches Überlebensmodell zu portieren von hier (der erste in der Einleitung) von PyMC 2 zu PyMC 3.Allerdings habe ich kein Äquivalent zu „observed“ decorator gefunden und mein Versuch, eine neue Distribution zu schreiben, ist fehlgeschlagen.Könnte jemand ein Beispiel geben, wie das in PyMC 3 gemacht wird?
Lösung
Dies ist eine knifflige Portierung und erfordert drei neue Konzepte:
- Nutzung der
theano
Tensor - Nutzung der
DensityDist
- Vorbei an einem
dict
alsobserved
Dieser Code stellt das äquivalente Modell zur PyMC2-Version bereit, auf die Sie oben verlinkt haben:
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);
Ausgabe wie folgt:
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow