【问题标题】:Using weightings in a Poisson model using Statsmodels module使用 Statsmodels 模块在泊松模型中使用权重
【发布时间】:2015-05-11 04:45:16
【问题描述】:

我正在尝试使用 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 上完成......对吗?

【问题讨论】:

  • 权重没有在 statsmodels.GLM 和 discrete 版本中实现,泊松。主仓库和即将发布的 0.7 中的 GEE 具有权重,我认为您也可以将它用于单个“组”而不是纵向数据。
  • 那真是太可惜了。我再次将代码反向移植到 R 并从那里运行它。我期待在未来版本的 Statsmodels 中看到它!

标签: python r glm statsmodels poisson


【解决方案1】:

为泊松回归设置权重有两种解决方案。第一种是在 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()

【讨论】:

    【解决方案2】:

    GLM Poisson 现在支持freq_weights,但不幸的是sm.Poisson 不支持

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

    import statsmodels.api as sm
    import statsmodels.formula.api as smf
    
    formula = "goals ~ att + def + home - 1"
    smf.glm(formula, df, family=sm.families.Poisson(), freq_weights=df['freq_weight']).fit()
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多