有没有办法从 Python PanelOLS 模型中得出公司固定效应的截距?
Is there a way to derive the intercept of the firm fixed effect from the Python PanelOLS model?
我正在使用 Python statsmodel 包估计面板数据的固定效应。
首先,分析中使用的数据包括随着时间的推移从几家公司观察到的 X 和 Y。
以下是实际数据中的一些示例,但最初,有大约 5,000 家公司一年数据的平衡面板。
| date | firm | X1 | X2 | X3 | Y |
|:---------- |:----:|:--:|:--:|:--:|--:|
| 2021-01-01 | A | 1 | 4 | 1 | 10|
| 2021-01-02 | A | 2 | 7 | 0 | 21|
| 2021-01-03 | A | 4 | 3 | 1 | 12|
| 2021-01-01 | B | 2 | 1 | 0 | 4 |
| 2021-01-02 | B | 3 | 7 | 1 | 9 |
| 2021-01-03 | B | 7 | 1 | 1 | 4 |
用下面的代码分析控制公司效应的固定效应模型时,结果推导的很好,没有任何问题。
mod = PanelOLS.from_formula('Y ~ X1 + X2 + X3 + EntityEffects',
data=df.set_index(['firm', 'date']))
result = mod.fit(cov_type='clustered', cluster_entity=True)
result.summary
[输出]
但是问题是截取项的效果并没有打印在结果值上,所以想办法解决这个问题
是否有强制输出截距项的选项?
从git看不是很清楚,但看起来它存储在result.estimated_effects
下。您还应该提到它来自 linearmodels
,而不是 statsmodels
。
from linearmodels import PanelOLS
import pandas as pd
df = pd.DataFrame({'date':['2021-01-01','2021-01-02','2021-01-03',
'2021-01-01','2021-01-02','2021-01-03'],
'firm':['A','A','A','B','B','B'],
'X1':[1,2,4,2,3,7],'X2':[4,7,3,1,7,1],
'X3':[1,0,1,0,1,1],'Y':[10,21,12,4,9,4]})
df['date'] = pd.to_datetime(df['date'])
mod = PanelOLS.from_formula('Y ~ X1 + X2 + X3 + EntityEffects',
data=df.set_index(['firm', 'date']))
result = mod.fit(cov_type='clustered', cluster_entity=True)
result.estimated_effects
estimated_effects
firm date
A 2021-01-01 8.179545
2021-01-02 8.179545
2021-01-03 8.179545
B 2021-01-01 0.258438
2021-01-02 0.258438
2021-01-03 0.258438
我正在使用 Python statsmodel 包估计面板数据的固定效应。
首先,分析中使用的数据包括随着时间的推移从几家公司观察到的 X 和 Y。 以下是实际数据中的一些示例,但最初,有大约 5,000 家公司一年数据的平衡面板。
| date | firm | X1 | X2 | X3 | Y |
|:---------- |:----:|:--:|:--:|:--:|--:|
| 2021-01-01 | A | 1 | 4 | 1 | 10|
| 2021-01-02 | A | 2 | 7 | 0 | 21|
| 2021-01-03 | A | 4 | 3 | 1 | 12|
| 2021-01-01 | B | 2 | 1 | 0 | 4 |
| 2021-01-02 | B | 3 | 7 | 1 | 9 |
| 2021-01-03 | B | 7 | 1 | 1 | 4 |
用下面的代码分析控制公司效应的固定效应模型时,结果推导的很好,没有任何问题。
mod = PanelOLS.from_formula('Y ~ X1 + X2 + X3 + EntityEffects',
data=df.set_index(['firm', 'date']))
result = mod.fit(cov_type='clustered', cluster_entity=True)
result.summary
[输出]
但是问题是截取项的效果并没有打印在结果值上,所以想办法解决这个问题
是否有强制输出截距项的选项?
从git看不是很清楚,但看起来它存储在result.estimated_effects
下。您还应该提到它来自 linearmodels
,而不是 statsmodels
。
from linearmodels import PanelOLS
import pandas as pd
df = pd.DataFrame({'date':['2021-01-01','2021-01-02','2021-01-03',
'2021-01-01','2021-01-02','2021-01-03'],
'firm':['A','A','A','B','B','B'],
'X1':[1,2,4,2,3,7],'X2':[4,7,3,1,7,1],
'X3':[1,0,1,0,1,1],'Y':[10,21,12,4,9,4]})
df['date'] = pd.to_datetime(df['date'])
mod = PanelOLS.from_formula('Y ~ X1 + X2 + X3 + EntityEffects',
data=df.set_index(['firm', 'date']))
result = mod.fit(cov_type='clustered', cluster_entity=True)
result.estimated_effects
estimated_effects
firm date
A 2021-01-01 8.179545
2021-01-02 8.179545
2021-01-03 8.179545
B 2021-01-01 0.258438
2021-01-02 0.258438
2021-01-03 0.258438