Python Pandas差异的差异

Python Pandas差异的差异,第1张

概述我正在尝试使用Python和Pandas执行Difference in Differences(使用面板数据和固定效果)分析.我没有经济学背景,我只是想过滤数据并运行我被告知的方法.但是,据我所知,我明白基本的diff-in-diffs模型如下所示:即,我正在处理一个多变量模型.下面是R中的一个简单示例:https://thetarzan.wordpress

我正在尝试使用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_150   P.S. 015 ROBERTO CLEMENTE   12.0    284 22  279 32  2831   P.S. 019 ASHER LEVY 18.0    296 51  301 55  3082   P.S. 020 ANNA SILVER    9.0 294 9   290 10  2933   P.S. 034 FRANKliN D. ROOSEVELT  3.0 294 4   292 1   2964   P.S. 064 ROBERT SIMON   3.0 287 15  288 17  2915   P.S. 110 FLORENCE NIGHTINgalE   0.0 313 3   306 4   3086   P.S. 134 HENRIETTA SZolD    4.0 290 12  292 17  2887   P.S. 137 JOHN L. BERNSTEIN  4.0 276 12  273 17  2748   P.S. 140 NATHAN STRAUS  13.0    282 37  284 59  2849   P.S. 142 AMAliA CASTRO  7.0 290 15  285 25  28410  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.最佳答案似乎你需要的不是差异(DD)回归的差异.当您可以区分对照组和治疗组时,DD回归是相关的.一个标准的简化例子是对医学的评估.你把一群病人分成两组.其中一半没有得到任何结果:他们是对照组.另一半给予药物:他们是治疗组.从本质上讲,DD回归将捕获这样一个事实,即药物的实际效果不能直接衡量给予药物的人数是多少健康.直觉上,你想知道这些人是否比那些没有服用任何药物的人做得更好.这个结果可以通过添加另一个类别来改进:一个安慰剂,即给予看起来像药物但实际上不是……的东西的人,但这又是一个明确定义的组.最后但并非最不重要的是,要使DD回归真正合适,您需要确保组不是异构的,这可能会导致结果偏差.如果治疗组仅包括年轻且超级健康的人(因此一般更容易愈合),而对照组是一群老酗酒者,那么你的药检的情况就会很糟糕……

在你的情况下,如果我没有弄错的话,每个人都会在某种程度上受到“待遇”……所以你更接近一个标准的回归框架,在那里测量X对Y的影响(例如工资的智商).我知道你想衡量许可证数量对分数的影响(或者是另一种方式?-_-),你有经典的内生性来处理,即如果彼得比保罗更熟练,他会通常获得更多许可和更高的分数.所以你真正想要使用的是这样一个事实:随着时间的推移,相同的技能水平,彼得(分别是保罗)将被“给予”不同级别的许可证多年……而且你真的会衡量许可证的影响力得分……

我可能不会猜测,但我想坚持这样一个事实,即如果你没有付出足够的努力来理解/解释数据中发生了什么,有很多方法可以获得有偏见的,因此毫无意义的结果.关于技术细节,您的估计只有年固定效应(可能没有估计,但通过贬值考虑,因此未在输出中返回),因此您要做的是添加entity_effects = True.如果你想更进一步……我担心到目前为止,任何Python软件包中都没有很好地涵盖面板数据回归,(如果是计量经济学的参考,则包括statsmodels),所以如果你不愿意投资……我宁可建议使用R或Stata.同时,如果你需要一个固定效应回归,你也可以使用statsmodels(如果需要也允许聚类标准错误……):

import statsmodels.formula.API as smfdf = s.reset_index(drop = False)reg = smf.ols('y ~ x + C(date) + C(ID)',data = df).fit()print(reg.summary())# clustering standard errors at indivIDual levelreg_cl = smf.ols(formula='y ~ x + C(date) + C(ID)',data=df).fit(cov_type='cluster',cov_kwds={'groups': df['ID']})print(reg_cl.summary())# output only coeff and standard error of xprint(u'{:.3f} ({:.3f})'.format(reg.params.ix['x'],reg.bse.ix['x']))print(u'{:.3f} ({:.3f})'.format(reg_cl.params.ix['x'],reg_cl.bse.ix['x']))

关于计量经济学,您可能会获得更多/更好的Cross ValIDated答案. 总结

以上是内存溢出为你收集整理的Python Pandas差异的差异全部内容,希望文章能够帮你解决Python Pandas差异的差异所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存