楼主: 安徽之
2001 9

[经济学] 反向DID的stata代码 [推广有奖]

  • 1关注
  • 0粉丝

本科生

66%

还不是VIP/贵宾

-

威望
0
论坛币
2518 个
通用积分
3.6957
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
198 点
帖子
11
精华
0
在线时间
222 小时
注册时间
2020-5-3
最后登录
2026-2-2

楼主
安徽之 发表于 2023-4-22 14:47:35 来自手机 |AI写论文
50论坛币
反向DID的代码,包括政策效应、平行趋势检验的代码,是怎么写的?求各位大佬帮忙解答。

关键词:Stata tata DID

沙发
安徽之 发表于 2023-4-22 14:54:17 来自手机
反向DID(Difference in differences in reverse),估计政策效应,是将一直受到政策处理的个体设置为对照组(treat=0),将一开始不受政策影响、后来受政策影响的个体设置为处理组(treat=1);将处理组受到政策影响前的年份设置为post=1,将处理组受到政策影响后的年份设置为post=0。然后生成treat*post,用reghdfe 命令进行回归吗?反向DID能不能像DID一样,用聚类稳健标准误,控制时间和个体固定效应?

藤椅
安徽之 发表于 2023-4-22 15:04:59 来自手机
反向DID的平行趋势检验,能不能将时间倒转,比如2014-2016的数据,就生成一个新的年份变量,将2014年设置成2016年,将2015年还是设置成2015年,将2016年设置成2014年,之后用正常DID平行趋势检验的命令做?谢谢。

板凳
水业咨询 在职认证  企业认证  发表于 2023-4-22 15:39:34
反向DID(Difference-in-Differences)是一种常用的计量经济学方法,用于评估政策对某个结果变量的影响。反向DID的实现需要考虑政策效应和平行趋势检验两个方面。下面是一个简单的反向DID的代码示例,包括政策效应和平行趋势检验的代码:

```
# 导入所需的包
import pandas as pd
import numpy as np
import statsmodels.api as sm

# 读取数据
data = pd.read_csv('data.csv')

# 创建虚拟变量
data['treatment'] = np.where(data['time'] >= '2019-01-01', 1, 0)
data['post'] = np.where(data['time'] >= '2020-01-01', 1, 0)

# 进行反向DID分析
X = data[['treatment', 'post', 'other_control_variables']]
y = data['outcome_variable']
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()

# 输出政策效应
treatment_effect = model.params['treatment']
print('Treatment effect:', treatment_effect)

# 进行平行趋势检验
data['time'] = pd.to_datetime(data['time'])
data['year'] = data['time'].dt.year
data['month'] = data['time'].dt.month
data['time_trend'] = (data['year'] - 2018) * 12 + data['month']
X_trend = data[['treatment', 'post', 'time_trend', 'other_control_variables']]
X_trend = sm.add_constant(X_trend)
model_trend = sm.OLS(y, X_trend).fit()

# 输出平行趋势检验结果
parallel_trend = model_trend.params['time_trend']
print('Parallel trend:', parallel_trend)
```

上述代码中,首先读取数据并创建虚拟变量,然后使用`statsmodels`包的`OLS`函数进行回归分析。在回归结果中,政策效应的系数即为政策的影响效应。接着,为了进行平行趋势检验,我们创建了一个时间趋势变量,并将其包含在回归模型中。在回归结果中,时间趋势变量的系数即为平行趋势的检验结果。需要注意的是,平行趋势检验的结果应该与实际情况相符,否则可能会导致误判。

报纸
安徽之 发表于 2023-4-23 21:49:35 来自手机
水业咨询 发表于 2023-5-23 16:00
反向DID(Difference-in-Differences)是一种常用的计量经济学方法,用于评估政策对某个结果变量的影响。反 ...
您好,问一下,这个是Python的代码吗?

地板
zhao091071 学生认证  发表于 2023-4-24 23:19:38
反向因果推断(Reverse Causal Inference)是一种统计学方法,用于从观察数据中估计因果效应,尤其是在存在潜在或未观察到的混淆变量(confounding variables)的情况下。DID(Difference in Difference)是其中一种常见的反向因果推断方法,通常用于评估政策或治疗的效果,在此基础上,可以通过引入平行趋势假设来进行分析。本文将介绍如何编写DID和平行趋势的代码。

DID
设有一个二元指示器D,表示一个个体是否接受了政策/治疗,在t时刻之前(即t-1时刻)和之后(即t时刻)分别测量了一个感兴趣的结果变量Y。这里我们假设有一个混淆变量X,它可能对Y产生影响,就是说,X可能同时影响D和Y。然而,在接受政策/治疗的那些个体中,我们预期X的分布不会随着时间发生显著变化。这意味着,如果我们比较接受政策/治疗的个体和不接受政策/治疗的个体在t-1时刻到t时刻之间Y的变化,我们就可以得到政策/治疗对Y的因果效应。

我们可以用以下公式来估计政策/治疗对Y的效应:


(

1
,



1
,


1


0
,

+

0
,


1


=
1
)


(

1
,



1
,


1


0
,

+

0
,


1


=
0
)
E(Y
1,t

−Y
1,t−1

−Y
0,t

+Y
0,t−1

∣D=1)−E(Y
1,t

−Y
1,t−1

−Y
0,t

+Y
0,t−1

∣D=0)

其中,Y1和Y0分别代表接受政策/治疗和不接受政策/治疗的结果变量。这里我们假设政策/治疗只有在t时刻才会影响Y,而不会在之前的任何时刻产生作用。通常情况下,上述公式是无法直接计算的,需要使用统计软件进行计算。

在R语言中,我们可以使用“lm”函数来进行DID分析。具体实现代码如下:

7
zhao091071 学生认证  发表于 2023-4-24 23:19:40
反向因果推断(Reverse Causal Inference)是一种统计学方法,用于从观察数据中估计因果效应,尤其是在存在潜在或未观察到的混淆变量(confounding variables)的情况下。DID(Difference in Difference)是其中一种常见的反向因果推断方法,通常用于评估政策或治疗的效果,在此基础上,可以通过引入平行趋势假设来进行分析。本文将介绍如何编写DID和平行趋势的代码。

DID
设有一个二元指示器D,表示一个个体是否接受了政策/治疗,在t时刻之前(即t-1时刻)和之后(即t时刻)分别测量了一个感兴趣的结果变量Y。这里我们假设有一个混淆变量X,它可能对Y产生影响,就是说,X可能同时影响D和Y。然而,在接受政策/治疗的那些个体中,我们预期X的分布不会随着时间发生显著变化。这意味着,如果我们比较接受政策/治疗的个体和不接受政策/治疗的个体在t-1时刻到t时刻之间Y的变化,我们就可以得到政策/治疗对Y的因果效应。

我们可以用以下公式来估计政策/治疗对Y的效应:


(

1
,



1
,


1


0
,

+

0
,


1


=
1
)


(

1
,



1
,


1


0
,

+

0
,


1


=
0
)
E(Y
1,t

−Y
1,t−1

−Y
0,t

+Y
0,t−1

∣D=1)−E(Y
1,t

−Y
1,t−1

−Y
0,t

+Y
0,t−1

∣D=0)

其中,Y1和Y0分别代表接受政策/治疗和不接受政策/治疗的结果变量。这里我们假设政策/治疗只有在t时刻才会影响Y,而不会在之前的任何时刻产生作用。通常情况下,上述公式是无法直接计算的,需要使用统计软件进行计算。

在R语言中,我们可以使用“lm”函数来进行DID分析。具体实现代码如下:

8
zhao091071 学生认证  发表于 2023-4-24 23:20:23
安徽之 发表于 2023-5-24 22:10
您好,问一下,这个是Python的代码吗?
这个是R代码

9
escaflowne1985 在职认证  发表于 2023-4-25 12:46:50
感谢分享~~~~~~么么哒

10
帕瓦娜 学生认证  发表于 2023-5-29 10:18:45
STATA代码
政策效应:
gen dudt=du*dt
xi:reghdfe Y i.dudt var1 var2 var3, absorb(year group) cluster(group)
//或者下面这样做也可以//
xtset group year
xtreg Y dudt var1 var2 var3 i.year, fe r

平行趋势:
xtreg Y pre* current post* X1 X2 i.year, fe vce(cluster group)
ssc install coefplot, replace//下载绘图命令coefplot,然后下面开始绘图,pre和post写到几要根据政策时点的前后年限//
coefplot, baselevels keep(pre* current post*) vertical ///
coeflabels( pre15 = "-15" ///
pre14 = "-14" ///
pre13 = "-13" ///
pre12 = "-12" ///
pre11 = "-11" ///
pre10 = "-10"  ///
pre9 = "-9"  ///
pre8 = "-8"  ///
pre7 = "-7"  ///
pre6 = "-6"  ///
pre5 = "-5"  ///
pre4 = "-4"  ///
pre3 = "-3"  ///
pre2 = "-2"  ///
current = "0"  ///
post1 = "1"  ///
post2 = "2"  ///
post3 = "3"  ///
post4 = "4"  ///
post5 = "5"  ///
post6 = "6"  ///
post7 = "7"  ///
post8 = "8"  ///
post9 = "9"  ///
post10 = "10"  ///
post11 = "11"  ///
post12 = "12"  ///
post13 = "13"  ///
post14 = "14"  ///
post15 = "15" ) ///
yline(0,lcolor(edkblue*0.8))  ///
ylabel(-0.06(0.02)0.06)  ///
xline(18, lwidth(vthin) lpattern(dash) lcolor(teal))  ///
ylabel(,labsize(*0.75)) xlabel(,labsize(*0.75))  ///
ytitle("标题", size(small))  ///
xtitle("X轴标题", size(small))  ///
addplot(line @b @at)  ///
ciopts(lpattern(dash) recast(rcap) msize(medium))  ///
msymbol(circle_hollow)  ///
scheme(s1mono)

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-8 11:15