You need to enable JavaScript to run this app. 如何使用StatsModels在Python回归分析中执行内生性Hausman检验
优惠活动
大模型
产品
解决方案
定价
更多

如何使用StatsModels在Python回归分析中执行内生性Hausman检验

基于Python StatsModels生态实现内生性Hausman检验的操作指南

Hausman检验的核心逻辑是对比两类估计量的系数差异:无内生性假设下一致且有效的OLS估计量,和无论是否存在内生性都一致但低效的2SLS/IV估计量。如果两类估计结果存在系统性显著差异,就证明变量存在内生性。


落地操作步骤

  • 第一步:安装依赖库
    直接执行pip命令安装所需依赖:
    pip install statsmodels linearmodels scipy pandas numpy
    
  • 第二步:导入所需模块
    import pandas as pd
    import numpy as np
    from scipy import stats
    from linearmodels import IV2SLS
    from statsmodels.api import OLS, add_constant
    
  • 第三步:梳理变量并准备数据集
    提前明确四类变量,替换为自己的实际业务数据即可:
    变量类型说明
    Y被解释变量
    X怀疑存在内生性的核心解释变量
    C外生控制变量
    Z核心解释变量的工具变量(需满足相关性、外生性前提)
    示例数据构造代码:
    np.random.seed(42)
    n = 1000
    Z = np.random.normal(0,1,n) # 工具变量
    C = np.random.normal(0,1,n) # 外生控制变量
    e = np.random.normal(0,1,n) # 模型误差项
    X = 0.8*Z + 0.3*e + np.random.normal(0,1,n) # 构造和误差项相关的内生X
    Y = 0.5*X + 0.2*C + e # 被解释变量
    df = pd.DataFrame({'Y':Y, 'X':X, 'C':C, 'Z':Z})
    df = add_constant(df, has_constant='add') # 加入回归所需常数项
    
  • 第四步:分别拟合两类回归模型
    # 拟合OLS模型:假设X不存在内生性
    ols_model = OLS(df['Y'], df[['const', 'X', 'C']]).fit(cov_type='HC1')
    # 拟合2SLS模型:用Z作为X的工具变量,处理内生性
    iv_model = IV2SLS(
        dependent=df['Y'],
        exog=df[['const', 'C']],
        endog=df['X'],
        instruments=df['Z']
    ).fit(cov_type='robust')
    
  • 第五步:执行Hausman检验
    可以选择直接调用封装好的方法,也可以手动计算理解原理:

    封装方法直接输出结果

    from linearmodels.iv.results import compare
    res = compare({'OLS': ols_model, '2SLS': iv_model}, 'hausman')
    print("Hausman检验结果:\n", res.hausman)
    

    手动计算统计量和p值

    # 提取核心变量的系数和协方差矩阵
    beta_ols = ols_model.params[['X']]
    beta_iv = iv_model.params[['X']]
    cov_ols = ols_model.cov_params().loc[['X'], ['X']]
    cov_iv = iv_model.cov_params().loc[['X'], ['X']]
    # 计算检验统计量,服从自由度为内生变量个数的卡方分布
    diff = beta_iv - beta_ols
    hausman_stat = diff.T @ np.linalg.inv(cov_iv - cov_ols) @ diff
    p_value = 1 - stats.chi2.cdf(hausman_stat, df=len(diff))
    print(f"Hausman统计量:{hausman_stat:.4f},p值:{p_value:.4f}")
    
  • 第六步:结果判定
    • p值 < 0.05(常用显著性水平):拒绝「不存在内生性」的原假设,证明核心变量存在内生性,需使用2SLS/IV等方法估计
    • p值 ≥ 0.05:无法拒绝原假设,无证据证明存在显著内生性,可直接使用OLS估计结果

关键注意要点

  • 工具变量有效性是检验成立的前提:如果工具变量是弱工具(和内生变量相关性极低)或者不满足外生性(和误差项相关),Hausman检验结果完全不可信,检验前必须先完成工具变量的F检验、过度识别检验(多工具变量场景)
  • 检验结果只能证明是否存在内生性,不能反过来证明工具变量有效,工具变量的合理性需要结合业务逻辑支撑
  • 异方差场景下需要使用稳健协方差矩阵计算统计量,传统Hausman检验结果不成立,上面代码中指定cov_type='HC1'和cov_type='robust'就是为了适配异方差场景
  • 检验效力和样本量强相关,小样本下很容易出现无法拒绝原假设的第二类错误,需要结合理论逻辑判断是否存在内生性,不能完全依赖检验结果
  • 如果只关注核心解释变量的内生性,可以只提取核心变量的系数做检验,不需要纳入控制变量,自由度更低、检验效力更高

内容的提问来源于stack exchange,提问作者raghav nautiyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 06:27:02