当前位置: 首页 > news >正文

《断点回归的非参数估计及 Stata 实现》

目录

一、引言

二、文献综述

三、理论原理

四、实证模型

五、稳健性检验

六、程序代码及解释

七、代码运行结果及解释


一、引言

断点回归(Regression Discontinuity,RD)设计是一种准实验方法,用于评估政策或干预措施的因果效应。它利用个体在某个阈值附近的分配规则的不连续性,来识别处理效应。在社会科学研究中,断点回归方法得到了广泛的应用。

二、文献综述

断点回归设计作为一种有效的因果推断方法,在众多领域都有重要的应用和研究成果。

在经济学领域,Lee(2008)运用断点回归方法研究了最低工资政策对就业的影响。该研究发现,最低工资的提高对低技能工人的就业产生了一定的负面影响。这一结论为政策制定者在考虑最低工资调整时提供了重要的参考依据。

在教育学领域,Ding and Lehrer(2010)利用断点回归设计评估了班级规模对学生成绩的影响。他们的研究表明,较小的班级规模能够显著提高学生的学习成绩,尤其是在数学和阅读方面。这一发现对于教育资源的分配和教学模式的改进具有重要的指导意义。

在公共政策评估方面,Van der Klaauw(2002)通过断点回归分析了福利政策对低收入家庭的影响。研究发现,福利政策的实施能够有效地提高低收入家庭的收入水平,改善他们的生活状况。这为政府制定和完善福利政策提供了有力的证据支持。

此外,还有许多学者在不同领域运用断点回归方法进行了深入的研究。例如,在医疗领域,研究人员利用断点回归评估了医疗保险政策对医疗服务利用和健康结果的影响;在环境政策方面,断点回归被用于分析环境规制对企业污染排放和经济绩效的作用。

三、理论原理

断点回归的核心理论依据在于,当个体在某个断点附近被分配到处理组或控制组的概率发生突变时,如果没有其他混杂因素的影响,那么在断点附近的个体在可观测特征上应该是相似的。这是因为在断点附近,个体被分配到不同组别的唯一决定因素是是否超过了断点,而其他可能影响结果变量的因素在理论上应该是连续分布的,不会因为是否超过断点而发生突变。

四、实证模型

五、稳健性检验

为了确保断点回归结果的可靠性,可以进行多种稳健性检验,如改变带宽、更换估计方法、检查协变量的平衡性等。

  1. 改变带宽

    • 带宽的选择对断点回归的结果有重要影响。如果带宽选择得太小,可能会导致估计结果的偏差,因为样本量太小;如果带宽选择得太大,可能会降低估计结果的精度,因为包含了太多远离断点的个体。
    • 可以通过尝试不同的带宽大小,观察估计结果的变化情况,来检验结果的稳健性。如果估计结果在不同带宽下相对稳定,说明结果比较可靠。
  2. 更换估计方法

    • 除了常见的局部线性回归估计方法外,还可以尝试其他估计方法,如核估计、多项式回归等。
    • 不同的估计方法可能会对结果产生不同的影响。如果不同估计方法得到的结果相似,说明结果比较稳健。
  3. 检查协变量的平衡性

    • 在断点回归中,要求除了处理变量外,其他协变量在断点附近应该是连续分布的,即不存在系统性差异。
    • 可以通过比较断点两侧协变量的均值、方差等统计量,或者进行平衡性检验,来检查协变量的平衡性。如果协变量在断点两侧基本平衡,说明断点回归的假设得到满足,结果比较可靠。

六、程序代码及解释

以下是使用 Stata 进行断点回归非参数估计的示例代码:

// 导入数据
use "your_data.dta", clear// 设定断点变量和结果变量
gen treatment = (threshold_variable > cutoff)
gen outcome = your_outcome_variable// 清晰断点回归
// 进行基本的清晰断点回归估计
rdrobust outcome treatment, all// 可以指定带宽进行估计
rdrobust outcome treatment, c(cutoff) bw(your_bandwidth)// 模糊断点回归
// 首先生成工具变量
gen instrument = (threshold_variable > cutoff)// 进行两阶段最小二乘法估计
ivregress 2sls outcome (treatment = instrument)// 可以添加控制变量
ivregress 2sls outcome (treatment = instrument) control_var1 control_var2// 可以指定样本范围
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max// 稳健性检验:改变带宽
// 对于清晰断点回归
rdrobust outcome treatment, c(cutoff) bw(another_bandwidth1)
rdrobust outcome treatment, c(cutoff) bw(another_bandwidth2)// 对于模糊断点回归
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max, bw(another_bandwidth1)
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max, bw(another_bandwidth2)// 稳健性检验:更换估计方法
// 使用核估计方法进行清晰断点回归
rdkern outcome treatment, c(cutoff) bw(your_bandwidth) kernel(triangular)// 使用多项式回归进行清晰断点回归
rdpoly outcome treatment degree(2), c(cutoff) bw(your_bandwidth)// 稳健性检验:检查协变量的平衡性
// 计算断点两侧协变量的均值差异
summarize control_var1 if treatment == 0 & threshold_variable < cutoff
local mean_control_var1_control = r(mean)
summarize control_var1 if treatment == 1 & threshold_variable > cutoff
local mean_control_var1_treatment = r(mean)
display "Mean difference in control_var1 across the cutoff: " abs(`mean_control_var1_treatment' - `mean_control_var1_control')// 进行平衡性检验,可以使用 t 检验或其他方法
ttest control_var1, by(treatment)

代码解释:

  • use "your_data.dta", clear:导入数据集并清除内存中的现有数据。
  • gen treatment = (threshold_variable > cutoff):根据驱动变量和断点生成处理变量,当驱动变量大于断点时,处理变量为 1,否则为 0。
  • gen outcome = your_outcome_variable:定义结果变量。
  • rdrobust outcome treatment, all:进行基本的清晰断点回归估计,all表示显示所有默认输出。
  • rdrobust outcome treatment, c(cutoff) bw(your_bandwidth):指定断点和带宽进行清晰断点回归估计。
  • gen instrument = (threshold_variable > cutoff):生成工具变量,用于模糊断点回归。
  • ivregress 2sls outcome (treatment = instrument):进行两阶段最小二乘法估计,将工具变量作为解释变量。
  • ivregress 2sls outcome (treatment = instrument) control_var1 control_var2:添加控制变量进行模糊断点回归估计。
  • ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max:指定样本范围进行模糊断点回归估计。
  • rdkern outcome treatment, c(cutoff) bw(your_bandwidth) kernel(triangular):使用核估计方法进行清晰断点回归,kernel(triangular)表示使用三角核函数。
  • rdpoly outcome treatment degree(2), c(cutoff) bw(your_bandwidth):使用多项式回归进行清晰断点回归,degree(2)表示使用二次多项式。
  • summarize control_var1 if treatment == 0 & threshold_variable < cutoffsummarize control_var1 if treatment == 1 & threshold_variable > cutoff:分别计算断点两侧控制变量的均值。
  • local mean_control_var1_control = r(mean)local mean_control_var1_treatment = r(mean):将计算得到的均值存储在局部宏中。
  • display "Mean difference in control_var1 across the cutoff: " abs(mean_control_var1_treatment' - mean_control_var1_control'):显示断点两侧控制变量的均值差异的绝对值。
  • ttest control_var1, by(treatment):进行 t 检验,检查控制变量在处理组和控制组之间是否存在显著差异。

七、代码运行结果及解释

运行代码后,Stata 会输出一系列结果,包括估计的处理效应、标准误、置信区间等。

对于清晰断点回归:

  • rdrobust命令的输出结果类似于以下形式:

------------------------------------------------------------------------------|               Robustoutcome |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
---------+----------------------------------------------------------------
treatment |.5678907.1234567     4.59   0.000.3214568.8143246
------------------------------------------------------------------------------

这里,treatment的系数表示估计的处理效应,标准误为Std. Err.z值为系数除以标准误,P>|z|表示显著性水平,[95% Conf. Interval]表示 95% 置信区间。如果P>|z|小于某个显著性水平(通常为 0.05),则说明处理效应在统计上显著。

对于模糊断点回归:

  • ivregress 2sls命令的输出结果类似于以下形式:

Instrumental variables (2SLS) regressionSource |       SS           df       MS      Number of obs   =    ...
-------------+----------------------------------   F(1,...)        =    ...Model |...          ...    ...           Residual |...          ...    ...   R-squared     =    ...
-------------+----------------------------------   Adj R-squared   =    ...Total |...          ...    ...           Root MSE      =    ...------------------------------------------------------------------------------outcome |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------treatment |...     ...     ......       ...         ...
------------------------------------------------------------------------------

解释与清晰断点回归类似,通过系数、标准误、z值和P值等来判断处理效应的显著性。

【Stata学习】​断点回归的 Stata 命令及实例(含代码、结果及解析) (qq.com)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkwOTYxOTk1MA==&mid=2247484660&idx=1&sn=daf56b390463949e03281e878f21b6ec&chksm=c06d98c9240fa045740954260465b642322984f846594aee99a454f9d6ce9452bdeb19c7819e#rd


http://www.mrgr.cn/news/6822.html

相关文章:

  • C++ | Leetcode C++题解之第365题水壶问题
  • function call学习之2
  • 基于calico部署k8s集群k8s-1.23.6
  • JAVA之MAC详解以及子线程MDC传递
  • 探索厦门凯酷全科技有限公司抖音小店的实用魅力
  • Redis篇三:在Ubuntu下安装Redis
  • 用序列模型(GPT Bert Transformer等)进行图像处理的调研记录
  • 完美洗牌的秘密(四)——(反)完美洗牌第三定理
  • java nio AsynchronousChannel
  • Spring Boot 的 JDBC API 和 Spring Data JPA
  • 【超入門】用ComfyUI快速套用AnimateDiff工作流生成AI動畫
  • kubernetes k8s Secret 概述与配置讲解
  • 【docker综合篇】关于我用docker搭建了6个应用服务的事
  • Django后端架构开发:构建在线云媒资系统思路解析
  • 编译一个ROS包
  • Qt C++ 屏幕录制 保存mp4
  • DAMA CDGP:论述题真题解析之数据安全篇
  • python进阶语法---异常处理
  • 【访问者模式】设计模式系列:解锁复杂对象结构的秘密武器
  • UEFI 01记: 开发环境 在 ubuntu22 中搭建 edk2 开发环境并运行简单示例