2016-11-23 4 views
2

Verwendung von PyMC3 zur Durchführung der Bayesschen linearen Regression. Ich habe mein Modell gebaut, und ich möchte das posterior für neue X-Werte mit dem gleichen Modell vorhersagen. Ich habe versucht, den Anweisungen auf der Dokumentationswebsite zu folgen: https://pymc-devs.github.io/pymc3/notebooks/posterior_predictive.html (siehe Vorhersage). Dazu müssen Sie Ihre X-Werte vor der Analyse zu einer gemeinsam genutzten Variablen machen und dann die Werte nach dem Modellaufbau ändern und run_ppc() ausführen. Ich habe als Beispiel 200 schnelle Iterationen durchgeführt (ich würde viel mehr für die eigentliche Analyse laufen).Prädiktion posterior für neue Daten in der Bayesschen linearen Regression mit PyMC3

X1_shared = theano.shared(final_df['poll_diff'].values) 
Y1 = final_df['rd_diff'].values 

basic_model = pm.Model() 
with basic_model: 

    # Priors for unknown model parameters 
    sigma = HalfCauchy('sigma', beta=10, testval=1.) 
    intercept = Normal('Intercept', 0, sd=20) 
    x_coeff = Normal('x', 0, sd=20) 

    # Define likelihood 
    likelihood = Normal('y', mu=intercept + x_coeff * X1_shared, 
         sd=sigma, observed= Y1) 

    #start = find_MAP() 
    start = find_MAP() # Find starting value by optimization 
    step = NUTS(scaling=start) # Instantiate MCMC sampling algorithm 
    trace = sample(200, step, start=start) 
pm.traceplot(trace) 
plt.show() 

enter image description here

sns.lmplot(x="poll_diff", y="rd_diff", data=final_df, size=10) 
x = np.array(range(-1, 2)) 
pm.glm.plot_posterior_predictive(trace, samples=100, eval=x) 
plt.show() 

enter image description here

X1_shared.set_value(ana_2016_df['poll_diff'].values) 
ppc = pm.sample_ppc(trace, model=model, samples=100) 

Aber ich erhalte den folgenden Fehler:

AttributeError       Traceback (most recent call last) 
<ipython-input-73-9c1eb48d987f> in <module>() 
----> 1 ppc = pm.sample_ppc(trace, model=model, samples=100) 

C:\Users\W\Anaconda3\lib\site-packages\pymc3\sampling.py in sample_ppc(trace, samples, model, vars, size, random_seed) 
    349 
    350  if vars is None: 
--> 351   vars = model.observed_RVs 
    352 
    353  seed(random_seed) 

AttributeError: module 'pymc3.model' has no attribute 'observed_RVs' 

Bemerkenswert ist, wenn ich die patsy Notation versio verwenden n, ohne die Variablen zu ändern, taucht dieser Fehler nicht auf, aber ich weiß nicht, wie das Format patsy eine gemeinsame Variable annehmen würde. Also würde eine Lösung entweder meine Fehlermeldung adressieren oder zeigen, wie man eine gemeinsam genutzte Variable in die patsy Version des Modells einführt. Vielen Dank!

+1

Ich kann Ihren Fehler nicht reproduzieren. Ich bemerke, dass Ihr Modellname 'basic_model' ist, aber dann verwenden Sie' ppc = pm.sample_ppc (trace, model = model, samples = 100) '. Mischen Sie nicht nur Variablen? (wahrscheinlich, weil Sie mit einem Jupyter-Notebook arbeiten). – aloctavodia

+0

Wow, das hat mein Problem gelöst. Danke, dass du dir die Zeit genommen hast, es anzuschauen, manchmal hilft es, noch einen Blick zu haben! –

Antwort

0

Wie aloctavodia darauf hinwies, war dies ein einfacher Fehler beim Setzen von Variablen. In ppc = pm.sample_ppc(trace, model=model, samples=100), model sollte model = basic_model sein

Verwandte Themen