首页 > 解决方案 > 具有二项式回归的 Python 和 R 的不同 GLM 结果

问题描述

我有以下带有二项式回归的 R 代码来拟合 x 的 y 和多项式

res = glm(df.mat ~ poly(x, deg=degree), family=binomial(link="logit"))

结果是

R 代码结果

但是,当我在 Python 中使用statsmodels GLM 函数时

import statsmodels.api as sm

def poly(x, d):
    x = np.array(x)
    X = np.transpose(np.vstack((x**k for k in range(d+1))))
    return np.linalg.qr(X)[0][:,1:]

res_m = sm.GLM(np.array(df_mat), poly(x, 7), family = sm.families.Binomial())
result = res_m.fit()

Python 创建的多项式函数等效于 R poly() 函数? 那么结果是

Python 结果

标签: pythonrstatisticsglm

解决方案


根据文档, statsmodelsGLM不会自动包含截距项,而 R 模型会这样做。尝试在传递exogsm.GLM. 文档指出为此目的存在一个便利功能:statsmodels.tools.add_constant.


推荐阅读