多期数据DID操作

多期DID常用于政策评估效应研究,比如研究‘鼓励上市政策’,‘开通沪港通’,‘开通高铁’,‘引入新教育模式’等效应时,分析效应带来的影响情况。

案例背景描述

比如有50个地区分别11年(2010~2020)的数据(共计50*11=550行)。50个地区可分为两类地区A和B(分别均为25个),在2016年A类地区没有开通高铁,B类地区开通高铁。那么开通高铁对于GDP的影响情况如何呢?

涉及两个关键数据,分别是Treated和Time,此处Treated为地区(A和B两个地区),以及时间项Time(高铁开通前和开通后)。同时研究‘开通高铁’参于GDP的影响,那么被解释变量Y即为GDP,与此同时还涉及可选的控制变量(控制变量为可选项,多数情况下并不需要),比如教育投入,人口或对外投资情况等,如下表说明。

preview

特别提示:

  • Treated只能为数字0或1,且一定包括此2个数字。其用于标识研究‘效应’对应的组别,数字0标识‘控制组’,数字1标识‘实验组’,一定需要这样处理。
  • Time只能为数字0或1,且一定包括此2个数字。其用于标识研究‘时间’对应的组别,数字0标识‘before’(实验前),数字1标识‘after(实验后),一定需要这样处理。

1 数据格式

多期面板数据进行DID分析时,数据格式类似如下图:共计50个地区分别11年的数据,那么就应该为50*11=550行数据,加上第1行为标题即最终为551行数据。多期DID分析时共需要多出3列数据,分别是time,treated,treated*time,说明如下:

preview

针对treated:A地区全部为数字0,B地区全部为数字1;

针对time:2020~2015全部是数字0代表高铁开通前,2016~2020全部是数字1代表高铁开通后;

针对tretaed*time,其为treated与time的乘积项,即交互项。

preview

2 数据处理

如果说数据已经是面板格式,但是没有treated,time,treated*time这三项数据,此时可使用SPSSAU->数据处理模块里面的‘数据编码’和‘生成变量’功能。使用数据编码功能时,将地区编码为01格式的treated,将年份编码为01格式的time,并且使用生成变量得到treated与time的交互项。操作分别如下各图:

以年份为例进行数字编码如下图(当然也可使用范围编码),

数据编码完成后,分别得到treated和time数据;

  • 当然数字0和1代表的意义需要自己进行标识(便于画图时使用),可使用数据处理里面的数据标签功能标识下即可。
  • 如果需要修改标题的名称,可使用数据处理里面的标题处理功能。
  • 接着使用生成变量功能的‘乘积(交互项)’得到treated和time的交互项,操作如下图:

3 SPSSAU分析多期DID

由于是面板数据,因而使用SPSSAU计量研究模块里面的‘面板模型’进行具体分析,操作如下图:

  • 面板模型时打勾‘双向固定’模型(即输出结果中最终使用‘双向固定’模型对应的结果;
  • 分别放入被解释变量(或因变量,此处为gdp),解释变量(或自变量,即交互项treated*time),以及将地区和年份放入对应的框中(以告诉系统此处为面板模型);
  • 关于treated和time这两项,一般并不需要放入模型中,如果模型中有控制变量可直接放入对应解释变量(自变量X)框中就好。
  • 最终输出结果中,直接分析交互项(treated*time)的显著性即可,如此其显著,则说明具有‘某效应’(此处为高铁效应),显著后如果回归系数大于0则为正向效应,反之则为负向效应。如果不显著,则说明没有‘某效应’。

preview

4 关于平行趋势检验

多期数据进行DID模型研究时,针对共同趋势检验,通常有两种处理思路,分别是图示法和回归模型检验法。

4.1 图示法

对比不同组别因变量均值的时间趋势;使用SPSSAU可视化中的误差线图或簇状图均可;图示法只需要观察‘效应’时间点前即before时的各时间点时,treated和control组别因变量数据是否均有平行性(两条线基本平行)即可;

4.2 回归模型检验法

回归中加入各时点虚拟变量与treated的交互项(本例中年份虚拟变量乘以treated数据);如果说before时,各交互项系数不显著,则表明的确有着平行趋势。操作上分为3步如下:

第一步为使用SPSSAU数据处理里面的生成变量->‘虚拟变量’功能,得到‘时间项’的虚拟变量后(本例为年份);

第二步为将‘第一步’的虚拟变量项分别与treated进行相乘(目的是得到交互项)。

第三步是进行回归,通常可使用面板模型的个体固定效应或普通的ols回归均可。

最后进行平行趋势检验时,本案例中2010~2015共6年为‘效应前’,如果此6个年份对应的6个交互项基本上不显著(通常不太可能全部不显著),此时则说明具有平行趋势,即通过检验。

5 剖析

涉及以下几个关键点,分别如下:

1、Treated只能为数字0或1,且一定包括此2个数字。其用于标识研究‘效应’对应的组别,数字0标识‘控制组’,数字1标识‘实验组’,一定需要这样处理。

2、Time只能为数字0或1,且一定包括此2个数字。其用于标识研究‘时间’对应的组别,数字0标识‘before’(实验前),数字1标识‘after(实验后),一定需要这样处理。

3、多期面板数据时,一般使用‘双向固定’模型进行分析,具体分析时,只需要分析交互项‘treated*time’的显著性即可,如果显著就说明具有‘效应’,显著后回归系数大于0则说明为正向效应反之为负向效应。

4、treated和time均不需要放入模型中。

5、除使用‘双向固定’模型进行多期DID分析外,也可直接使用比如OLS模型,或个体固定效应模型进行分析,其结论基本上均会保持一致。

「更多内容登录SPSSAU官网了解」

### 多期DID Probit模型实现与应用 #### 背景介绍 多期双重差分法(Difference-in-Differences, DID)是一种广泛应用于评估政策干预效果的方法。当处理变量随时间变化且存在多个时期的数据时,可以采用多期DID方法来估计因果效应。Probit模型则用于分析二元因变量的概率分布情况。 #### 模型设定 对于多期DID Probit模型而言,基本形式如下: \[ P(Y_{it}=1|X,D)=\Phi(X'\beta+\alpha D_t+\gamma Post_t+\delta Treat_i+(\lambda \cdot Post)_t \times Treat_i + u_{it}) \] 其中 \(Y\) 是被解释变量;\(X\) 表示控制变量集合;\(D_t\) 和 \(Post_t\) 分别表示时间和事后虚拟变量;\(Treat_i\) 则代表个体是否接受处理的状态;而交互项 \((\lambda \cdot Post)_t \times Treat_i\) 即为我们关心的DID系数[^1]。 #### 实现方式 ##### 使用Stata软件 在Stata中可以通过`xtprobit`命令配合相应的选项来进行建模操作: ```stata * 假设数据已经按照panel data格式整理好 * xtset id time gen post=year>=2018 // 定义post变量 gen treat=group==1 // 定义treatment组标识符 gen did=post*treat // 构造did交互项 xtprobit y x1 x2 ... xn i.year post treat did, fe vce(cluster clustervar) margins, dydx(*) atmeans predict(pu0) ``` 这段代码首先设置了面板结构并创建了必要的辅助变量,接着利用固定效应回归(`fe`)以及聚类稳健标准误(`vce(cluster)`),最后通过边际效应计算得到各因素的影响程度。 ##### 使用R语言 借助于`plm`包和`glm()`函数可以在R环境中完成相同的工作流程: ```r library(plm) data <- pdata.frame(data, index=c("id", "time")) model <- glm(y ~ factor(year)+factor(post)*factor(treat)+ offset(log(exposure)), family="binomial"(link="probit"), data=data, subset=!is.na(y)) summary(model) predict(model, type='response') ``` 这里需要注意的是,在构建回归方程时要适当调整协变量的选择,并确保样本不存在缺失值问题影响到最终的结果解读[^2]。 ##### 使用Python编程环境 Python中的Statsmodels库提供了强大的统计工具支持此类复杂模型的拟合工作: ```python import statsmodels.api as sm from patsy import dmatrices formula = 'y ~ C(year) + C(post):C(treat)' y, X = dmatrices(formula, df, return_type='dataframe') mod_probit = sm.Probit(y.astype(float).squeeze(), X) res_probit = mod_probit.fit() print(res_probit.summary()) preds = res_probit.predict(X) ``` 上述脚本展示了如何定义公式字符串指定自变量关系模式,再调用相应API接口执行最大似然估计过程获得参数估值及其显著性检验信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值