2017-04-26 5 views
1

J'ai mis en place le modèle de coupure binomiale suivant PyMC3:modèle binomial de coupure PyMC3 dépend fortement testVal

with pm.Model() as switchpoint_model: 

    switchpoint = pm.DiscreteUniform('switchpoint', lower=df['covariate'].min(), upper=df['covariate'].max()) 

    # Priors for pre- and post-switch parameters 
    early_rate = pm.Beta('early_rate', 1, 1) 
    late_rate = pm.Beta('late_rate', 1, 1) 

    # Allocate appropriate binomial probabilities to years before and after current 
    p = pm.math.switch(switchpoint >= df['covariate'].values, early_rate, late_rate) 

    p = pm.Deterministic('p', p) 

    y = pm.Binomial('y', p=p, n=df['trials'].values, observed=df['successes'].values) 

Il semble fonctionner très bien, sauf que les centres entièrement sur une valeur pour le point de commutation (999), comme indiqué ci-dessous.

enter image description here

Après analyse, il semble que les résultats obtenus pour ce modèle dépendent fortement de la valeur de départ (en PyMC3, « testVal »). Le ci-dessous montre ce qui se passe quand je mets la testVal = 750.

switchpoint = pm.DiscreteUniform('switchpoint', lower=gp['covariate'].min(), 
upper=gp['covariate'].max(), testval=750) 

enter image description here

-je obtenir des résultats différents de la même avec des valeurs de départ différentes supplémentaires.

Pour le contexte, c'est ce que mon jeu de données ressemble: enter image description here

Mes questions sont les suivantes:

  1. est mon modèle en quelque sorte défini de façon incorrecte?
  2. Si c'est spécifié correctement, comment dois-je interpréter ces résultats? En particulier, comment comparer/sélectionner les résultats générés par différents tests? La seule idée que j'ai eu était d'utiliser WAIC pour évaluer la performance de l'échantillon ...

Répondre

0

Les modèles avec des valeurs discrètes peuvent être problématiques, toutes les bonnes techniques d'échantillonnage utilisant les dérivées ne fonctionnent plus, et elles peut se comporter comme des distributions multi modales. Je ne vois pas vraiment pourquoi cela serait problématique dans ce cas, mais vous pourriez essayer d'utiliser une variable continue pour le point de commutation à la place (cela n'aurait-il pas aussi plus de sens sur le plan conceptuel?).