【问题标题】:glm in python vs Rpython vs R中的glm
【发布时间】:2018-05-13 02:09:09
【问题描述】:

我有一些数据集:泰坦尼克号

在 R 中这样做

glm(Survived ~ Sex, titanic, family = "binomial")

我明白了

(Intercept)     SexMale 
1.124321   -2.477825

R 将 幸存 视为积极的结果。

但是当我在 Python 中做同样的事情时

sm.formula.glm("Survived ~ Sex", family=sm.families.Binomial(), data=titanic).fit()

我得到了负面结果:即 Python 将 未幸存 作为正面结果。

如何调整 Python 的 glm 函数行为,使其返回与 R 相同的结果?

【问题讨论】:

  • 我怀疑 sm.formula.glm 在基础 python 中是否可用。请在问题正文中列出您正在使用的任何模块/包或添加适当的标签。
  • import numpy as np import pandas as pd import statsmodels.api as sm

标签: python r statistics regression statsmodels


【解决方案1】:

您只需将参考组设置为男性或女性(取决于您感兴趣的内容):

使用 R 中的一个小型测试数据集,代码和模型摘要如下所示:

df <- data.frame(c(0,0,1,1,0), c("Male", "Female", "Female", "Male", "Male"))
colnames(df) <- c("Survived", "Sex")

model <- glm(Survived ~ Sex, data=df, family="binomial")
summary(model)

输出:

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.084e-16  1.414e+00   0.000    1.000
SexMale     -6.931e-01  1.871e+00  -0.371    0.711

在 Python/statsmodels 中获得类似的东西:

import pandas as pd
import statsmodels.api as sm

df = pd.DataFrame({"Survived": [0,0,1,1,0],
                   "Sex": ["Male", "Female", "Female", "Male", "Male"]})

model = sm.formula.glm("Survived ~ C(Sex, Treatment(reference='Female'))",
                       family=sm.families.Binomial(), data=df).fit()
print(model.summary())

这将给:

                                                    coef    std err          z      P>|z|      [0.025      0.975]
-----------------------------------------------------------------------------------------------------------------
Intercept                                      5.551e-16      1.414   3.93e-16      1.000      -2.772       2.772
C(Sex, Treatment(reference='Female'))[T.Male]    -0.6931      1.871     -0.371      0.711      -4.360       2.974

注意使用Treatment() 设置参考组。在这种情况下,我已将其设置为 Female 以匹配 R 输出,但对于您的数据集,使用 Male 可能更有意义。无论哪种方式,这只是明确使用哪个组作为参考的问题。

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2021-02-27
    • 2020-09-03
    • 2013-09-30
    • 2014-08-30
    • 2021-06-04
    相关资源
    最近更新 更多