我正在进行两次回归,我认为这两次回归会产生相同的结果,我想知道是否有人能解释为什么它们不同.一种是与statmodels OLS一起使用,另一种是与线性模型PanelOLS一起使用.

下面显示了最低的工作示例.系数相似,但绝对不相同(statmodels为0.1167和0.3514,线性模型为0.1101和0.3100).R平方也有很大不同(0.953 vs 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

任何见解都受到赞赏!

推荐答案

要复制相同的Beta,您应该同时使用entity_effecttime_effect to the panel 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

然而,由于2次回归的性质不同,R平方将保持不同.在小组中,您只有2个回归量(价值、资本),公司和年份被设置为固定效应.而在OLS回归中,您有许多回归量,即创建的假人数量(公司和年份)+价值和资本变量.所以这自然会导致更高的R#2

Python相关问答推荐

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

如何根据条件在多指标框架上进行groupby

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

在Pandas 日历中插入一行

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

从webhook中的短代码(而不是电话号码)接收Twilio消息

替换字符串中的多个重叠子字符串

将pandas Dataframe转换为3D numpy矩阵

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

所有列的滚动标准差,忽略NaN

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

Plotly Dash Creating Interactive Graph下拉列表

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

人口全部乱序 - Python—Matplotlib—映射

替换现有列名中的字符,而不创建新列

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

从源代码显示不同的输出(机器学习)(Python)

如何求相邻对序列中元素 Select 的最小代价

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,