【问题标题】:Logistic Regression in PyMCPyMC 中的逻辑回归
【发布时间】:2014-08-04 19:52:40
【问题描述】:

这是一个初学者的问题,但我来自不同的语言,找不到完全正确的例子。我正在尝试在 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”中找到“Salad”、“Sandwich”和“Water”的优势比。在 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 阶段 - 任何指针?

【问题讨论】:

  • 我相信pymc3 支持GLM 模块。你可以找到一个例子here
  • 为什么要定义 tau 和 sigma?据我所知,它们几乎没有被使用。

标签: python-2.7 statistics pymc


【解决方案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))

这里是a notebook that puts this in all together

【讨论】:

  • 我太老了,不能作为家庭作业。相反,这是试图支持从 Python、R 和 SAS 的邪恶组合完全迁移到 Python。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 2013-05-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多