我对使用线性模型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值。
答案 0 :(得分:1)
您好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来识别它。