DID从经典到前沿方法的保姆级教程, 释放最完整数据和代码!
凡是搞计量经济的,都关注这个号了
邮箱:econometrics666@126.com
所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.
正文
Source:DID_Handbook,https://github.com/IanHo2019/DID_Handbook;欢迎对更好的编码或错误纠正提出意见,作者联系方式:ianho0815@outlook.com。
双重差分,顾名思义,涉及在两个时期对两个群体进行比较。第一个差分是在群体之间进行的,而第二个差分总是在时间之间进行的。在处理时间之后成为接受处理的群体,被称为接受处理的群体。其他单位被称为对照组。双重差分通常侧重于识别和估计接受治疗群体上的平均处理效应(ATT),即测量治疗对那些从未接受治疗转变为接受治疗的人的平均效应。在实证研究中,实施双重差分规范的主导方法是运行双向固定效应(TWFE)回归:
在Stata中,可以使用命令xtreg、areg、reghdfe或xtdidregress轻松运行TWFE回归。需要注意的是,xtdidregress仅适用于Stata 17或更高版本,而reghdfe只能在安装了reghdfe和ftools包之后使用。我喜欢使用reghdfe,因为它具有灵活的选项并且计算速度较快。reghdfe的基本语法如下:
bacondecomp Y D, ddtail
值得注意的是,可以使用graph和g1on选项创建图表(如Arkhangelsky等人,2022中的图1),显示个体权重(散点图)、时间权重(面积图)和结果趋势(线图)。
通常,研究人员对仅估计静态效应并不满意;他们可能还想看到政策的长期效应。例如,一旦Sibal Yang在Canvas上发布了新的问题集,那么在截止日期之前的每一天,问题集对学生幸福感的影响是什么?无论如何,经典的动态双重差分模型允许处理政策效应随时间而变化的情况。下面是动态双重差分模型的一个示例:
其中一位作者,Liyang Sun(麻省理工学院),编写了一个Stata软件包eventstudyinteract,用于实施他们的IW估计方法并构建估计的置信区间。要使用eventstudyinteract命令,还必须安装另一个软件包:avar。基本语法如下:
eventstudyinteract y rel_time_list, absorb(id t) cohort(variable) control_cohort(variable) vce(vcetype)
DID的双重稳健估计值(Doubly Robust Estimator for DID)
双重稳健(doubly robust,DR)。
这两位作者与Fernando Rios-Avila合作编写了一个Stata软件包csdid,用于实施Callaway和Sant'Anna(2021)中提出的DID估计方法。在内部,所有2✖2的DID估计都是使用drdid命令获得的,因此要运行csdid,我们必须安装两个软件包:csdid和drdid。
基本语法如下:
csdid Y covar, ivar(id) time(t) gvar(group)
de Chaisemar和D'Haultfœuille编写了一个Stata软件包did_multiplegt,用于应用他们的估计器。基本语法如下:
did_multiplegt Y G T D
其中Y是结果变量,G是群组变量,T是时间变量,D是处理虚拟变量。该命令有很多选项,这里只介绍几个重要的选项:
如果指定了robust_dynamic选项,则将使用de Chaisemartin和D'Haultfoeuille(2022)中提出的估计值;否则将使用de Chaisemar和D'Haultfœuille(2020)中的估计值
当指定了robust_dynamic时,Stata使用de Chaisemartin和D'Haultfoeuille(2022)中提出的长差分安慰剂(long difference placeboes)。我们可以使用firstdiff_placebo选项使Stata使用de Chaisemar和D'Haultfœuille(2020)中提出的一阶差分安慰剂。通过placebo(#)选项,可以指定要估计的安慰剂估计值的数量。该数量最多可以等于数据中的时间期数。
该命令通过使用自助法来估计标准误。我们可以使用cluster()选项来要求Stata在特定级别上使用块自助法(block bootstrap)。不能直接在cluster()中使用交互项,但可以在运行回归之前使用group()函数生成交互项。
discount(#)选项允许我们对面板中后期估计的处理效应进行折扣。
该命令默认在每个回归之后生成图形。通过graphoptions()选项,我们可以修改图形的外观。
它在计算上高效(只需要估计一个简单的TWFE模型);
插补方法可以轻松地将平行趋势和无预期假设与估计值联系起来。
其中一位作者,Kirill Borusyak(伦敦大学学院),编写了一个Stata软件包did_imputation,用于实施他们的插补方法,以估计动态处理效应并进行事件研究中的前期趋势检验。基本语法如下:
其中,horizons选项告诉Stata我们希望估计多少个前瞻期的处理效应,而pretrends选项告诉Stata要对某些时期进行前期趋势检验。前期趋势系数报告为pre1、pre2等。与前面提到的方法不同,这里的前期趋势系数的数量不会影响处理效应估计后的其他估计(他们始终在平行趋势和无预期假设下计算)。
我将使用的回归命令包括:
xtdidregress,Stata内置命令,用于在面板数据上运行双重差分回归。使用此命令后,我们可以使用estat创建趋势图并进行一些基本检验。
xtreg、areg和reghdfe最初用于运行固定效应模型,但也可以轻松应用于运行双重差分回归。
sdid,用于运行SDID的外部命令。通过method()选项,我们还可以使用它来运行标准双重差分和合成控制模型。
xthdidregress,是Stata 18引入的一种用于估计异质性ATT的命令。请注意,xthdidregress命令允许多种加权方式,我选择使用aipw(增强逆概率加权,也称为“双重稳健”)。尽管Stata 18的文档没有明确说明此命令是由哪位作者提出,但我猜测这个命令的思想源于Callaway和Sant'Anna(2021)。请注意,回归后,estat aggregation允许我们在同一组或时间内汇总ATT,分析指定时间窗口内的动态效应,并创建图表。
下面这些代码经过测试,可以直接在Stata运行,数据附在文后网盘里(网盘里的代码1)。
cd "C:\Users\xiwan\Desktop\DataforDID"
**# Block Treatment: Orzechowski & Walker (2005)
use "OW05_prop99.dta", clear
encode state, gen(state_code)
xtset state_code year
* TWFE DID
xtdidregress (packspercapita) (treated), group(state_code) time(year) vce(cluster state_code)
estat trendplots // visualization
estat ptrends // parallel-trends test
estat granger // anticipation test
*estat grangerplot // time-specific treatment effects
eststo twfe1: qui xtreg packspercapita treated i.year, fe cluster(state_code)
eststo twfe2: qui areg packspercapita treated i.year, absorb(state_code) cluster(state_code)
eststo twfe3: qui reghdfe packspercapita treated, absorb(state_code year) cluster(state_code)
estout twfe*, keep(treated) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adjusted R2") fmt("%9.0fc"3))
* Sythetic DID
eststo syn_did: sdid packspercapita state year treated, vce(placebo) seed(1) ///
graph g1on ///
g1_opt(xtitle("") ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
) ///
g2_opt(ylabel(0(25)150) ytitle("Packs per capita") ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
) ///
graph_export("prop99_did_", .pdf)
ereturn list
matrix list e(omega) // unit-specific weights
matrix list e(lambda) // time-specific weights
estout twfe* syn_did, keep(treated) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adjusted R2") fmt("%9.0fc"3))
* Compare SDID, DID, and SC
foreach m in sdid did sc {
if "`m'"=="did" {
local g_opt = "msize(small)"
}
else {
local g_opt = ""
}
sdid packspercapita state year treated, ///
method(`m') vce(noinference) graph g1on `g_opt' ///
g1_opt(xtitle("") ytitle("") ///
xlabel(, labsize(tiny)) ///
ylabel(-100(25)50, labsize(small)) ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
) ///
g2_opt(title("`m'") xtitle("") ytitle("") ///
xlabel(, labsize(small)) ///
ylabel(0(25)150, labsize(small)) ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
)
graph save g1_1989 "`m'_1.gph", replace
graph save g2_1989 "`m'_2.gph", replace
}
graph combine "sdid_2.gph" "did_2.gph" "$figdir\sc_2.gph" "sdid_1.gph" "did_1.gph" "sc_1.gph", ///
cols(3) xsize(3.5) ysize(2) ///
graphregion(fcolor(white) lcolor(white))
graph export "compare_sdid_did_sc.pdf", replace
*****************************************************
**# Staggered Treatment: Bhalotra et al. (2022)
use "BCGV22_gender_quota.dta", clear
drop if lngdp==.
tab year
isid country year
* Balanced panel: 115 countries, years from 1990 to 2015.
* Treated group: 9 countries.
* Control group: 106 other states.
eststo stagg1: sdid womparl country year quota, vce(bootstrap) seed(3) ///
graph g1on ///
g1_opt(xtitle("") ytitle("") xlabel(, labsize(tiny)) ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
) ///
g2_opt(ytitle("") ///
plotregion(fcolor(white) lcolor(white)) ///
graphregion(fcolor(white) lcolor(white)) ///
)
ereturn list
matrix list e(tau) // adoption-period specific estimate
matrix list e(lambda)
matrix list e(omega)
matrix list e(adoption) // different adoption years
eststo stagg2: sdid womparl country year quota, covariates(lngdp, optimized) vce(bootstrap) seed(3)
eststo stagg3: sdid womparl country year quota, covariates(lngdp, projected) vce(bootstrap) seed(3)
estout stagg*, ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N, nostar labels("Observations") fmt("%9.0fc"))
******************************************************************
**# Staggered Treatment: Serrato & Zidar (2018)
use "SZ18_state_taxes.dta", replace
keep if year >= 1980 & year <= 2010
drop if fips_state == 11 | fips_state == 0 | fips_state > 56
xtset fips_state year
* Balanced panel: 50 states, years from 1980 to 2010.
* Treated group: 15 states.
* Control group: 35 other states.
* Construct dependent variables
gen log_rev_corptax = 100*ln(rev_corptax+1)
gen log_gdp = 100*ln(GDP)
g r_g = 100*rev_corptax/GDP
* Screen out the tax change with a pre-determined threshold
local threshold = 0.5
gen ch_corporate_rate = corporate_rate - L1.corporate_rate
replace ch_corporate_rate = 0 if abs(ch_corporate_rate) <= `threshold'
gen ch_corporate_rate_inc = (ch_corporate_rate > 0 & !missing(ch_corporate_rate))
gen ch_corporate_rate_dec = (ch_corporate_rate < 0 & !missing(ch_corporate_rate))
* Contruct treatment dummies
** Static
gen change_year = year if ch_corporate_rate_dec==1
bysort fips_state: egen tchange_year = min(change_year)
gen treated = (year >= tchange_year)
** Dynamic
gen period = year - tchange_year
gen Dn5 = (period < -4)
forvalues i = 4(-1)1 {
gen Dn`i' = (period == -`i')
}
forvalues i = 0(1)5 {
gen D`i' = (period == `i')
}
gen D6 = (period >= 6 & period != .)
* Static DID
local ylist = "log_rev_corptax log_gdp r_g"
local i = 1
foreach yvar in `ylist' {
quietly{
eststo areg`i': areg `yvar' treated i.fips_state, absorb(year) cluster(fips_state)
eststo hdreg`i': reghdfe `yvar' treated, absorb(fips_state year) cluster(fips_state)
eststo sdid`i': sdid `yvar' fips_state year treated, vce(bootstrap) seed(2018)
local ++i
}
}
estout areg1 hdreg1 sdid1 areg2 hdreg2 sdid2 areg3 hdreg3 sdid3, keep(treated) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adj. R2") fmt("%9.0fc" 3))
* Dynamic DID (sdid cannot do this)
local ylist = "log_rev_corptax log_gdp r_g"
local i = 1
foreach yvar in `ylist' {
quietly{
eststo areg`i': areg `yvar' Dn5-Dn2 D0-D6 i.fips_state, absorb(year) cluster(fips_state)
eststo hdreg`i': reghdfe `yvar' Dn5-Dn2 D0-D6, absorb(fips_state year) cluster(fips_state)
local ++i
}
}
estout areg1 hdreg1 areg2 hdreg2 areg3 hdreg3, keep(D*) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adj. R2") fmt("%9.0fc" 3))
**# Stata 18 new command: xthdidregress
local controls = "FederalIncomeasStateTaxBase sales_wgt throwback FedIncomeTaxDeductible Losscarryforward FranchiseTax"
local ps_var = "FederalIncomeasStateTaxBase sales_wgt throwback FedIncomeTaxDeductible FranchiseTax"
xthdidregress aipw (log_gdp `controls') (treated `ps_var'), group(fips_state) vce(cluster fips_state)
* Visualizing ATT for each cohort
estat atetplot
graph export "SZ18_cohort_ATT.pdf", replace
* Visualizing ATT over cohort
estat aggregation, cohort ///
graph(xlab(, angle(45) labsize(small)) legend(rows(1) position(6)))
graph export "SZ18_cohort_agg_ATT.pdf", replace
* Visualizing ATT over time
estat aggregation, time ///
graph(xlab(, angle(45) labsize(small)) legend(rows(1) position(6)))
graph export "SZ18_time_agg_ATT.pdf", replace
* Visualizing dynamic effects
estat aggregation, dynamic(-5/6) ///
graph( ///
title("Dynamic Effects on Log State GDP", size(medlarge)) ///
xlab(, labsize(small) nogrid) ///
legend(rows(1) position(6)) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
)
graph export "SZ18_dynamic_ATT.pdf", replace
Bacon分解、事件研究图和安慰剂检验
use "http://pped.org/bacon_example.dta", clear
面板数据包含1964年至1996年美国49个州(包括华盛顿特区,但不包括阿拉斯加和夏威夷)的州级信息(特别是无过错离婚开始年份和自杀死亡率)。这些数据最初由Stevenson&Wolfers(2006)用于估计无过错(或单方面)离婚对女性自杀率的影响。
这里,首先做一个无过错离婚改革(一种分散处理)对女性自杀进行静态的双重差分估计:
处理组包括采用单方面离婚法的州,而对照组包括其余州。
所有以下命令的估计系数应相同(但由于不同的算法,标准误差和R平方不同)。
xtdidregress (asmrs pcinc asmrh cases) (post), group(stfips) time(year) vce(cluster stfips)
xtreg asmrs post pcinc asmrh cases i.year, fe vce(cluster stfips)
areg asmrs post pcinc asmrh cases i.year, absorb(stfips) vce(cluster stfips)
reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)
然后,我们可以对TWFE DID模型应用Bacon分解定理。
bacondecomp asmrs post pcinc asmrh cases, ddetail
下面这个Bacon分解结果为新版本bacondecomp得出的。其中,Timing-groups表示不同政策处理时间带来的差异,它占据了总效应的 37.76%,对应的是旧版本bacondecomp中的Earlier T vs. Later C 和Later T vs. Earlier C两部分的权重,Always_v_timing的权重为37.8%,对应的是旧版本bacondecomp中的T vs. Already treated,即新处理组与已处理组的对比差异。Never_v_timing的权重为23.9%,对应的是旧版本bacondecomp中的T vs. Never treated,即处理组对应着从未接受处理过的对照组的差异。而同组内的差异占比为 0.509%,始终处理与从未接受处理组的效应仅占 0.0018%。
要看偏差,主要是看T vs. Already treated或新版本中的Always_v_timing的权重。
它报告数据集中有14个时间组(在不同时间接受处理可以作为彼此的对照组),包括一个从未处理的组和一个始终处理的组。最大的权重分配给始终处理组和时间组之间的比较。
我们还可以使用以下编码(在xtdidregress之后)进行分解。散点图可以在这里找到。
最后,我通过随机选择安慰剂处理时间并重复进行1000次TWFE回归来进行时间安慰剂检验。这项工作是使用Stata内置命令permute完成的。检验结果显示,我上述的估计可能不是来自于一个不可观察的时间趋势。安慰剂检验的图表(由附加命令dpplot创建)可以在这里找到。
完整的编码可以在这里找到。
下面这些代码经过测试,可以直接在Stata运行(网盘里的代码2)。
*** Bacon Decomposition *************************
use "http://pped.org/bacon_example.dta", clear
* We see multiple treatment years.
tab year
tab _nfd // the year of the passage of no-fault divorce law
* Regression of female suicide on no-fault divorce reforms
eststo reg1: quietly reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)
estout reg1, keep(post pcinc asmrh cases _cons) ///
varlabels(_cons "Constant") ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) ///
stats(N r2_a, nostar labels("Observations" "R-Square") fmt("%9.0fc" 3))
bacondecomp asmrs post pcinc asmrh cases, ddetail
graph export "DID_Decomposition_bacondecomp.pdf", replace
xtdidregress (asmrs pcinc asmrh cases) (post), group(stfips) time(year) vce(cluster stfips)
estat bdecomp, graph
graph export "DID_Decomposition_estat.pdf", replace
*** Event Study Plots *****************************************************
gen rel_time = year - _nfd
* The following uses "xtreg".
eventdd asmrs pcinc asmrh cases i.year, ///
timevar(rel_time) method(fe, cluster(stfips)) ///
noline graph_op( ///
xlabel(-20(5)25, nogrid) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///
)
* The following uses "reghdfe".
eventdd asmrs pcinc asmrh cases, ///
timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) ///
noline graph_op( ///
xlabel(-20(5)25, nogrid) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///
)
* Only balanced periods in which all units have data are shown in the plot.
eventdd asmrs pcinc asmrh cases i.year, ///
timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) balanced ///
noline graph_op( ///
xlabel(, nogrid) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///
)
* Only specified periods are shown in the plot; periods beyond the window are accumulated.
eventdd asmrs pcinc asmrh cases i.year, ///
timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) ///
accum leads(5) lags(10) ///
noline graph_op( ///
xlabel(, nogrid) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///
)
*** Placebo Test *****************************************
* Randomly select a placebo treatment time and run TWFE regression for 1000 times
permute post coefficient=_b[post], reps(1000) seed(1) saving("placebo_test.dta", replace): reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)
use "placebo_test.dta", clear
dpplot coefficient, ///
xline(-2.516, lc(red) lp(dash)) xline(0, lc(gs12) lp(solid)) ///
xtitle("Effect estimate") ytitle("Density of distribution") ///
xlabel(-3(1)2 -2.516, nogrid labsize(small)) ///
ylabel(, labsize(small)) caption("")
交错处理的动态 DID
我将使用一个“产品-年”层面的数据集,该数据集是从全球反倾销数据库和中国海关数据合并而来(感谢清华大学中国数据中心)。我将运行的动态DID模型如下:
关于对特定产品(在6位数级别上进行编码)实施反倾销关税的年份的信息存储在变量year_des_duty中。我使用这个变量和年份来构建一系列相对时间虚拟变量:
gen D4 = (period_duty >= 4) & (period_duty != .)
使用双重差分的交互加权估计的(interaction-weighted estimation of DID)编码如下:
双重稳健估计(doubly robust estimation of DID)的编码如下:
}
cs_did命令在Stata结果窗口中可能显示一个非常长的输出表格,因此我在csdid之前加上了quietly命令。此外,在许多应用中,我更关心不同时间点的异质性处理效应,而不是跨不同组的效应(而不是由Callaway&Sant'Anna, 2021定义的组-时间平均处理效应);因此,我使用csdid_estat仅在-3到4期间产生汇总估计结果。现在结果窗口中的输出表格较短。还值得注意的是,我使用wboot选项来估计Wild Bootstrap标准误差,重复10,000次。
de Chaisemartin和D'Haultfoeuille的DID估计的编码如下:
这里使用de Chaisemartin和D'Haultfoeuille(2022)的估计方法,因为我想估计动态效应。值得注意的是,我使用长差分安慰剂进行安慰剂检验;动态效应是使用长差分的双重差分估计值来估计的,因此使用长差分安慰剂是正确。相比之下,一阶差分安慰剂估计值是连续时间段之间的双重差分;如果在这里添加firstdiff_placebo,用于说明动态处理效应的图形将是无意义的(即不可比较的)。
我个人不喜欢did_multiplegt自动生成的图形,而且不幸的是,graphoptions( )选项不如我期望的灵活。因此,我选择撤回并将估计结果存储在矩阵中。然后,可以使用event_plot命令创建图形。创建图形的过程与我在应用Sun&Abraham(2021)的估计值时所做的非常相似。我的四张图形展示如下:
imputation DID估计的编码如下:
可以在这里找到使用插补方法估计的动态效应的四张图形,具体如下。这次,我使用了default_look选项,但不使用together选项,所以前瞻和滞后期显示为两条分别用不同颜色表示的曲线。
下面这些代码经过测试,可以直接在Stata运行(网盘里的代码3)。
提取码: qy2q
关于交叠或多期DID,参看:1.120篇DID双重差分方法的文章合集, 包括代码,程序及解读, 建议收藏!2.诚实双重差分法DID, 面板事件研究法和Bacon分解的经典应用文!3.前沿: 多期或渐进或交叠DID, 如何进行平行趋势检验呢?4.多期DID或渐进DID或交叠DID, 最新Stata执行命令整理如下供大家学习,5.DID前沿: 5种方法估计事件研究的因果效应, 并使用绘制系数和置信区间, 详细代码和数据,6.事件研究法开展政策评估和因果识别, 分享8篇提供数据和代码的文章,7.推荐用渐进(多期)DID和事件研究法开展政策评估的论文及其实现数据和代码!8.机器学习已经与政策评估方法, 例如事件研究法结合起来识别政策因果效应了!9.前沿, 模糊双重差分法FDID方法介绍和示例, 附code和数据!10.双重差分法和事件研究法的区别主要在哪里?11.前沿, 合成双重差分法SDID方法介绍和示例, 附code和数据!12.具有空间溢出效应的双重差分法估计最全综述, 理论和操作尽有!13.最新Sun和Abraham(2021)和TWFE估计多期或交错DID并绘图展示结果!详细解读code!
下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。
5年,计量经济圈近1500篇不重类计量文章,
可直接在公众号菜单栏搜索任何计量相关问题,
Econometrics Circle
数据系列:空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 | 夜间灯光 | 官员方言 | 微观数据 | 内部数据计量系列:匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID数据处理:Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |干货系列:能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验计量经济圈组织了一个计量社群,有如下特征:热情互助最多、前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。