使用Statsmodels模块在泊松模型中使用权重

时间:2015-03-09 21:21:43

标签: python r glm statsmodels poisson

我尝试使用Statsmodels模块将以下代码从R转换为Python:

model <- glm(goals ~ att + def + home - (1), data=df, family=poisson, weights=weight)

我使用pandas得到了一个类似的数据框(名为df),目前在Python中有以下行(版本3.4,如果它有所不同):

model = sm.Poisson.from_formula("goals ~ att + def + home - 1", df).fit()

或者,使用GLM:

smf.glm("goals ~ att + def + home - 1", df, family=sm.families.Poisson()).fit()

但是,我无法让加权条款起作用。数据框中的每条记录都有一个日期,我希望更新近的记录对于拟合模型比对旧记录更有价值。我没有看到它被使用的例子,但是如果它可以在R中完成,它可以在Statsmodels上完成......对吗?

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 有一个解决方法应该导致相同的结果。以对数刻度(np.log(权重))添加权重,作为beta等于1(偏移选项)的解释变量之一。 我可以看到曝光的选项与我上面解释的相同。

答案 1 :(得分:0)

现在GLM Poisson支持

2018-05-01T00:00:00.000Z,但遗憾的是freq_weights

要使用它,请在创建GLM时传递freq_weights:

sm.Poisson

答案 2 :(得分:0)

为泊松回归设置权重有两种解决方案。第一种是在 MarkWPiper 提到的 GLM 函数中使用 freq_weigths。第二种是使用泊松回归并将权重传递给 exposure。如所记录的 here:“Log(exposure) 被添加到系数等于 1 的线性预测中。”这与 Yaron 提到的数学技巧相同,尽管该参数具有不同的原始含义。示例代码如下:

import statsmodels.api as sm
# or: from statsmodels.discrete.discrete_model import Poisson
fitted = sm.Poisson.from_formula("goals ~ att + def + home - 1", data=df, exposure=df['weight']).fit()