全部版块 我的主页
论坛 计量经济学与统计论坛 五区 数据交流中心 数据求助
120 0
2025-09-27

当因变量为二值变量(0/1型,如“是否违约”“是否创业”)时,内生性检验需结合离散选择模型(如Probit/Logit) 与GMM的核心逻辑,核心挑战在于:二值因变量的非线性特征打破了线性GMM的“矩条件有效性”,需通过“特殊矩条件构建”或“模拟方法”实现内生性检验。以下是具体方法、原理及Stata实现:

一、核心前提:二值因变量的内生性来源与检验逻辑

二值因变量的内生性仍源于“自变量与扰动项相关”(如双向因果、遗漏变量、测量误差),但因变量的非线性转换(如Probit的累积正态分布)导致:

  • 传统线性GMM的“残差矩条件”(为工具变量)不再适用;
  • 需通过**“基于选择概率的矩条件”** 或**“控制函数法(Control Function, CF)”** 间接检验内生性,本质是验证“内生变量是否显著影响扰动项的条件分布”。

二、3种主流检验方法(按实操性排序)

方法1:控制函数法(CF)+ 显著性检验(最常用)

原理:通过工具变量构建“内生性控制项”,将其纳入Probit/Logit模型,若控制项显著,说明存在内生性。
步骤拆解:

  1. 第一阶段:用工具变量对内生变量做线性回归(或Probit/Logit,若也是离散变量),得到残差(即“内生性控制项”);
  2. 第二阶段:将加入二值因变量的Probit/Logit模型,若的系数显著,表明存在内生性(捕捉了与扰动项的相关性)。

适用场景:工具变量可观测、内生变量为连续/离散均可,计算简单且直观。

Stata实现代码

* 数据准备:y(二值因变量,0/1)、X(疑似内生变量)、Z(工具变量,至少1个)、X_exo(外生控制变量)
clear
use "二值因变量数据.dta", replace
xtset id year  // 若为面板数据,需设置面板结构(可选)

* 步骤1:第一阶段回归(工具变量Z对内生变量X回归)
reg X Z X_exo i.year, robust  // 若X为离散变量,改用logit X Z X_exo
predict v_hat, resid  // 提取残差(内生性控制项)

* 步骤2:第二阶段Probit模型(加入控制项v_hat)
probit y X X_exo v_hat i.year, robust  // 若为面板数据,用xtprobit
margins, dydx(*)  // 可选:计算边际效应,更易解读

* 内生性检验:看v_hat的系数显著性
* 原假设:v_hat系数=0(无内生性);若p<0.05,拒绝原假设,存在内生性
test v_hat  // 输出v_hat的t检验结果

结果解读:若test v_hat的p值<0.05,说明内生变量与扰动项相关,需用工具变量方法(如GMM)修正;若p>0.05,可直接使用普通Probit/Logit。

方法2:基于GMM的矩条件检验(非线性GMM)

原理:针对二值因变量的非线性特征,构建“基于选择概率的矩条件”:

  • 普通Probit的矩条件:为累积正态分布,为工具变量);
  • 若该矩条件不满足(即工具变量与“”相关),说明存在内生性,需通过GMM最小化“矩条件的加权平方和”,并检验“矩条件是否联合成立”。

适用场景:需严格满足GMM的“工具变量外生性”假设,适合理论推导严谨的场景。

Stata实现代码

* 步骤1:定义Probit的矩条件函数(需编写ado文件或使用gmm命令)
* 矩条件:g = Z .* (y - normal(Xb)),其中Xb = X*beta + X_exo*gamma
gmm ///
  (y - normal(_b[X]*X + _b[X_exo]*X_exo + _b[year_2020]*year_2020 + ...))*Z1, /// 工具变量Z1的矩条件
  (y - normal(_b[X]*X + _b[X_exo]*X_exo + _b[year_2020]*year_2020 + ...))*Z2, /// 工具变量Z2的矩条件
  instruments(X_exo year*)  // 外生控制变量作为工具变量
matrix list e(b)  // 查看GMM估计系数

* 步骤2:内生性检验(过度识别检验)
* 原假设:所有矩条件成立(工具变量外生,无内生性);若p<0.05,拒绝原假设
estat overid  // 输出过度识别检验的J统计量与p值

关键说明

  • 需手动构建矩条件(确保包含所有工具变量与外生变量);
  • 过度识别检验p值<0.05,说明工具变量与扰动项相关(存在内生性),需更换工具变量;p>0.05,说明矩条件成立(无内生性)。

方法3:模拟矩估计(SMM)检验(适用于复杂场景)

原理:当工具变量数量多或因变量存在“样本选择偏差”(如部分观测不可得)时,通过“模拟扰动项分布”构建矩条件,用SMM最小化“模拟矩与样本矩的差异”,若差异显著,说明存在内生性。

适用场景:非线性程度高(如多值离散因变量)、工具变量数量超过内生变量数量,需专业编程能力。

Stata实现代码(简化版)

* 安装SMM工具包(需联网)
ssc install simmr, replace

* 定义模拟矩函数(需自定义,此处为伪代码)
program define smm_probit
  args params sim_data
  local beta = `params'[1,1]  // X的系数
  local gamma = `params'[2,1] // 外生变量系数
  
  * 模拟选择概率:P(y=1) = normal(X*beta + X_exo*gamma)
  gen sim_prob = normal(X*`beta' + X_exo*`gamma')
  gen sim_y = rbinomial(1, sim_prob)  // 模拟二值因变量
  
  * 构建模拟矩:工具变量与模拟残差的乘积
  gen sim_m1 = Z1*(sim_y - sim_prob)
  gen sim_m2 = Z2*(sim_y - sim_prob)
  
  * 输出模拟矩(与样本矩对比)
  matrix `sim_data' = J(1,2,.)
  matrix `sim_data'[1,1] = mean(sim_m1)
  matrix `sim_data'[1,2] = mean(sim_m2)
end

* 运行SMM并检验内生性
simmr, ///
  program(smm_probit) /// 自定义模拟程序
  params(0.5 0.3) /// 初始系数猜测
  data(mean(Z1*(y - normal(X*0.5 + X_exo*0.3))) mean(Z2*(y - normal(X*0.5 + X_exo*0.3)))) /// 样本矩
  nsim(100)  // 模拟次数(越多越精准)

* 内生性检验:看模拟矩与样本矩的差异是否显著(p<0.05则存在内生性)
estat smmr_test

三、关键注意事项(避坑指南)

  1. 工具变量选择是核心
    需满足“相关性”(与内生变量强相关)和“外生性”(仅通过影响,与扰动项无关),可通过“第一阶段F统计量”(F>10)检验相关性,避免弱工具变量。

  2. 非线性模型的“内生性稳健性”
    若控制函数法(CF)检验出内生性,需用“非线性GMM”或“工具变量Probit(IV-Probit)”修正,而非直接使用线性GMM(会导致偏误)。Stata中ivprobit命令可直接实现工具变量Probit,其内生性检验逻辑与CF法一致。

  3. 面板数据的特殊处理
    若为面板二值数据(如企业年度“是否违约”),需用xtprobit(固定效应Probit)结合CF法,第一阶段回归需加入个体固定效应(i.id),避免遗漏个体异质性导致的伪内生性。

  4. 结果解读的边界
    所有检验的原假设均为“无内生性”,若检验不显著(p>0.05),仅说明“未发现内生性证据”,而非“绝对无内生性”,需结合理论逻辑判断(如“是否存在双向因果”)。

四、总结:检验流程梳理

  1. 初步判断:通过理论分析确定疑似内生变量(如“创业决策”与“收入”的双向因果);
  2. 工具变量验证:确保工具变量满足“相关性”(第一阶段F>10)和“外生性”(理论无直接影响);
  3. 核心检验:优先用“控制函数法(CF)”,检验残差项的显著性;
  4. 稳健性验证:若CF法显著,用“非线性GMM”或“IV-Probit”修正,并通过“过度识别检验”验证工具变量有效性;
  5. 结论整合:结合检验结果与理论,判断是否存在内生性及修正方法。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群