我正在尝试使用Python和Pandas执行面板数据和固定效应的差异性分析。我没有经济学背景,只是试图过滤数据并运行我被告知的方法。然而,据我所了解,基本的差异性模型如下:
我正在处理一个多变量模型。
这里是R语言中的一个简单示例:
https://thetarzan.wordpress.com/2011/06/20/differences-in-differences-estimation-in-r-and-stata/
正如所见,回归分析的输入包括一个因变量和三组观测数据。我的输入数据如下:
Name Permits_13 Score_13 Permits_14 Score_14 Permits_15 Score_15
0 P.S. 015 ROBERTO CLEMENTE 12.0 284 22 279 32 283
1 P.S. 019 ASHER LEVY 18.0 296 51 301 55 308
2 P.S. 020 ANNA SILVER 9.0 294 9 290 10 293
3 P.S. 034 FRANKLIN D. ROOSEVELT 3.0 294 4 292 1 296
4 P.S. 064 ROBERT SIMON 3.0 287 15 288 17 291
5 P.S. 110 FLORENCE NIGHTINGALE 0.0 313 3 306 4 308
6 P.S. 134 HENRIETTA SZOLD 4.0 290 12 292 17 288
7 P.S. 137 JOHN L. BERNSTEIN 4.0 276 12 273 17 274
8 P.S. 140 NATHAN STRAUS 13.0 282 37 284 59 284
9 P.S. 142 AMALIA CASTRO 7.0 290 15 285 25 284
10 P.S. 184M SHUANG WEN 5.0 327 12 327 9 327
通过一些研究,我发现以下是使用Pandas处理固定效应和面板数据的方法:
我进行了一些转换,以获取多级索引数据:
rng = pandas.date_range(start=pandas.datetime(2013, 1, 1), periods=3, freq='A')
index = pandas.MultiIndex.from_product([rng, df['Name']], names=['date', 'id'])
d1 = numpy.array(df.ix[:, ['Permits_13', 'Score_13']])
d2 = numpy.array(df.ix[:, ['Permits_14', 'Score_14']])
d3 = numpy.array(df.ix[:, ['Permits_15', 'Score_15']])
data = numpy.concatenate((d1, d2, d3), axis=0)
s = pandas.DataFrame(data, index=index)
s = s.astype('float')
然而,我不知道如何将所有这些变量传递给模型,就像在R中一样:
reg1 = lm(work ~ post93 + anykids + p93kids.interaction, data = etc)
这里的13、14、15代表2013年、2014年、2015年的数据,我认为应该用来创建一个面板。 我这样调用模型:
reg = PanelOLS(y=s['y'],x=s[['x']],time_effects=True)
这是结果:
I was told(由一位经济学家告知)这似乎没有使用固定效应。--编辑--我想要验证的是许可数量对得分的影响,考虑到时间因素。许可证数量是处理变量,是一种密集型处理。代码示例可以在此处找到:https://www.dropbox.com/sh/ped312ur604357r/AACQGloHDAy8I2C6HITFzjqza?dl=0。