色彩与灵魂的私语:跟随“爱色哥”开启一场永不枯竭的灵感漫游

核心内容摘要

hlw35life葫芦里不卖药
桥本有菜T2U系列:定格极致魅力,绽放无限风情

闪耀星辰:14岁少女张婉莹的梦想与远航

双重差分法DID基础与核心逻辑双重差分法Difference-in-DifferencesDID是政策评估中最常用的因果推断方法之一。

它的核心思想是通过比较处理组和对照组在政策实施前后的变化差异来识别政策的净效应。

这种方法巧妙地将时间维度政策前后和组别维度处理组与对照组结合起来有效控制了时间趋势和组间固有差异的影响。

我第一次接触DID是在评估某地区最低工资政策对就业的影响时。

当时发现单纯比较政策前后就业率的变化会忽略经济周期等外部因素而直接比较处理组和对照组的差异又无法排除地区固有特征的影响。

DID通过双重差分完美解决了这个问题。

DID的基本模型可以表示为y_it α γD_t βx_it u_i ε_it其中y_it是个体i在时期t的结果变量D_t是时间虚拟变量政策后1政策前0x_it是处理状态虚拟变量处理组且在政策后时期1其他0u_i是个体固定效应ε_it是随机误差项β就是我们关心的政策效应估计量。

通过这个模型我们可以分离出政策实施的净效应而不是简单地将所有变化都归因于政策。

平行趋势检验DID的前提条件平行趋势假设是DID方法成立的关键前提它要求在没有政策干预的情况下处理组和对照组的结果变量随时间变化的趋势应该是一致的。

换句话说政策实施前两组的趋势应该是平行的。

在实际操作中我经常遇到学生问如果平行趋势不成立怎么办我的经验是可以通过以下几种方式检验和处理图形法检验绘制处理组和对照组在政策前后的时间趋势图egen mean_y mean(fte), by(t treated) graph twoway (connected mean_y t if treated1, sort(t)) /// (connected mean_y t if treated0, sort(t)), /// ytitle(全职雇员人数) xtitle(时期) /// legend(label(1 处理组) label(2 控制组))动态效应检验加入政策前后的交互项gen pre3 (year policy_year-

gen pre2 (year policy_year-

gen post1 (year policy_year

// 以此类推... xtreg y i.treated##(c.pre3 c.pre2 c.current c.post1 c.post

, fe vce(cluster id)如果政策前的系数不显著则支持平行趋势假设。

我在一次区域政策评估中发现加入这些动态项后政策前的系数确实不显著这让我对分析结果更有信心。

PSM-DID解决样本选择偏差当处理组和对照组在政策前存在系统性差异时简单的DID估计可能会有偏差。

这时可以结合倾向得分匹配PSM和DID即PSM-DID方法。

这种方法先通过PSM找到与处理组相似的控制组样本再进行DID分析。

实际操作中PSM-DID分为三个关键步骤估计倾向得分通常使用logit或probit模型psmatch2 treated x1 x2 x3, logit neighbor(

caliper(

0.

平衡性检验确保匹配后协变量在处理组和对照组间平衡pstest x1 x2 x3, both graph进行DID分析仅使用匹配后的样本diff y, t(treated) p(post) kernel id(id) logit cov(x1 x2 x

需要注意的是PSM-DID要求满足条件独立性假设和重叠假设。

我曾在一个项目中遇到协变量太少导致匹配效果不佳的情况这时需要考虑收集更多协变量或采用其他方法。

安慰剂检验验证结果的稳健性安慰剂检验是验证DID结果可靠性的重要手段核心思想是通过虚构处理组或政策时间检验是否能得到显著的政策效应。

如果虚构情况下也能得到显著结果说明原始结果可能存在问题。

常用的安慰剂检验方法包括随机分配处理组重复多次随机生成处理组mat b J(500,1,

mat se J(500,1,

mat p J(500,1,

forvalues i1/500 { use data.dta, clear sample N_treated, count // N_treated为真实处理组数量 keep id merge 1:m id using data.dta gen placebo_treat (_merge

gen placebo_did placebo_treat*post reg y placebo_did, vce(cluster id) mat b[i,1] _b[placebo_did] mat se[i,1] _se[placebo_did] mat p[i,1] 2*ttail(e(df_r), abs(_b[placebo_did]/_se[placebo_did])) }改变政策时间将政策时间提前检验伪政策效应替换结果变量使用理论上不应受政策影响的变量进行检验在我的经验中安慰剂检验通过并不意味着结果绝对可靠但不通过则强烈暗示存在问题。

曾有一个项目安慰剂检验显示随机处理组也能得到显著结果后来发现是模型设定有问题。

Stata全流程操作指南下面以一个完整的案例展示DID分析在Stata中的实现流程使用经典的Card和Krueger(

数据集研究新泽西州最低工资提高对快餐业就业的影响。

数据准备与描述统计use cardkrueger

dta, clear describe summarize fte treated t bk kfc roys基础DID回归gen did treated*t reg fte did treated t bk kfc roys, r使用diff命令ssc install diff diff fte, t(treated) p(t) cov(bk kfc roys) robust多期DID与平行趋势检验// 生成年度虚拟变量 tab year, gen(yr_) // 生成年度交互项 forvalues i1/4 { gen did_yri treated*yr_i } xtreg fte did_yr*, fe vce(cluster id)PSM-DID实现// 倾向得分匹配 psmatch2 treated bk kfc roys, logit neighbor(

caliper(

0.

// DID分析 diff fte, t(treated) p(t) kernel id(id) logit cov(bk kfc roys) support安慰剂检验// 随机处理组安慰剂检验 preserve mat b J(500,1,

mat p J(500,1,

forvalues i1/500 { use cardkrueger

dta, clear keep if t0 sample 326, count // 处理组样本量 keep id merge 1:m id using cardkrueger

dta gen placebo_treat (_merge

gen placebo_did placebo_treat*t reg fte placebo_did bk kfc roys, r mat b[i,1] _b[placebo_did] mat p[i,1] 2*ttail(e(df_r), abs(_b[placebo_did]/_se[placebo_did])) } // 绘制结果 svmat b, names(coef) twoway (kdensity coef

, xline(

2.

//

935为真实估计值 restore

6.

常见问题与解决方案在实际应用中我遇到过各种DID分析的问题以下是几个典型问题及解决方法平行趋势不成立怎么办尝试加入组别特定时间趋势考虑使用三重差分法(DDD)改用合成控制法处理效应异质性如何处理分样本回归加入处理变量与协变量的交互项使用分位数DID多期DID如何处理采用事件研究法设定使用堆叠DID(stacked DID)考虑交错DID(staggered DID)的最新方法小样本问题使用精确检验考虑置换检验(permutation test)使用bootstrap标准误记得在一次省级政策评估中平行趋势检验勉强通过但不够理想。

我通过加入地区特定时间趋势使结果更加稳健。

这提醒我们方法要灵活运用不能生搬硬套。

爱液官网免费-爱液官网免费应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123