Логистическая регрессия в PyMC

Что-то вроде вопроса для начинающих, но я прихожу с разных языков и не могу найти правильный пример. Я пытаюсь настроить простую логистическую регрессию в PyMC 2. Рассмотрим pandas Фрейм данных "Данные" с разметкой примерно так:

ID, GotSick, Salad, Sandwich, Water
1,0,0,1,0
2,1,1,0,1
3,0,1,0,0
....
100,1,1,0,1

Я пытаюсь найти отношение шансов "Салат", "Сэндвич" и "Вода" на результат "GotSick". В R я бы настроил что-то вроде:

model <- glm(GotSick ~ Salad + Sandwich + Water, data=Data, family="binomial")

Но мне не совсем понятно, как настроить модель в PyMC.

### hyperpriors
tau = mc.Gamma('tau', 1.e-3, 1.e-3, value=10.)
sigma = mc.Lambda('sigma', lambda tau=tau: tau**-.5)

### parameters
# fixed effects
beta0 =  mc.Normal('beta0',  0., 1e-6, value=0.)
betaSalad =  mc.Normal('betaSalad',  0., 1e-6, value=0.) 
betaSandwich =  mc.Normal('betaSandwich',  0., 1e-6, value=0.)
betaWater = mc.Normal('betaWater',  0., 1e-6, value=0.)

# expected parameter
logit_p =  (beta0 + betaSalad*x1 + betaSandwich*x2 + betaWater*x3)

Где я сел на мель - сцена @ mc.observed - какие-нибудь указатели?

1 ответ

Решение

Вы определенно на правильном пути. Я не решаю твою домашнюю задачу? Теперь это предпочтительная идиома import pymc as pm вместо mcтак что, чтобы закончить это с observed декоратор, просто используйте:

import pymc as pm

@pm.observed
def y(logit_p=logit_p, value=df.GotSick):
    return pm.bernoulli_like(df.GotSick, pm.invlogit(logit_p))

Вот тетрадь, которая объединяет все это.

Другие вопросы по тегам