双重差分(DID)
did因果推断三重差分

DDD完全指南:原理、建模、识别条件与文献案例

当你想用DID评估政策效果,却发现处理组和控制组并不满足平行趋势假设——怎么办? 一个解决方法是:引入第三个维度的分组,再多做一重差分,这就是传说中的DDD 再多分一组,为什么就能把混杂因素分离出来?DDD模型长什么样的?此时的平行趋势又是什么含义呢? 欢迎阅读本期栏目

作者:数据范儿_范老师发布:2026-04-22更新:2026-04-22★★

三重差分(DDD):当DID的控制组不够干净时

一、为什么需要DDD?

双重差分(DID)是政策评估领域最常用的因果识别工具之一,但它依赖一个核心前提——平行趋势假设:处理组与控制组在政策实施前的变化趋势必须保持一致。一旦这个假设站不住脚,DID的估计结果就会产生系统性偏误。

三重差分(Triple Differences,DDD)正是针对这一问题而生。它在传统DID的基础上引入第三个维度的分组——例如地区、行业类型,或其他政策敏感程度指标——构造一个双重控制组,将潜在的混杂趋势从政策效应中显式剥离,从而得到更可信的因果估计。

一句话概括:当你找不到足够"干净"的控制组时,DDD帮你多做一重差分,把混杂因素算清楚再相减。


二、DDD的基本逻辑:三重各差什么?

DDD在三个维度上依次做差:

第一重差分:处理组 vs. 对照组(谁受到了政策冲击,谁没有)

第二重差分:政策实施前 vs. 实施后(时间维度)

以上两重差分与标准DID完全相同。关键在于第三重:

第三重差分:在另一个维度上再次分组,例如东部 vs. 西部、高暴露行业 vs. 低暴露行业、男性 vs. 女性。

通过三重叠加,研究者得以构造一个"双重控制组",在剔除时间趋势的同时,进一步控制组间的系统性差异。


三、经典案例:美国医保政策的因果识别

用一个计量经济学中的经典例子,阐明DDD的核心逻辑。

场景:美国B州针对65岁以上老人实施新医保政策,研究者希望评估该政策是否真正改善了老年人的健康状况。受影响的核心群体是B州65岁以上的老人。

直觉选法的两个陷阱

候选一:B州65岁以下人群 这个选择隐含了"老年人与年轻人健康变化趋势平行"的假设。但两个年龄群体在健康轨迹上本就存在系统性差异,该假设难以成立——用年轻人的趋势代替老年人的反事实状态(即假设不存在政策干预时处理组的潜在结果),会混入年龄效应。

候选二:A州65岁以上老人 这个选择隐含了"不同州同龄人健康趋势平行"的假设。然而,B州既然推行了新医保,其整体保障水平可能全面优于A州,两州同龄老人的健康基线本就不同,平行趋势同样难以成立。

DDD的解法

同时引入第四个群体——A州65岁以下人群,构成四组对比结构:

  • B州老年人健康变化 − B州年轻人健康变化 = 政策效果 + 年龄差异
  • A州老年人健康变化 − A州年轻人健康变化 = 年龄差异(A州无政策冲击)

两式相减,年龄差异被完整抵消,剩下的就是纯净的政策效果 β₁

这正是"三重差分"名称的由来:在处理状态、时间、第三分组三个维度上各做一次差分,环环相减,层层剥离混杂因素。


四、建模规范

案例模型

以医保案例为例,引入三个虚拟变量:

  • B:是否位于B州(1=是,0=否)
  • Old:是否为65岁以上老年人(1=是,0=否)
  • Time:是否在政策实施后(1=是,0=否)

模型中,β₁(即 B × Old × Time 的三重交互项系数)即为目标因果效应参数。

对比DID:DID的核心系数是 Treat × Time 两个变量的乘积项;DDD则扩展为三变量交互项,通过多一重差分来剥离额外的混杂维度。

系数理解技巧:引入多个交互项后,直接解读系数容易出错。推荐方法是穷举代入——将B、Old、Time的所有取值(0或1)逐一带入展开式,直接读出每个系数所对应的组别差异。例如,A组老年人在政策实施前:含B的项全为零,含Time的项全为零,最终仅剩截距 α₀ 加上 γ₂。每一步都可以如此推导,逻辑严谨,不易出错。

通用模型形式

在一般研究中,三个虚拟变量替换为:

  • Treat:是否为处理组
  • After:是否为政策实施后
  • High:第三分组变量(高暴露 vs. 低暴露)

通用模型包含三个一次项、三个两两交互项,以及一个三重交互项,β₇ 为目标因果效应系数(完整性要求详见下节)。


五、建模三要点

① 模型必须完整,缺一不可

三个一次项 + 三个两两交互项 + 一个三重交互项,任何一项的缺失都会导致 β₇ 的含义发生实质性偏误。从系数推导过程可以清楚地看到:只有模型完整,β₇ 才能精确对应我们想要识别的因果效应。

② 第三分组变量(High)必须外生

High 变量本身不能受到政策事件的影响。以医保案例为例,年龄不会因医保政策实施而改变,因此是天然的外生变量。若所选变量存在内生性风险,应使用事件发生前的取值进行分组,而非使用已经受到政策影响的事后数据,否则效应估计将产生混淆。

③ 低阶项可替换为固定效应

在实证研究中,模型中的一次项和两两交互项通常替换为个体、时间、行业等多维度固定效应,以控制更多不可观测的异质性,提升估计的稳健性。


六、识别条件与平行趋势检验

DDD的核心识别条件:

处理组内部(High vs. Low)的相对趋势,与对照组内部(High vs. Low)的相对趋势,在政策冲击前必须保持一致。

以医保案例为例:B州老年人 vs. 年轻人的相对趋势是处理组的"内部趋势";A州老年人 vs. 年轻人的相对趋势是对照组的"内部趋势"。识别条件要求这两个内部相对趋势在政策前保持平行,这样才能通过相减将年龄效应完整剥离。

核心逻辑:你用谁来做对照,那个量就必须与处理组对应量在政策前保持平行。

检验方法:事件研究法

将三重交互项中的时间维度替换为分年度虚拟变量,得到一系列系数 γ_k:

  • 政策冲击前(k < 0):各 γ_k 均不显著异于零 → 平行趋势成立 ✓
  • 政策冲击后(k > 0):γ_k 显著异于零 → 政策效应逐步显现 ✓

注:95%置信区间包含0,与"在5%显著性水平下系数不显著异于零"在逻辑上完全等价,是同一结论的两种表达形式。


七、文献案例

案例一:拔尖学生培养计划对理工科人才供给的影响

来源:宋红、陆毅(2020),《经济研究》

研究问题:"基础学科拔尖学生培养计划"(又称"珠峰计划",2009年提出、2010年启动)是否有效增加了理工科人才供给?

政策背景:该计划首批面向17所985高校的数理化生及计算机等理工科专业,目标是培养具有国际一流水平的科学拔尖人才。政策具有双重指向性:并非所有高校都受到冲击,只有试点高校中特定专业的学生才享有对应的政策支持。这一结构天然适合引入DDD。

DDD设计:

第一重:是否为试点高校——高校是否纳入政策范围 ② 第二重:就读专业是否为理工科——政策是否针对该专业学生 ③ 第三重:入学年份是否在计划实施后——是否处于政策时间窗口

结果变量:毕业后是否从事理工科职业,或继续攻读理工科研究生,作为理工科人才供给的代理指标。

模型设定:核心交互项为 DC × DM × DT,控制了高校×专业、高校×入学年份、专业×入学年份等多维固定效应,并通过对比控制与不控制其他层面变量的两组系数,验证估计的稳健性。

平行趋势检验:政策实施前各年度系数均不显著,实施后显著为正,识别条件成立。


案例二:排污权交易对企业全要素生产率的影响

来源:任圣刚(2019),《中国工业经济》

研究问题:2007年中国二氧化硫排放权交易试点政策,是否有效提升了企业全要素生产率?

政策背景:2007年,中国批复了包括江苏、天津、浙江在内的11个省市开展二氧化硫排放权交易试点。试点以省市为单位推进,但最终受影响的是省市内的企业层面。

为什么普通DID不够:普通DID要求试点与非试点地区企业具有平行趋势,但由于其他同期环境政策(如2011年碳排放权交易试点、2014年水权交易试点)的并行实施,不同地区、不同类型的企业受到的政策干扰并不一致,平行趋势假设难以成立。

DDD设计:引入第三分组变量——是否属于二氧化硫排放行业(对政策目标外生):

  • 试点地区SO₂行业 − 试点地区非SO₂行业 = 政策效应 + 时间趋势 + 其他政策干预
  • 非试点地区SO₂行业 − 非试点地区非SO₂行业 = 时间趋势 + 其他政策干预
  • 两式相减(三重差分)= 纯净的排污权交易政策效应

估计结论:DDD结果与主模型(普通DID)基本一致,以稳健性分析形式呈现,进一步夯实了因果推断的可信度。


小结

DDD不是DID的机械升级,而是针对特定识别挑战的方法论回应。当普通控制组的可比性存疑时,它通过引入第三维度分组,将可观测的系统性偏差从政策效应中显式剥离。

运用DDD,最关键的不是公式的熟练程度,而是对研究情境的深刻理解:第三分组变量的选择必须有扎实的经济或社会逻辑支撑,识别条件的成立与否,最终取决于研究设计的内在合理性。