Логистическая регрессия в 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))