政策评价模型——双重差分DID法
政策评估(Policy Evaluation)在公共经济学和劳动经济学中广泛应用,主要用于评价已实施政策的效果。其核心目的是评估政策的处理效应(Treatment Effect),即该政策对特定目标人群的实际影响。通常情况下,政策的实施往往仅针对特定人群,如低收入家庭、特定行业或区域。为了评估政策的影响,政策评估的基本方法是将接受政策的处理组与未受影响的对照组进行比较,从而揭示政策带来的变化与影响。在政策评估中双重差分模型(Difference-in-Differences, DiD)是最常用的实证方法之一。双重差分方法通过比较政策实施前后处理组和对照组的变化,剔除掉那些非政策因素的共同变化,从而提取出纯粹由政策产生的处理效应。具体而言,双重差分模型首先计算政策实施前后处理组和对照组的平均变化,然后通过两者之间的差异评估政策效应。这一方法的核心假设是“平行趋势假设”,即在没有政策的情况下,处理组和对照组的趋势应保持一致。随着政策评估需求的增加,双重差分模型也逐渐得到拓展和改进。研究人员引入了一些更为复杂的工具和模型,如多期双重差分模型、多层面双重差分等,以应对更复杂的政策情境和数据结构,从而提高政策评估的准确性和可靠性。
一、双重差分法(DID)的原理
DID模型的核心思想是通过政策实施前后处理组与对照组的差异,推断出该政策的净效应。其基本逻辑在于,通过对比两组数据在政策实施前后的变化,可以有效控制掉政策实施前后两组共同存在的时间趋势及潜在干扰,从而使估计更为准确。DID方法的基本假设是“平行趋势假设”,即假设在没有政策干预的情况下,处理组与对照组在观察期内的变化趋势相同。如果这一假设成立,则可以将对照组在政策实施前后的变化作为处理组在无政策情况下的反事实(Counterfactual)预测,从而将处理组的变化归因于政策的处理效应。DID双重差分的简单模型如下:
其中:
- $ Y_{it} $ 是个体 $ i $ 在时间 $ t $ 的观测值。
- $ D_i $ 是个体是否在处理组的指示变量,处理组取值为1,对照组为0。
- $ T_t $ 是时间的指示变量,政策实施后为1,政策实施前为0。
- $ D_i \times T_t $ 是交互项,表示个体同时处于处理组且政策已实施的情境。
- $ \alpha $ 是截距项。
- $ \beta $ 代表处理组和对照组之间的初始差异。
- $ \gamma $ 代表政策实施前后的平均变化。
- $ \delta $ 是关键参数,表示双重差分估计的处理效应。
- DID估计值 $ \delta $ 即为政策的处理效应,表示由于政策实施导致的额外影响。
二、DID模型的检验过程和方法
2.1 检验过程
-
样本选择和划分
DID模型的第一步是选择适当的样本并将其划分为处理组和对照组。处理组是政策实施对象,即受政策影响的群体;对照组则是未受政策影响的相似群体。两组的选择应满足“可比性”原则,以便在政策实施前保持相似的趋势,确保平行趋势假设的有效性。 -
数据收集和变量定义
需要收集足够的纵向数据,包括政策实施前后处理组和对照组的相关变量,以便进行差分计算。一般来说,变量的定义应包括:- 被解释变量(因变量):通常是政策希望影响的目标变量,如就业率、收入水平等。
- 时间变量:用于划分政策前后时间的二元变量。
- 处理组变量:用于区分处理组和对照组的二元变量。
-
模型设定和估计
建立双重差分模型,通常采用线性回归方法估计。通过OLS估计模型参数,得出处理效应 $ \delta $ 的值。模型中交互项 $ D_i \times T_t $ 的系数 $ \delta $ 即为DID估计的处理效应,反映政策实施的净效应。 -
结果解释
估计出双重差分的系数 $ \delta $ 后,对结果进行解释。通常,若 $ \delta $ 为正值,表明政策对处理组产生了积极影响;若为负值,则可能意味着政策效果不理想或产生负面影响。DID模型的估计结果常需结合实际政策背景和其他外部信息,以便得出科学的结论。
2.2 检验方法
为保证DID模型的估计效果可靠,模型在使用过程中需进行一系列检验,包括平行趋势检验、假设检验、稳健性检验等。
- 平行趋势检验
平行趋势假设是DID模型的关键前提,若处理组与对照组在政策实施前存在明显的不同变化趋势,则DID估计的处理效应会产生偏误。平行趋势检验通常有两种方法。图形检验:将政策实施前的数据绘制成趋势图,观察处理组和对照组在政策实施前的趋势是否一致。如果两组在政策实施前表现出相似的变化趋势,则可以认为平行趋势假设成立。回归检验:将政策实施前的不同时间段作为变量,回归计算时间与处理组的交互项,检验其系数是否显著。若结果不显著,则表明平行趋势假设基本成立。 - 稳健性检验
稳健性检验主要是为确保DID模型估计的稳定性和准确性。常见的稳健性检验方法包括伪政策检验:在政策实施之前,假设一个伪政策的时间点,进行DID估计,若在该伪政策点上未发现显著的处理效应,则表明模型稳健。其他控制变量加入:在DID模型中加入额外的控制变量,如个体固定效应、时间固定效应等,以控制潜在的干扰因素,观察估计结果的变化是否显著。 - 异质性分析
异质性分析可以进一步考察政策对不同群体的影响是否存在差异。例如,若政策对不同年龄、收入水平或地域的人群效果不同,可以通过分组回归来估计政策在不同子群体上的处理效应。这种分析可以为政策制定提供更为细致的指导。 - 反事实检验
在一些DID模型应用中,研究人员会采用类似于合成控制法(Synthetic Control Method)的反事实检验方法,构造一个与处理组相似的反事实群体,进一步确保模型估计的可靠性。
参看上图示例,如果建立数学模型,可以描述为:
其中,\(Y_{it}\) 为 \(J\) 变量;\(\alpha\)为截距;$\delta、\gamma 和 \beta $ 为系数值;\(D_i\) 为算法 \(B\),干预前为 0,干预后为 1;$T_t $ 为时间,干预前为 0,干预后为 1;$ D_i \times T_t $ 为交叉项;$ \epsilon_{it} $ 为随机项。
对上述式取条件期望后,算法增量(上图中的 B')为 \(\delta\),计算过程如下表所示。
\(E(Y|D, T)\) | \(T = 0\) | \(T = 1\) | \(\Delta\) |
---|---|---|---|
\(D = 0\) | $ \alpha $ | $ \alpha + \gamma $ | $ \gamma $ |
$$D = 1$$ | $ \alpha + \beta $ | $$ \alpha + \delta + \gamma + \beta $$ | $\gamma + \delta $ |
$$\Delta$$ | \(\beta\) | $\delta + \beta $ | \(\delta\) |
显然,如果 \(\delta>0\),则认为算法 \(B\) 对指标 \(J\) 有正向促进作用;如果 \(\delta<0\),则认为算法 \(B\) 对指标 \(J\) 有负向促进作用;其它则认为没有抑制作用。
\(P\) > 0.05 | \(P\) < 0.05 | |
---|---|---|
\(\delta\)> 0 | 无显著效果 | 显著正向效果 |
\(\delta\) < 0 | 无显著效果 | 显著负向效果 |
三、案例分析
A和B为历史指标的变化保持一致的两个地区,在1994年,B区实行了一项新政策,目标是评估新政策对指标y的影响。相关数据如下。
Country | Year | y | Country | Year | y |
---|---|---|---|---|---|
A | 1990 | 1342787840 | A | 1995 | 3229574144 |
A | 1991 | -1899660544 | A | 1996 | 2756754176 |
A | 1992 | -11234363 | A | 1997 | 2771810560 |
A | 1993 | 2645775360 | A | 1998 | 3397338880 |
A | 1994 | 3008334848 | A | 1999 | 39770336 |
B | 1990 | 1342787840 | B | 1995 | 1323696384 |
B | 1991 | -1518985728 | B | 1996 | 254524176 |
B | 1992 | 1912769920 | B | 1997 | 3297033216 |
B | 1993 | 1345690240 | B | 1998 | 3011820800 |
B | 1994 | 2793515008 | B | 1999 | 3296283392 |
在该实例中,关注以下变量:
- \(D (treat)\):政策变量,B地区为1,A地区为0。
- \(T (period)\):时间变量,1994-1999年为1,1990-1993年为0。
- \(D_i × T_t (did)\):交叉项,用于估计政策效应。
import pandas as pd
import statsmodels.formula.api as smf
# 构造数据
data = {
'Country': ['A'] * 10 + ['B'] * 10,
'Year': [1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] * 2,
'y': [
1342787840, -1899660544, -11234363, 2645775360, 3008334848,
3229574144, 2756754176, 2771810560, 3397338880, 39770336,
1342787840, -1518985728, 1912769920, 1345690240, 2793515008,
1323696384, 254524176, 3297033216, 3011820800, 3296283392
]
}
# 创建DataFrame
df = pd.DataFrame(data)
# 创建DID分析所需变量
df['post_treatment'] = (df['Year'] >= 1994).astype(int) # 1994年及以后为1,否则为0
df['treated'] = (df['Country'] == 'B').astype(int) # B区为1,A区为0
df['DID'] = df['post_treatment'] * df['treated'] # 交互项
# 构建DID模型
model = smf.ols('y ~ treated + post_treatment + DID', data=df).fit()
# 输出回归结果,完整显示所有列
print("====================================")
print("Dependent Variable: y")
print("Model: OLS")
print("====================================")
print(model.summary2().tables[1].to_string()) # 显示完整的结果表
# 提取双重差分系数的p值和t值
did_coef = model.params['DID']
did_pval = model.pvalues['DID']
did_tval = model.tvalues['DID']
# 判断结果
if did_pval < 0.05:
conclusion = f"新政策对指标y有显著影响 (DID系数 = {did_coef:.2f}, p值 = {did_pval:.4f}, t值 = {did_tval:.2f})。"
else:
conclusion = f"新政策对指标y没有显著影响 (DID系数 = {did_coef:.2f}, p值 = {did_pval:.4f}, t值 = {did_tval:.2f})。"
print("====================================")
print("结论:")
print(conclusion)
====================================
Dependent Variable: y
Model: OLS
====================================
Coef. Std.Err. t P>|t| [0.025 0.975]
Intercept 5.194171e+08 7.308824e+08 0.710671 0.487519 -1.029984e+09 2.068819e+09
treated 2.511485e+08 1.033624e+09 0.242979 0.811109 -1.940036e+09 2.442333e+09
post_treatment 2.014513e+09 9.435651e+08 2.135002 0.048573 1.424467e+07 4.014782e+09
DID -4.556002e+08 1.334403e+09 -0.341426 0.737225 -3.284407e+09 2.373207e+09
====================================
#新政策对指标y没有显著影响 (DID系数 = -455600156.08, p值 = 0.7372, t值 = -0.34)。
总结
双重差分模型作为一种常用的政策评估方法,通过对比处理组和对照组在政策实施前后的差异,能够较为准确地估计政策的处理效应。尽管DID模型有一定的假设前提和局限性,但其在控制时间不变因素、适应多期数据方面具有明显优势,是政策评估中重要的实证方法。通过合理选择样本、检验平行趋势、进行稳健性检验,DID模型可以有效评估政策的实际效果,并为政策制定者提供可靠的依据。