使用 Python 计算 DID 及其对应P值
1. DID(Differences-in-Differences)定义
双重差分法,其主要被用于社会学中的政策效果评估。这种方法需要两个「差异」数据。一个是干预前后的「差异」,这个是自身实验前后的差异。另外一个是干预组与对照组的「差异」。DID利用这两个「差异」的差异来推算干预的效果。因此,顾名思义叫做双重差分法。
其原理是基于一个反事实的框架来评估政策发生和不发生这两种情况下被观测因素y的变化。如果一个外生的政策冲击将样本分为两组:受政策干预的Treat组和未受政策干预的Control组(在政策冲击前,Treat组和Control组的y没有显著差异)。那么,可以将Control组在政策发生前后y的变化看作Treat组未受政策冲击时的状况(反事实的结果)。通过比较Treat组y的变化(D1)以及Control组y的变化(D2),就可以得到政策冲击的实际效果(DD=D1-D2)。
注意:只有在满足“政策冲击前Treat组和Control组的y
没有显著差异”(即平行性假定)的条件下,得到的双重差分估计量才是无偏的。
如下图所示:
干预组实验前为A1,实验后为A2。对照组实验前为B1,实验后为B2。对于干预组实验前后差异为A2-A1,对于对照组实验后为B2-B1。两者之差(A2-A1)-(B2-B1)即为DID结果,因果效应/处理效应。如下图处理效应所代表的部分。
2. DID模型形式
为分组虚拟变量(处理组=1,控制组=0); 为分期虚拟变量(政策实施后=1,政策实施前=0);交互项 表示处理组在政策实施后的效应,其系数即为双重差分模型重点考察的处理效应。
3. OLS多项式拟合
根据DID公式,我们可以通过使用多项式拟合的方法来求得DID及其P值。以下为Pyhton方法:使用statsmodels库中ols方法,需要根据上述公式准备数据,t代表时间(干预前=0,干预后=1)、g代表分组(干预组=1,对照组=0)、还有一个是交叉项tg(计算其t*g即可)。
代码如下:
import statsmodels.formula.api as smf
import pandas as pd
v1 =[0.367730,0.377147,0.352539,0.341864,0.29276,0.393443,0.374697,0.346989,0.385783,0.307801]
t1 = [0,0,0,0,1,0,0,0,0,1]
g1 =[1,1,1,1,1,0,0,0,0,0]
tg1 = [0,0,0,0,1,0,0,0,0,0]
aa = pd.DataFrame({'t1':t1,'g1':g1,'tg1':tg1,'v1':v1})
X = aa[['t1', 'g1','tg1']]
y = aa['v1']
est = smf.ols(formula='v1 ~ t1 + g1 + tg1', data=aa).fit()
y_pred = est.predict(X)
aa['v1_pred'] = y_pred
print(aa)
print(est.summary())
print(est.params)
准备数据格式如下:
OLS结果Summary如下:
交叉项的系数就是DID结果,处理效应。P>| t |为其P值,小于0.05表示差异显著。
参考资料:
1. 双重差分法(DID)入门必看 - 知乎
2. 什么是双重差分模型(:difference-in-differences model)? - 知乎
3. Python 普通最小二乘法(OLS)进行多项式拟合_公众号:SQLServer-CSDN博客
使用 Python 计算 DID 及其对应P值相关推荐
- python 计算时间、日期差值类
环境:win10+python3x V:1.0 简单实现了一下功能本地测试可用,记录下次接着二次开发用 import datetime import re class TimeDifferenceC( ...
- python计算日期间的差值,python 计算时间、日期差值类
环境:win10+python3x V:1.0 简单实现了一下功能本地测试可用,记录下次接着二次开发用 import datetime import re class TimeDifferenceC( ...
- Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例
Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例 目录
- python计算特征的统计值并文本输出
python计算特征的统计值并文本输出 # 输出统计分位数 df.describe(percentiles=[0.05, 0.25, 0.5, 0.75, 0.95]) featname:A => ...
- python计算文件md5值_用python 正确计算大文件md5 值
python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...
- python代码大全p-基于python实现计算两组数据P值
我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码 # TTest.py # -*- coding: utf-8 -*- ''' # ...
- python 曲线分析_大数据分析之Python计算KS值并绘制KS曲线
本篇教程探讨了大数据分析之Python计算KS值并绘制KS曲线,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. python实现KS曲线,相关使用方法请参考上篇博客-R语言实现K ...
- python中计算如何实现_基于python如何实现计算两组数据P值
我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...
- python计算相关性显著性p值_基于python实现计算两组数据P值
我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...
最新文章
- python3 time
- oracle数据库的医院信息系统数据库升级方案,医院信息系统数据库从Oracle8i到10gR2升级的实现...
- HA2795Billboard 可用线段树
- 【Java】jdk 1.8 新特性——Lambda表达式
- 华科05-03年计算机考研复试机试
- 高效大规模图像搜索开源实现
- weblogic 12C集群环境下的session复制
- [Web 前端] CSS篇之 4. position 和 display 的取值和各自的意思和用法
- ref out的用法
- eclipse class 中无法打断点
- php rsa加密乱码_PHP RSA密文过长加密解密 越过1024的解决代码
- python生成词云图、特殊图形_Python模块---Wordcloud生成词云图
- Word serach(Medium)
- HTML5+CSS+DIV 新海诚电影简介
- chrome首页被hao123篡改 解决方法
- 利用数据泵导入导出dmp
- 浅淡深度学习的发机机——张量计算
- fiddler手机抓包抖音无网问题
- PS中的cs3版本也有调整边缘的功能
- line-height1.5和line-height:150%的区别