1

我对使用线性模型 PanelOLS 的 MultiIndex 的要求有点困惑。我正在尝试创建一个 y = pid(i) + rid(j) + e(ij) 形式的模型,其中 e 是错误项。我的数据基本上看起来像这样: Dataframe image

在这种情况下,我基本上想得到 6 个系数:p1,p2,p3,r1,r2,r3

设置:

import pandas as pd
df = pd.DataFrame()
df['pid'] = [1,1,1,2,2,2,3,3,3]
df['rid'] = [1,2,3,1,2,3,1,2,3]
df['y'] = [100,102,101,98,96,101,101,100,103]

尝试使用这个:

from linearmodels.panel import PanelOLS
mod = PanelOLS(df.y, df[['pid','rid']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)

这给出了一个错误,说我需要一个 2 级 MultiIndex。我不确定这应该包括什么,所以非常感谢帮助!

我已经尝试通过交叉制表符将数组更改为正常线性回归的方法,使其具有 6 个字段并在值中包含 1 和 0,但这对于我的实际数据集来说已经失效,因为它有大约 5000 个 p 值和 1000 个r 值。

4

1 回答 1

2

嗨,Daniel,您只需在代码中添加以下行来创建适当的多索引:

import pandas as pd
df = pd.DataFrame()
df['pid'] = [1,1,1,2,2,2,3,3,3]
df['rid'] = [1,2,3,1,2,3,1,2,3]
df['y'] = [100,102,101,98,96,101,101,100,103]

df['individual'] = ['a','a','a','b','b','b','c','c','c']
df['time'] = [10,11,12,10,11,12,10,11,12]
df = df.set_index(['individual','time'])


from linearmodels.panel import PanelOLS
mod = PanelOLS(df.y, df[['pid','rid']], entity_effects=False)
res = mod.fit(cov_type='clustered', cluster_entity=True)
print(res.params)

pid    22.756410
rid    23.589744
Name: parameter, dtype: float64

这是因为面板的变量具有多索引 X_it 来识别它。

于 2018-04-16T21:22:04.673 回答