2015-09-15 5 views
1

У меня есть модель, описанную в pymc3, используя следующие:Как установить параметры распределения Бернулли в pymc3

from pymc3 import * 
basic_model = Model() 

with basic_model: 
    # Priors for unknown model parameters 
    alpha = Normal('alpha', mu=0, sd=10) 
    beta = Normal('beta', mu=0, sd=10, shape=18) 
    sigma = HalfNormal('sigma', sd=1) 

    # Expected value of outcome 
    mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3 

    # Likelihood (sampling distribution) of observations 
    Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y) 

Однако мои Y s не нормально распределены, но являются бинарными (так, Бернулли, я думаю). Я не могу понять, как изменить формулу Normal Y на Bernoulli, хотя из-за того, что я не могу понять, какие параметры будут в этом случае Y_obs.

ответ

1

То, что вы ищете, это logistic regression. Здесь вы используете логистическую функцию для преобразования вывода вашей линейной модели в вероятность.

В вашем примере это может быть определена следующим образом:

from pymc3 import * 
import theano.tensor as T 
basic_model = Model() 

def logistic(l): 
    return 1/(1 + T.exp(-l)) 

with basic_model: 
    # Priors for unknown model parameters 
    alpha = Normal('alpha', mu=0, sd=10) 
    beta = Normal('beta', mu=0, sd=10, shape=18) 

    # Expected value of outcome 
    mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3 

    # Likelihood (sampling distribution) of observations 
    Y_obs = Bernoulli('Y_obs', p=logistic(mu), observed=Y) 
+0

Спасибо. Это имеет смысл (хотя я знаю о логистической регрессии, но я не мог понять, как моделировать это байесовским способом). Я сейчас предлагаю свои изменения и опубликую здесь, как это происходит. – recluze

+0

Ну, это работает, но я получаю «точные» значения для всех 'бета' со стандартным отклонением '0,00' для всех из них! Я даже не уверен, какой вопрос задавать здесь, чтобы продолжить, но я уверен, что я делаю что-то не так :(... (Моя цель - просто получить некоторые сведения о моих данных - чисто исследовательские) – recluze

+0

Звуки например, у сэмплера возникают трудности с принятием новых точек на выборку. Какой пробоотборник вы используете и как вы устанавливаете отправную точку? [Здесь] (https://github.com/pymc-devs/pymc3/blob/master/pymc3/examples /logistic.py) является примером логистической регрессии с pymc3, которую вы могли бы попробовать. – Kiudee