当因变量为二值变量(0/1型,如“是否违约”“是否创业”)时,内生性检验需结合离散选择模型(如Probit/Logit) 与GMM的核心逻辑,核心挑战在于:二值因变量的非线性特征打破了线性GMM的“矩条件有效性”,需通过“特殊矩条件构建”或“模拟方法”实现内生性检验。以下是具体方法、原理及Stata实现:
一、核心前提:二值因变量的内生性来源与检验逻辑
二值因变量的内生性仍源于“自变量与扰动项相关”(如双向因果、遗漏变量、测量误差),但因变量的非线性转换(如Probit的累积正态分布)导致:
- 传统线性GMM的“残差矩条件”(,为工具变量)不再适用;
- 需通过**“基于选择概率的矩条件”** 或**“控制函数法(Control Function, CF)”** 间接检验内生性,本质是验证“内生变量是否显著影响扰动项的条件分布”。
二、3种主流检验方法(按实操性排序)
方法1:控制函数法(CF)+ 显著性检验(最常用)
原理:通过工具变量构建“内生性控制项”,将其纳入Probit/Logit模型,若控制项显著,说明存在内生性。
步骤拆解:
- 第一阶段:用工具变量对内生变量做线性回归(或Probit/Logit,若也是离散变量),得到残差(即“内生性控制项”);
- 第二阶段:将加入二值因变量的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
三、关键注意事项(避坑指南)
工具变量选择是核心:
需满足“相关性”(与内生变量强相关)和“外生性”(仅通过影响,与扰动项无关),可通过“第一阶段F统计量”(F>10)检验相关性,避免弱工具变量。
非线性模型的“内生性稳健性”:
若控制函数法(CF)检验出内生性,需用“非线性GMM”或“工具变量Probit(IV-Probit)”修正,而非直接使用线性GMM(会导致偏误)。Stata中ivprobit命令可直接实现工具变量Probit,其内生性检验逻辑与CF法一致。
面板数据的特殊处理:
若为面板二值数据(如企业年度“是否违约”),需用xtprobit(固定效应Probit)结合CF法,第一阶段回归需加入个体固定效应(i.id),避免遗漏个体异质性导致的伪内生性。
结果解读的边界:
所有检验的原假设均为“无内生性”,若检验不显著(p>0.05),仅说明“未发现内生性证据”,而非“绝对无内生性”,需结合理论逻辑判断(如“是否存在双向因果”)。
四、总结:检验流程梳理
- 初步判断:通过理论分析确定疑似内生变量(如“创业决策”与“收入”的双向因果);
- 工具变量验证:确保工具变量满足“相关性”(第一阶段F>10)和“外生性”(理论无直接影响);
- 核心检验:优先用“控制函数法(CF)”,检验残差项的显著性;
- 稳健性验证:若CF法显著,用“非线性GMM”或“IV-Probit”修正,并通过“过度识别检验”验证工具变量有效性;
- 结论整合:结合检验结果与理论,判断是否存在内生性及修正方法。