【发布时间】:2016-09-08 17:39:23
【问题描述】:
我正在尝试使用 Python 和 Pandas 执行Difference in Differences(带有面板数据和固定效果)分析。我没有经济学背景,我只是想过滤数据并运行我被告知的方法。但是,据我所知,我了解到基本的 diff-in-diffs 模型如下所示:
也就是说,我正在处理一个多变量模型。
这里遵循 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 中使用固定效果和面板数据的方法:
Fixed effect in Pandas or Statsmodels
我执行了一些转换以获得多索引数据:
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)
结果如下:
(一位经济学家)告诉我,这似乎没有固定效应。
--编辑--
我要验证的是在给定时间的情况下,许可证数量对分数的影响。许可证的数量是治疗,是强化治疗。
可以在此处找到代码示例:https://www.dropbox.com/sh/ped312ur604357r/AACQGloHDAy8I2C6HITFzjqza?dl=0。
【问题讨论】:
-
我没有仔细看你在做什么,但是使用公式界面你可以让 patsy 完成创建虚拟变量和交互效果的所有工作。
-
您不需要正式“声明”面板数据来执行差异回归的差异(从技术上讲,它是基本的 OLS 回归),pandas 数据框就可以了。关于 R 风格的公式,您只需阅读以下内容:statsmodels.sourceforge.net/devel/example_formulas.html
-
我知道我必须使用熊猫才能使用固定面板,@etna:stackoverflow.com/questions/29065097/pandas-with-fixed-effects
-
如果您解释了您的研究问题和数据,会更容易提供帮助。差异中的差异旨在调查“治疗”的结果:您要调查的治疗是什么?您想在哪个变量上衡量治疗的影响?
-
你是对的,@etna。我现在试着解释。谢谢。
标签: python pandas regression least-squares panel-data