Analyse de survie dans PyMC 3
-
21-12-2019 - |
Question
J'ai essayé de porter un modèle de survie simple d'ici (le premier en introduction) formez PyMC 2 à PyMC 3.Cependant, je n'ai trouvé aucun équivalent au décorateur "observé" et ma tentative d'écrire une nouvelle distribution a échoué.Quelqu'un pourrait-il donner un exemple de la manière dont cela se fait dans PyMC 3 ?
La solution
Il s'agit d'un port délicat qui nécessite trois nouveaux concepts :
- Utilisation du
theano
tenseur - Utilisation du
DensityDist
- Passer un
dict
commeobserved
Ce code fournit le modèle équivalent à la version PyMC2 à laquelle vous avez lié ci-dessus :
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);
Sortie comme suit :
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow