线性模型PanelOLS和统计模型OLS之间的区别

问题描述 投票:0回答:1

我正在运行两个回归,我认为这会产生相同的结果,我想知道是否有人可以解释为什么它们不同。一种是使用 statsmodels OLS,另一种是使用 Linearmodels PanelOLS。

下面显示了一个最小的工作示例。系数相似,但绝对不一样(statsmodels 中的 0.1167 和 0.3514,线性模型中的 0.1101 和 0.3100)。 R 平方也有很大不同(0.953 与 0.767)。


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

data = grunfeld.load_pandas().data

#   Define formula and run statsmodels OLS regression
ols_formula = 'invest ~ value + capital + C(firm) + C(year) -1'
ols_fit   = smf.ols(ols_formula,data).fit()

#   Set multiindex and run PanelOLS regression
data = data.set_index(['firm','year'])
panel_fit = PanelOLS(data.invest,data[['value','capital']],entity_effects=True).fit()

#   Look at results
ols_fit.summary()
panel_fit

任何见解表示赞赏!

python regression panel statsmodels linearmodels
1个回答
0
投票

要复制相同的 Beta,您应该使用

entity_effect
time_effect
到面板 ols,如下所示:

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

data = grunfeld.load_pandas().data

#   Define formula and run statsmodels OLS regression
ols_formula = 'invest ~ value + capital + C(firm) + C(year) -1'
ols_fit = smf.ols(ols_formula,data).fit()

#   Set multiindex and run PanelOLS regression
data = data.set_index(['firm','year'])
panel_fit = PanelOLS(
    data.invest,
    data[['value','capital']],
    entity_effects=True,
    time_effects=True
).fit()

#   Look at results
print(ols_fit.summary())
print(panel_fit)

这导致:

OLS

value           0.1167
capital         0.3514
R-squared:      0.953

面板OLS

value          0.1167
capital        0.3514
R-squared:     0.7253

但是,由于两个回归的性质不同,R 平方将保持不同。在面板中,您只有 2 个回归量(价值、资本),其中公司和年份设置为固定效应。在 OLS 回归中,您有许多回归量,如创建的虚拟变量数量(公司和年份)+ 价值和资本变量。所以这自然会导致更高的 R^2

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.