J'ai récemment commencé à apprendre pymc3
après avoir utilisé exclusivement emcee
pour les âges et je rencontre des problèmes conceptuels. Je m'entraîne avec le chapitre 7 de Hogg's Fitting a model to data. Ceci implique un ajustement de mcmc à une ligne droite avec des incertitudes 2d arbitraires. Je l'ai fait assez facilement dans emcee
, mais pymc
me donne quelques problèmes.Régression linéaire multivariée dans pymc3
Il se résume essentiellement à l'utilisation d'une probabilité gaussienne multivariée.
Voici ce que j'ai jusqu'à présent.
from pymc3 import *
import numpy as np
import matplotlib.pyplot as plt
size = 200
true_intercept = 1
true_slope = 2
true_x = np.linspace(0, 1, size)
# y = a + b*x
true_regression_line = true_intercept + true_slope * true_x
# add noise
# here the errors are all the same but the real world they are usually not!
std_y, std_x = 0.1, 0.1
y = true_regression_line + np.random.normal(scale=std_y, size=size)
x = true_x + np.random.normal(scale=std_x, size=size)
y_err = np.ones_like(y) * std_y
x_err = np.ones_like(x) * std_x
data = dict(x=x, y=y)
with Model() as model: # model specifications in PyMC3 are wrapped in a with-statement
# Define priors
intercept = Normal('Intercept', 0, sd=20)
gradient = Normal('gradient', 0, sd=20)
# Define likelihood
likelihood = MvNormal('y', mu=intercept + gradient * x,
tau=1./(np.stack((y_err, x_err))**2.), observed=y)
# start the mcmc!
start = find_MAP() # Find starting value by optimization
step = NUTS(scaling=start) # Instantiate MCMC sampling algorithm
trace = sample(2000, step, start=start, progressbar=False) # draw 2000 posterior samples using NUTS sampling
Cela soulève l'erreur: LinAlgError: Last 2 dimensions of the array must be square
Je suis en train de passer MvNormal
les valeurs mesurées pour x et y (mu
s) et leurs incertitudes de mesure associées (y_err
et x_err
). Mais il semble qu'il n'aime pas l'argument 2d tau
.
Des idées? Cela doit être possible
Merci
Essayez-vous de faire une régression linéaire incluant l'erreur de mesure de '' 'x''' et' '' y''' dans le modèle? – aloctavodia
Oui: 2d incertitudes – Lucidnonsense