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 ?

Était-ce utile?

La solution

Il s'agit d'un port délicat qui nécessite trois nouveaux concepts :

  1. Utilisation du theano tenseur
  2. Utilisation du DensityDist
  3. Passer un dict comme observed

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 :

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top