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

linearmodels PanelOLS与statsmodels OLS回归结果差异原因咨询

为什么statsmodels OLS与linearmodels PanelOLS回归结果不一致?

你遇到的结果差异核心原因是两个模型的固定效应设定不匹配,具体拆解如下:

1. 模型设定的关键差异

  • statsmodels的OLS回归公式 invest ~ value + capital + C(firm) + C(year) -1 是双向固定效应模型:既包含了个体(firm)固定效应,也包含了时间(year)固定效应,同时-1移除了全局截距。
  • linearmodels的PanelOLS仅指定了entity_effects=True,只加入了个体固定效应,完全没有考虑时间固定效应,这是导致系数和R²差异的核心原因。

2. 估计方法的次要差异

statsmodels的OLS是通过引入虚拟变量(C(firm)、C(year))来估计固定效应,属于虚拟变量法;而linearmodels的PanelOLS默认对个体固定效应采用组内去均值法。但这一差异在固定效应设定一致的情况下,不会影响核心系数的估计结果,只是计算方式和输出的统计量(如R²的计算口径)可能略有不同,但核心系数会一致。

修正代码:让两个模型结果一致

如果要让linearmodels的PanelOLS和statsmodels的OLS结果匹配,需要同时加入个体和时间固定效应,修正后的代码如下:

import statsmodels.formula.api as smf
from linearmodels import PanelOLS
from statsmodels.datasets import grunfeld

data = grunfeld.load_pandas().data

# statsmodels OLS 双向固定效应
ols_formula = 'invest ~ value + capital + C(firm) + C(year) -1'
ols_fit = smf.ols(ols_formula, data).fit()

# linearmodels PanelOLS 双向固定效应
data = data.set_index(['firm','year'])
# 同时加入个体和时间固定效应
panel_fit = PanelOLS(
    data.invest,
    data[['value','capital']],
    entity_effects=True,
    time_effects=True
).fit()

# 查看结果,此时系数和核心统计量会一致
ols_fit.summary()
panel_fit

修正后,两个模型的value和capital系数会基本一致,R²的差异也会消失(或仅因统计量计算口径的细微差异可忽略)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:12:30