我将以下面板存储在df
:
状态 | 区 | 年 | 是的 | 持续的 | x1 | x2 | 时间 | |
---|---|---|---|---|---|---|---|---|
0 | 01 | 01001 | 2009 | 12 | 1 | 0.956007 | 639673 | 1 |
1 | 01 | 01001 | 2010 | 20 | 1 | 0.972175 | 639673 | 2 |
2 | 01 | 01001 | 2011 | 22 | 1 | 0.988343 | 639673 | 3 |
3 | 01 | 01002 | 2009 | 0 | 1 | 0 | 33746 | 1 |
4 | 01 | 01002 | 2010 | 1 | 1 | 0.225071 | 33746 | 2 |
5 | 01 | 01002 | 2011 | 5 | 1 | 0.450142 | 33746 | 3 |
6 | 01 | 01003 | 2009 | 0 | 1 | 0 | 45196 | 1 |
7 | 01 | 01003 | 2010 | 5 | 1 | 0.427477 | 45196 | 2 |
8 | 01 | 01003 | 2011 | 9 | 1 | 0.854955 | 45196 | 3 |
y
是每个地区的抗议数量constant
是一列充满的x1
是移动网络提供商覆盖的地区区域的比例x2
是各区的人口数(注意是时间固定的)
这是我尝试过的
# Transform `x2` to match model
df['x2'] = df['x2'].multiply(df['time'], axis=0)
# District fixed effects
df['delta'] = pd.Categorical(df['district'])
# State-time fixed effects
df['eta'] = pd.Categorical(df['state'] + df['year'].astype(str))
# Set indexes
df.set_index(['district','year'])
from linearmodels.panel import PanelOLS
m = PanelOLS(dependent=df['y'], exog=df[['constant','x1','x2','delta','eta']])
ValueError: exog 没有完整的列排名。如果您希望继续进行模型估计而不考虑系数估计的数值精度,您可以设置 rank_check=False。
我究竟做错了什么?