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
相关产品推荐
相关产品推荐

