You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Statsmodels OLS回归结果异常,与R、Sklearn等工具结果不符

关于Statsmodels OLS回归系数与其他工具结果不一致的问题

我使用statsmodels.formula.api运行了如下OLS回归模型:

import statsmodels.formula.api as smf
result = smf.ols('post_sls ~ test + pre_sls', data=df).fit().summary()

变量说明:

  • post_sls、pre_sls:浮点型变量
  • test:取值为0或1的整数型变量

Statsmodels输出结果

coefstd errtP>t
Intercept4.20390.13730.7910.000
test0.10600.1370.7750.439
pre_sls0.09780.000737.3050.000

但上述结果中截距和test的系数存在异常,我用R的lm、Sklearn的线性回归以及手动计算得到的结果均与Statsmodels不同。


R代码及输出

model <- lm(post_sls ~ test + pre_sls, data = df)
result <- summary(model)

输出结果:

coefstd errtP>t
Intercept4.12830.13730.2370.000
test0.18190.1371.3290.184
pre_sls0.09780.000737.3060.000

Sklearn代码及输出

from sklearn.linear_model import LinearRegression
X = df[['test', 'pre_sls']]
y = df['post_sls']
model = LinearRegression().fit(X, y)
print(f'Intercept: {model.intercept_}')
print(f'Coefficients: {model.coef_}')
print(f'R^2: {model.score(X, y)}')

输出结果:

Intercept: 4.128324040176458
Coefficients: [0.18193744 0.0978311 ]
R^2: 0.06522976694251192

手动计算代码及输出

import patsy
import numpy as np
formula = 'post_sls ~ test + pre_sls'
y, X = patsy.dmatrices(formula, df)
beta = np.linalg.inv(X.T @ X) @ (X.T @ y)
print(beta)

输出结果:

[[4.12832404]
 [0.18193744]
 [0.0978311 ]]

可以看到,除Statsmodels外,其他方法得到的系数完全一致。有意思的是,所有模型中截距系数与test系数的总和相同,但Statsmodels高估了截距,低估了test系数。请问问题出在哪里?

内容的提问来源于stack exchange,提问作者Alona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:43:11