Возникли проблемы с пониманием пакета pymc3 - PullRequest
0 голосов
/ 06 июня 2019

У меня есть этот пример кода, который я использую в Python с пакетом pymc3

import pymc3
import numpy as np


size = 100

# Predictor variable
X1 = np.random.randn(size)

X2 = np.random.randn(size) * 0.2

X3 = np.random.randn(size) * 2

alpha, sigma = 1, 1
beta = [1, 2.5]

Y = alpha + beta[0]*X1 + beta[1]*X2 + np.random.randn(size)*sigma

basic_model = pymc3.Model()

with basic_model:

    # Priors for unknown model parameters
    alpha = pymc3.Normal('alpha', mu=0, sd=1)
    beta = pymc3.Normal('beta', mu=0, sd=1, shape=3)
    sigma = pymc3.HalfNormal('sigma', sd=1)
    # Expected value of outcome
    mu =  alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3

    Y_obs = pymc3.Normal('Y_obs', mu=mu, sd=sigma, observed = Y)
    trace = pymc3.sample(100,chains = 1,  step = pymc3.NUTS())
    a = trace['alpha']
    b = trace['beta']
    print  (trace['alpha'])
    print (trace['beta'])
print (a[0] + b[0][0]*X1[0] + b[0][1]*X2[0] + b[0][2]*X3[0]) #mu

Я ожидал, что если mu = 0, только бета и альфа константы будут меняться? И я получаю анализ, но результат никогда не равен 0 или даже близко к 0? Например, если альфа отрицательна, другие константы или по крайней мере одна должна быть положительной, поэтому каждое вычисление (мю) должно быть 0 или близко к 0 ?. Если я пытаюсь установить mu = 0, я получаю ошибку SyntaxError: can't assign to literal

...