Skip to content

手册AI 辅助金融研究学生自学手册


对标教材:单元 15(推断性统计)
阶段定位:分析——"算清楚"
本章为全手册最重章节,建议分 2–3 周完成


学习目标

完成本章后,你应当能够:

  1. 说出 GLM(一般线性模型)如何统摄 t 检验、方差分析与回归——三者不是"三种方法",而是同一枚硬币的不同面
  2. 选择 为自己的研究假说匹配最合适的识别策略(OLS / FE / IV / DID / PSM / RDD)
  3. 完成 用 stata-mcp 驱动的"六步法"实证全流程(描述 → 基准 → 内生性 → 稳健性 → 机制 → 异质性)
  4. 解释 每种识别策略"解决了第 4 章七大效度威胁中的哪一条"
  5. 独立撰写 一份可复现的实证分析 do 文件(从 use data/raw/esttab using ...

核心理念

"数据是用来验证模型的,而不是用来设定模型的。"
—— Bhattacherjee《社会科学研究》单元 15,qmd 第 1255 行

这句话是整章的灵魂。你在第 8 章已经学会给数据做"体检"(描述统计),本章要做的是:先基于理论把模型设定好,再用数据去验证它。如果你反复换变量、换样本直到 p < 0.05——那叫 p-hacking,是本章诚信检查点 S9.1 的红线。


章内流程图

┌────────────────────────────────────────────────────────────────────────────┐
│                        第 9 章 · 推断统计与实证策略                          │
├────────────────────────────────────────────────────────────────────────────┤
│                                                                            │
│  §9.0 GLM 世界观 ─── "t检验/ANOVA/回归是一家人"                           │
│       │                                                                    │
│       ▼                                                                    │
│  §9.1 OLS 基准回归 ─── 六步法第 1-2 步 / 假设诊断                          │
│       │                                                                    │
│       ▼                                                                    │
│  §9.2 面板数据 FE·RE ─── xtset / reghdfe / Hausman                        │
│       │                                                                    │
│       ▼                                                                    │
│  ┌────┴─────────────────────┐                                              │
│  │  三大识别策略(§9.3-§9.5)│                                              │
│  │  IV ─ DID ─ PSM/RDD     │                                              │
│  └────┬─────────────────────┘                                              │
│       │                                                                    │
│       ▼                                                                    │
│  §9.6 稳健性与异质性 ─── 规格曲线(S9.1 自证)                             │
│       │                                                                    │
│       ▼                                                                    │
│  §9.7 中介效应与机制 ─── Baron-Kenny / Sobel / Bootstrap                   │
│       │                                                                    │
│       ▼                                                                    │
│  §9.8 ABM 仿真实验(选修)─── 超越回归的反事实推演                          │
│                                                                            │
└────────────────────────────────────────────────────────────────────────────┘

节结构

标题教材对标核心方法
9.0GLM 统摄视角单元 15t 检验/ANOVA/回归同属 GLM;双组比较;2×2 因子设计
9.1OLS 基准回归单元 15reg / vce(robust) / vif / estat hettest / estat ovtest
9.2面板数据:FE 与 RExtset / reghdfe / hausman / BP-LM
9.3工具变量法(IV/2SLS)ivregress 2sls / estat firststage / 排他性
9.4双重差分法(DID)单元 15 因子设计did_multiplegt / eventstudyinteract / 平行趋势
9.5PSM 与 RDDpsmatch2 / teffects psmatch / rdrobust
9.6稳健性与异质性替换变量 / 子样本 / 规格曲线
9.7中介效应与机制检验sgmediation(Sobel + Bootstrap)
9.8ABM 仿真实验(选修)ODD 协议 / 四川水稻保险 ABM
合计

💡 本章在全书的位置

  • 承接第 8 章:第 8 章教你"数据体检做扎实,回归才跑得放心"——描述统计、缺失值处理、缩尾、变量转换。本章直接在这些"干净数据"上建模。
  • 回指第 4 章:每个识别策略(IV / DID / PSM / RDD / FE)都对应解决第 4 章七大效度威胁中的一条或多条。写论文时,你必须说清楚"我用 DID 是因为要解决选择偏差+历史效应"。
  • 对比第 10 章:本章走的是"回归路线"(What 型问题:X 对 Y 有没有因果效应?有多大?);第 10 章走的是"案例路线"(How 型问题:这个过程是怎样发生的?)。两条路线在第 4 章 §4.5"研究策略三分选型"已做铺垫。
  • 主例数据集bank_panel.dta(100 家上市银行 × 5 年面板),变量包括 roe(因变量)、sizeleveragegovernanceboard_sizebank_idyear。三方向副例:【金】资本结构决定因素 /【险】农业保险需求决定因素 /【农】微型金融贷款可得性。

§9.0 GLM 统摄视角

核心理念:t 检验、方差分析、回归——你以为它们是三种方法,其实它们是同一棵树上的三根枝。
对标教材:单元 15"一般线性模型"(qmd 第 1241–1255 行)+ "双组比较"(第 1257–1279 行)+ "因子设计"(第 1281–1287 行)


9.0.1 GLM 家族:t 检验 / ANOVA / 回归同源

教材告诉我们:

"社会科学研究中的大部分推断统计程序都来源于一组统计模型,叫做一般线性模型(general linear model,GLM)。"(qmd 第 1243 行)

GLM 的一般形式为:

y=β0+β1x1+β2x2++βnxn+ε

其中 β0 是截距,β1βn 是回归系数,ε 是误差项。关键在于:预测变量 xi 既可以是连续变量,也可以是虚拟变量(0/1 编码的定类变量)

教材第 1254 行进一步阐明了 GLM 的统摄性:

预测变量类型对应方法等价说法
一个虚拟变量(比较两组)方差分析(ANOVA) = t 检验reg y i.group 中 group 系数的 t 检验
虚拟变量 + 协变量协方差分析(ANCOVA)加了控制变量的 ANOVA
多个连续预测变量多元回归你熟悉的 OLS
多个结果变量多变量回归 / MANOVA方程组
一个方程的因变量是另一个方程的自变量结构方程模型(SEM)路径分析

一句话总结:GLM 是一个"超级框架",t 检验和 ANOVA 只是它在特定变量类型下的"别名"。


9.0.2 双组比较 = 最简单的回归

教材在"双组比较"一节中给出了关键等式(qmd 第 1278 行):

"效应规模或者 β₁ 就是实验组和对照组均值的差异 Δy = y₁ − y₂"

这意味着什么?当你的预测变量是一个 0/1 虚拟变量时:

  • t 检验问的是:两组均值差是否显著(p 值)?
  • 回归 reg y i.group 给出的是:β₁ = 均值差(效应规模)+ p 值(显著性)+ 置信区间

它们是完全等价的——回归系数 β₁ 恰好等于 t 检验中两组均值之差,回归输出的 t 统计量恰好等于独立样本 t 检验的 t 值。

这个认识的实际价值在于:当你以后做 DID(§9.4)时,"处理组前后差 − 对照组前后差"本质上就是一个交互项的回归系数——它的底层逻辑和双组比较的 t 检验完全一致。


9.0.3 2×2 因子设计与交互项

教材"因子设计"一节(qmd 第 1283–1285 行)给出了双因素 GLM:

y=β0+β1x1+β2x2+β3x1x2+ε

其中:

  • x1x2 是两个因子(均为虚拟变量)
  • β1β2主效应(每个因子的独立效应)
  • β3交互效应(两个因子的联合效应)

教材特别强调(qmd 第 1285 行):

"如果 β₃ 是显著的,那么意味着课程类型对学生表现的影响有赖于教学时间。我们就不能显著地解读出课程类型(β₁)或者教学时间(β₂)的独立效应,因为这两个效应不能被区分开来。只有当交互效应不显著的时候,主效应才能被解读出来。"

这对 DID 意味着什么? §9.4 中 DID 的核心回归方程是:

yit=β0+β1Treati+β2Postt+β3(Treati×Postt)+εit

这里的 β₃ 就是 2×2 因子设计的交互项——DID 估计量。而 β₁(处理组主效应)和 β₂(时间主效应)在 β₃ 显著时不应单独解读。这正是教材因子设计原理在因果推断中的直接应用。


9.0.4 模型设定的理论优先原则

教材在 GLM 一节末尾掷地有声地说(qmd 第 1255 行):

"模型设定应该基于对所研究的现象的理论思考,而不是什么模型能够最好地拟合观测数据。数据是用来验证模型的,而不是用来设定模型的。"

这句话直接对应本章诚信检查点 S9.1 不 p-hacking

理论优先(正确做法)数据驱动(红线行为)
先根据文献和理论确定因变量、核心自变量、控制变量先把所有变量扔进去,看哪个显著留哪个
先确定样本范围(如"沪深 A 股上市银行 2019–2023")事后剔除"异常值"直到结果显著
先确定一个主模型,再做稳健性检验跑了 20 个设定只报告显著的那一个
规格曲线展示所有合理设定下的结果分布隐瞒不显著的设定

操作建议:在动手跑回归之前,先在 do 文件开头用注释写清楚你的理论模型:

stata
* ══════════════════════════════════════════════════════════
* 理论模型(写代码前先确定,不得事后修改)
* ══════════════════════════════════════════════════════════
* 假说 H1:公司治理水平(governance)正向影响银行 ROE
* 因变量:roe
* 核心自变量:governance
* 控制变量:size(规模)、leverage(杠杆)、board_size(董事会规模)
* 理论依据:代理理论(Jensen & Meckling, 1976)
* 样本范围:沪深 A 股上市银行 2019-2023(100家×5年=500 obs)
* 识别策略:OLS 基准 + FE 稳健性(解决不随时间变的遗漏变量)
* ══════════════════════════════════════════════════════════

9.0.5 Stata 演示:t 检验 / ANOVA / 回归的等价性

下面用主例数据 bank_panel.dta 演示三种命令如何得到相同的结论:

stata
* ── 加载数据 ──
use data/clean/bank_panel.dta, clear

* 生成一个二值分组变量:governance 高于中位数为"高治理组"
qui sum governance, detail
gen hi_gov = (governance > r(p50))
label var hi_gov "高治理组(1) vs 低治理组(0)"

* ══════════════════════════════════════════════════════════
* 方法一:独立样本 t 检验
* ══════════════════════════════════════════════════════════
ttest roe, by(hi_gov)

* 输出解读:
*   mean(hi_gov=1) - mean(hi_gov=0) = 均值差 = β₁
*   t 统计量和 p 值判断是否显著
*   95% 置信区间 = 均值差的区间估计

* ══════════════════════════════════════════════════════════
* 方法二:单因素方差分析(ANOVA)
* ══════════════════════════════════════════════════════════
anova roe i.hi_gov

* 输出解读:
*   F 统计量 = t² (两组时 ANOVA 的 F 恰好等于 t 检验的 t 的平方)
*   p 值与 t 检验完全一致

* ══════════════════════════════════════════════════════════
* 方法三:OLS 回归(与 t 检验等价)
* ══════════════════════════════════════════════════════════
reg roe i.hi_gov

* 输出解读:
*   1.hi_gov 的系数 = 两组均值差(与 ttest 的 diff 完全相同)
*   t 统计量 = ttest 的 t 值
*   p 值 = ttest 的 p 值
*   R² = 组间方差 / 总方差(效应规模的另一种度量)

* ══════════════════════════════════════════════════════════
* 进阶:2×2 因子设计(等价于 DID 的结构)
* ══════════════════════════════════════════════════════════
* 假设我们还有"是否实施新监管政策"的变量 policy
gen post = (year >= 2021)
label var post "政策实施后(1) vs 实施前(0)"

* 双因素回归 = 2×2 因子设计的 GLM
reg roe i.hi_gov##i.post

* 输出解读:
*   1.hi_gov        → β₁ 主效应(治理水平的独立影响)
*   1.post          → β₂ 主效应(时间趋势)
*   1.hi_gov#1.post → β₃ 交互效应(= DID 估计量!)
*   如果 β₃ 显著 → 不能单独解读 β₁ 和 β₂
*   这正是教材 qmd 第 1285 行的原则在因果推断中的应用

等价性验证清单

比较维度ttestanovareg y i.group
效应规模均值差 diffβ₁ 系数
检验统计量tF = t²t
p 值✓(相同)✓(相同)✓(相同)
置信区间
可扩展性只能两组可多组可加控制变量/交互项

结论:当你学会了 reg,你其实已经掌握了 t 检验和 ANOVA。GLM 框架让你用一套命令应对从简单比较到复杂因果推断的所有场景。


9.0.6 三方向副例中的 GLM 思维

方向研究问题GLM 设定交互项含义
【金】资本结构公司治理是否影响杠杆率?reg leverage i.hi_gov size roe治理×规模:大公司的治理效应是否不同?
【险】农保需求风险厌恶是否影响投保决策?logit insure i.risk_averse income age风险厌恶×收入:高收入农户的风险厌恶效应更强?
【农】微型金融联保机制是否提高还款率?reg repay i.group_loan##i.rural联保×农村:联保在农村地区效果更突出?

📌 记住:无论你的方向是金融、保险还是农村经济,底层的统计逻辑都是 GLM。差异只在于因变量类型(连续 → OLS;二值 → Logit/Probit)、数据结构(截面/面板/时间序列)和识别策略(§9.1–§9.5)。

方法选型决策树(速查)

在进入 §9.1 之前,先花 5 分钟理解这棵决策树。它是本章所有章节的"导航地图"——每学完一个识别策略,回来看看它在树中的位置,你的方法论框架就会越来越清晰。

决策树原文

你的研究问题是因果推断吗?
├── 否 → 描述统计/相关分析(第 8 章)
└── 是 → 你有随机分组(实验)吗?
    ├── 是 → 真实验分析(t检验/ANOVA → §9.0 GLM)
    └── 否 → 观测数据(非实验/事后追溯)
        ├── 有外生冲击/政策变化?
        │   ├── 是 + 冲击前后两期 → DID(§9.4)
        │   └── 是 + 连续处理变量 → RDD(§9.5)
        ├── 有合适的工具变量?
        │   ├── 是 → IV/2SLS(§9.3)
        │   └── 否 → 有匹配对照组?
        │       ├── 是 → PSM(§9.5)
        │       └── 否 → 面板数据?
        │           ├── 是 → FE/RE(§9.2)
        │           └── 否 → OLS + 充分控制变量(§9.1)
        └── 以上均不满足 → 诚实地说"相关但无法确定因果"

如何使用这棵决策树

决策树的使用分三步:

第一步:确认你的研究问题类型。 如果你问的是"X 和 Y 有没有关系"(相关),第 8 章描述统计就够了。如果你问的是"X 是否导致了 Y"(因果),才需要往下走。

第二步:盘点你手里的"识别资源"。 依次检查:有没有外生政策冲击?有没有可用的工具变量?有没有可匹配的对照组?数据是面板还是截面?——你在第 5 章下载数据、第 6 章设计问卷时,就应该开始思考这些问题。

第三步:选择最"干净"的策略。 优先选择识别假设最少的策略(DID 需要平行趋势;IV 需要排他性;PSM 需要可观测对照;FE 只需要"遗漏变量不随时间变")。如果一个策略的假设在你的场景中不成立,退而求其次选下一个——但必须在论文中诚实讨论局限。


三层结构说明

┌──────────────────────────────────────────────────────┐
│  第一层:数据结构决定方法边界                          │
│                                                      │
│  截面数据 ─→ OLS / PSM / RDD / IV                    │
│  面板数据 ─→ FE / RE / DID / IV                      │
│  时间序列 ─→ ARIMA / VAR(本手册不展开,见附录 B)     │
│                                                      │
├──────────────────────────────────────────────────────┤
│  第二层:有内生性疑虑吗?                              │
│                                                      │
│  有 ─→ 需要识别策略:IV / DID / PSM / RDD             │
│  无 ─→ OLS 或 FE 已经足够                            │
│                                                      │
│  ⚠️ 判断"有无内生性"的依据:                           │
│     · 遗漏变量(理论上有重要因素未观测到)             │
│     · 反向因果(Y 也可能影响 X)                      │
│     · 测量误差(X 的度量不准确)                      │
│                                                      │
├──────────────────────────────────────────────────────┤
│  第三层:要解释机制吗?                               │
│                                                      │
│  要 ─→ 中介效应分析(§9.7)                           │
│  不要 ─→ 做好稳健性检验即可(§9.6)                   │
│                                                      │
│  💡 机制分析的前提:主效应已经显著且稳健               │
└──────────────────────────────────────────────────────┘

每个识别策略对应解决的效度威胁(回指第 4 章)

识别策略解决的效度威胁对应教材原理
FE(固定效应)不随时间变的遗漏变量组内变异消除个体异质性
IV(工具变量)遗漏变量偏误 / 反向因果外生变异通过工具传导
DID + 平行趋势历史效应 + 选择偏差2×2 因子设计的交互项(qmd 1284)
PSM选择偏差(可观测部分)构造"伪随机"对照组
RDD自选择的断点断点附近的局部随机化

写论文时,你必须在"研究设计"或"识别策略"段落中明确说出:"本文采用 XX 方法,以解决 XX 效度威胁"——这是答辩和审稿时评委必问的问题。

§9.1 OLS 基准回归(上):假设与诊断

核心理念:OLS 不只是一个命令,它是一套"契约"——你假设数据满足五个条件,Stata 才能保证系数无偏且有效。先诊断,后信任

9.1.1 OLS 五大经典假设(Gauss-Markov 条件)

在第 1 章你已经跑通了 reg roe size leverage governance board_size,但当时我们只关心"流程能走通"。现在正式问一个问题:凭什么相信这组系数?

答案是:凭五个假设全部成立。

编号假设名称数学表达直觉含义违反后果
A1线性于参数(y = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k + \varepsilon)模型对 β 是线性的(x 可以非线性变换)系数含义错误
A2随机抽样样本从总体中 i.i.d. 抽取每个观测相互独立、来自同一分布标准误失效、推断不可靠
A3无完全多重共线性解释变量之间不存在精确线性关系不能有某个 x 是其他 x 的完美线性组合Stata 自动 drop 变量
A4零条件均值(E(\varepsilon \mid x_1, \ldots, x_k) = 0)误差项与解释变量不相关(无内生性)系数有偏且不一致(最严重)
A5同方差(\text{Var}(\varepsilon \mid x) = \sigma^2)(常数)不管 x 取什么值,扰动项的波动幅度相同系数仍无偏,但标准误有偏 → 推断失效

💡 教材对接:单元 15 在讲 GLM 时强调——"数据是用来验证模型的,而不是用来设定模型的"。五大假设是你"设定模型"时的理论承诺;诊断检验是你"验证承诺"的数据面证据。

A4 为什么最严重?因为一旦 (E(\varepsilon|x) \neq 0)(遗漏变量、反向因果、测量误差),OLS 系数不仅这次错,样本再大也救不回来——这就是"不一致"的含义。第 9.3 节 IV 和第 9.2 节 FE 正是针对 A4 违反的两把手术刀。

9.1.2 异方差诊断

异方差(Heteroskedasticity)= A5 被违反。直觉上,大银行的 ROE 波动可能比小银行大——这就造成了"不同 x 值对应不同方差"。

stata
* ── 异方差诊断 ──
* 前提:刚跑完 reg(诊断命令必须在 reg 之后立即使用)
use "data/clean/bank_panel.dta", clear
reg roe size leverage governance board_size

* 方法 1:Breusch-Pagan 检验(BP 检验)
* 原假设 H0:同方差(残差方差与解释变量无关)
estat hettest
* 输出解读:
*   chi2(4) = XX.XX, Prob > chi2 = 0.XXXX
*   判读规则:p < 0.05 → 拒绝同方差原假设 → 存在异方差 → 需用稳健标准误

* 方法 2:White 检验(更一般,允许残差平方与 x 的非线性函数相关)
estat imtest, white
* 输出解读:
*   H0: Homoskedasticity vs. H1: Unrestricted heteroskedasticity
*   LM-stat = XX.XX, p-value = 0.XXXX
*   判读规则:p < 0.05 → 存在异方差

* ── 如果确认存在异方差,修正方案 ──
reg roe size leverage governance board_size, vce(robust)
* vce(robust) = Huber-White 稳健标准误
* 系数不变,标准误修正 → t 值和 p 值可能变化

判断标准

检验结果结论下一步
BP 和 White 均 p > 0.10未发现异方差证据报告经典标准误即可
任一 p < 0.05存在异方差必须用 vce(robust) 重跑(详见 §9.1 下半)
0.05 < p < 0.10边界情况建议保守处理:用稳健标准误并在脚注说明

9.1.3 多重共线性诊断

多重共线性 = 解释变量之间高度相关(如 size 和 leverage 在大银行中往往同方向变化)。它不导致系数有偏,但让标准误膨胀 → 显著性下降 → "明明该显著的变量变得不显著"。

stata
* ── 多重共线性诊断 ──
* 必须在 reg 之后使用
estat vif
* 输出解读:
*   Variable |      VIF        1/VIF
*   ---------+----------------------
*   size     |     X.XX        0.XXXX
*   leverage |     X.XX        0.XXXX
*   ...
*   Mean VIF |     X.XX
*
* 判读规则(经验法则):
*   VIF > 10  → 该变量存在严重共线性,需警惕
*   VIF > 5   → 中度共线性,关注但不必恐慌
*   VIF < 5   → 安全
*   Mean VIF > 3 → 模型整体共线性偏高

* ── 简单相关矩阵辅助判断 ──
correlate size leverage governance board_size
* 任何两个变量 |r| > 0.8 时,对应的 VIF 通常会 > 5

处理策略(按优先级排列):

  1. 不处理:如果核心变量系数方向和显著性未变,共线性只是让"锦上添花"的控制变量不显著——如实报告即可
  2. 减少冗余变量:去掉 VIF 最高且理论上最不必要的变量
  3. 合并变量:如多个指标衡量同一构念,用因子得分或均值合成(回指第 5 章 §5.4)
  4. 增大样本:共线性是"信息不足"的表现,更多数据有助于区分

9.1.4 模型设定误差(RESET 检验)

RESET 检验(Regression Equation Specification Error Test)回答一个根本问题:你的线性模型设定对吗?是否遗漏了重要的非线性项或交互项?

stata
* ── RESET 检验(Ramsey 1969)──
estat ovtest
* 原假设 H0:模型设定正确(无遗漏的高次项)
* 备择 H1:模型存在设定误差
*
* 输出解读:
*   F(3, 495) = X.XX
*   Prob > F =    0.XXXX
*   判读规则:p < 0.05 → 拒绝 H0 → 存在模型设定问题
*
* 原理:在模型中加入 ŷ² 和 ŷ³ 作为额外回归元,
*       检验这些项是否联合显著。如果显著,说明原来的
*       线性设定不够,可能存在遗漏的非线性关系。

* ── 如果 RESET 拒绝,怎么办?──
* 策略 1:加入二次项
gen size_sq = size * size
reg roe size size_sq leverage governance board_size

* 策略 2:加入遗漏的交互项
gen gov_size = governance * size
reg roe size leverage governance board_size gov_size

* 策略 3:对因变量取对数(如果经济含义允许)
gen ln_roe = ln(roe) if roe > 0
reg ln_roe size leverage governance board_size

9.1.5 四大诊断的完整工作流

把上面三个诊断整合成一个标准流程——以后每次跑完基准回归都照着走一遍:

stata
* ══════════════════════════════════════════════════════
* §9.1 完整诊断流程模板(基于 bank_panel.dta)
* ══════════════════════════════════════════════════════
use "data/clean/bank_panel.dta", clear

* Step 1:基准回归
reg roe size leverage governance board_size
estimates store m1_baseline

* Step 2:异方差诊断
estat hettest           // BP 检验
estat imtest, white     // White 检验
* → 记录 p 值,决定是否需要 vce(robust)

* Step 3:多重共线性诊断
estat vif
* → 记录 Mean VIF 和各变量 VIF

* Step 4:模型设定诊断
estat ovtest
* → p < 0.05 则需要考虑加非线性项

* Step 5:根据诊断结果修正
reg roe size leverage governance board_size, vce(robust)
estimates store m1_robust

* Step 6:对照表输出
esttab m1_baseline m1_robust using "output/diagnosis_comparison.rtf", ///
    replace b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
    title("表:OLS基准回归诊断对照") ///
    mtitles("经典标准误" "稳健标准误") ///
    stats(N r2, labels("观测数" "R²"))

诊断结果速查表

诊断命令检验的假设原假设 H₀p < 0.05 意味着修正方案
estat hettestA5 同方差残差方差恒定存在异方差vce(robust)
estat imtest, whiteA5 同方差残差方差恒定存在异方差vce(robust)
estat vifA3 无共线性变量间无线性相关VIF > 10 严重共线删变量 / 合并
estat ovtestA1 线性设定模型设定正确遗漏非线性 / 交互项加高次项或交互项

⚠️ 诚信提醒(S9.1 前置):诊断结果不好时,正确做法是修正模型如实报告局限,绝不是"反复换变量组合直到诊断全过"。后者是 p-hacking 的变体。

§9.1 OLS 基准回归(下):六步法第 1-2 步

核心理念:稳健标准误不是"锦上添花",而是发表期刊的最低门槛。掌握六步法全景,才知道自己现在走到了哪一步。

9.1.5 稳健标准误:从"能用"到"能发表"

上一节诊断完异方差后,修正方案就是 vce(robust)。但你还需要知道:面板数据中,同一个银行不同年份的观测值不独立(组内自相关),此时需要更强力的修正——聚类稳健标准误

stata
* ── 三种标准误对比 ──
use "data/clean/bank_panel.dta", clear

* 方案 A:经典标准误(假设 A5 同方差 + A2 独立)
reg roe size leverage governance board_size
* 输出中标注:(无特殊标注 = 经典标准误)

* 方案 B:异方差稳健标准误(Huber-White,放松 A5)
reg roe size leverage governance board_size, vce(robust)
* 输出中标注:Std. errs. robust to heteroskedasticity

* 方案 C:聚类稳健标准误(放松 A5 + A2 组内相关)
reg roe size leverage governance board_size, vce(cluster bank_id)
* 输出中标注:Std. errs. adjusted for clustering on bank_id
* 含义:允许同一家银行内部的残差相互关联
* 适用场景:面板数据 / 重复截面按地区分组 / 多观测嵌套于个体

* ── 经验法则 ──
* 1. 截面数据 + 不确定是否同方差 → vce(robust) 总是安全的
* 2. 面板数据 → vce(cluster 个体ID) 是最低要求
* 3. 聚类数 G < 50 → 考虑 wild cluster bootstrap(进阶,暂不展开)

三种标准误的选择决策

数据结构推荐标准误Stata 语法理由
截面(每观测独立)稳健vce(robust)防异方差
面板(同个体多期)聚类vce(cluster bank_id)组内残差自相关
面板 + 时间冲击相关双向聚类reghdfe ..., vce(cluster bank_id year)个体+时间双重相关

9.1.6 stata-mcp 六步法概览

六步法是本手册实证分析的总纲——从描述到结论,每一步都有明确的 Stata 命令和产出物。第 9 章 §9.1—§9.7 恰好对应这六步:

┌────────────────────────────────────────────────────────────────┐
│            stata-mcp 六步法(实证分析全流程)                    │
├────────────────────────────────────────────────────────────────┤
│                                                                │
│  Step 1 · 描述统计                                             │
│  ─────────────────                                             │
│  §8.2 数据体检 + §8.3-8.4 一元/双变量分析                      │
│  命令:summarize / tab / correlate / winsor2                    │
│  产出:Table 1(描述统计表)                                    │
│                              ↓                                  │
│  Step 2 · 基准回归                                             │
│  ─────────────────                                             │
│  §9.1 OLS + 诊断 + 稳健标准误 ← 你现在在这里                  │
│  命令:reg / vce(robust) / estat hettest / vif / ovtest         │
│  产出:Table 2(基准回归表,含诊断结果脚注)                    │
│                              ↓                                  │
│  Step 3 · 内生性处理                                           │
│  ─────────────────                                             │
│  §9.2 面板 FE/RE + §9.3 IV/2SLS + §9.4 DID + §9.5 PSM/RDD    │
│  命令:xtreg / reghdfe / ivregress / did_multiplegt / psmatch2  │
│  产出:Table 3-5(识别策略结果表)                              │
│                              ↓                                  │
│  Step 4 · 稳健性检验                                           │
│  ─────────────────                                             │
│  §9.6 替换变量 + 子样本 + 规格曲线                              │
│  命令:reghdfe(换变量/换样本重跑)                             │
│  产出:Table 6(稳健性检验对照表)                              │
│                              ↓                                  │
│  Step 5 · 机制/中介                                            │
│  ─────────────────                                             │
│  §9.7 Baron-Kenny + Sobel + Bootstrap                          │
│  命令:sgmediation / bootstrap                                  │
│  产出:Table 7(中介效应三步表)+ 机制图                        │
│                              ↓                                  │
│  Step 6 · 异质性分析                                           │
│  ─────────────────                                             │
│  §9.6 分组回归 + 交乘项                                        │
│  命令:bysort + reghdfe / gen interaction + reg                 │
│  产出:Table 8(异质性分组表)                                  │
│                                                                │
└────────────────────────────────────────────────────────────────┘

💡 AI 辅助提示:使用 stata-mcp 时,你可以把诊断输出贴给 AI 问"这组结果有哪些潜在问题"——这是 S9.4 允许的合法用途(AI 解释输出,不生成系数)。

9.1.7 三方向副例:OLS 基准回归在你方向的变体

主例用的是银行 ROE 面板数据。你的研究方向不同,但六步法的逻辑完全一样——只需替换变量。以下是三个方向的基准回归设定参考:

【金】资本结构决定因素

研究问题:公司特征如何影响资本结构(资产负债率)?三大理论假说的回归检验。

stata
* ── 【金】资本结构基准回归 ──
* 理论假说:
*   权衡理论 → 盈利能力强(roe↑) → 负债率↓(内源融资优先)
*   优序融资 → 盈利能力强(roe↑) → 负债率↓(同方向,但机制不同)
*   市场择时 → 市值账面比(mtb↑) → 负债率↓(股价高时倾向股权融资)
*
* 变量:lev(资产负债率)= β₀ + β₁·size + β₂·roe + β₃·mtb + β₄·tangibility + ε
reg lev size roe mtb tangibility, vce(robust)
estat hettest
estat vif

【险】农业保险需求决定因素

研究问题:农户特征如何影响农业保险参与决策?

stata
* ── 【险】农业保险需求(因变量连续:保费支出/保额比)──
* 理论假说:
*   风险厌恶(risk_aversion↑) → 投保意愿↑
*   损失厌恶(loss_aversion↑) → 对保险的需求↑
*   收入(income↑) → 支付能力↑ → 投保↑
*
* 变量:ins_premium = β₀ + β₁·risk_aversion + β₂·loss_aversion + β₃·income + β₄·farm_size + ε
reg ins_premium risk_aversion loss_aversion income farm_size, vce(robust)
estat hettest
estat vif
* 注:如果因变量是 0/1(是否投保),则应改用 logit/probit(教材单元 15 §15.5)

【农】微型金融贷款可得性

研究问题:联合责任机制和动态激励如何影响农户贷款可得性?

stata
* ── 【农】微型金融贷款可得性 ──
* 理论假说:
*   联合责任(group_loan=1) → 贷款可得性↑(同伴监督降低违约率)
*   动态激励(repeat_borrower) → 贷款额度↑(声誉效应)
*
* 变量:loan_access = β₀ + β₁·group_loan + β₂·repeat_borrower + β₃·income + β₄·education + ε
reg loan_access group_loan repeat_borrower income education, vce(robust)
estat hettest
estat vif
estat ovtest

🖐️ 跟做练习 1

目标:独立跑通"基准回归 + 四大诊断 + 稳健标准误"全流程,并用自己的话写出判读结论。

操作步骤

  1. 打开你的研究文件夹,确认 data/clean/bank_panel.dta 存在(如不存在,从第 1 章 §1.4 重新生成)
  2. 新建 do 文件 code/ch09_exercise1_ols_diagnosis.do
  3. 依次完成以下六步:
    • Step A:use "data/clean/bank_panel.dta", clear
    • Step B:reg roe size leverage governance board_size(基准 OLS)
    • Step C:estat hettest + estat imtest, white(异方差诊断)→ 记录 p 值,写出判断
    • Step D:estat vif(共线性诊断)→ 记录 Mean VIF,写出判断
    • Step E:estat ovtest(设定误差诊断)→ 记录 p 值,写出判断
    • Step F:reg roe size leverage governance board_size, vce(robust)(稳健标准误)→ 对比 Step B 和 Step F 的标准误变化
  4. 在 do 文件末尾用 * 结论: 注释写出 3-5 句诊断总结
  5. 运行 do 文件,保存 log 到 output/ch09_ex1.log

自查清单

  • [ ] 四项诊断的 p 值你都记录了吗?
  • [ ] 你能说出"p < 0.05 时应该做什么"吗?
  • [ ] 经典标准误与稳健标准误的差别大吗?如果差别大,说明什么?
  • [ ] log 文件是否完整(从 use 到最后一行命令)?

⚠️ S9.4 提醒:这一步的所有系数、标准误、p 值必须来自你自己的 Stata 运行输出。如果你让 AI "帮我编一组回归结果"——那就是学术造假。AI 的合法用途是帮你写代码、解释输出。

§9.2 面板数据:FE 与 RE

核心理念:面板数据的价值在于——它让你能控制住那些观测不到、但不随时间变化的遗漏变量。这是 OLS 做不到的。固定效应(FE)解决的正是第 4 章七大效度威胁中的"不随时间变的遗漏变量"问题。

9.2.1 什么是面板数据?为什么要用面板?

面板数据(Panel Data)= 同一个体在多个时间点被重复观测。本手册主例 bank_panel.dta 就是 100 家银行 × 5 年(2020—2024)= 500 条观测的面板。

stata
* ── 声明面板数据结构 ──
use "data/clean/bank_panel.dta", clear
xtset bank_id year
* 输出解读:
*   panel variable:  bank_id (strongly balanced)
*   time variable:   year
*   series:          2020 2021 2022 2023 2024
*   delta:           1 unit
*
* "strongly balanced" = 每个银行都有完整 5 年数据(无缺失期)
* 如果出现 "weakly balanced" = 某些个体在某些年份缺失

* 确认数据结构
xtdescribe
* 展示面板的个体数、时间跨度、是否平衡

为什么面板比纯截面好?

数据类型能控制的遗漏变量不能控制的遗漏变量
截面(cross-section)可观测变量(放入回归)所有不可观测变量
面板 + FE可观测变量 + 不随时间变的不可观测变量随时间变化的不可观测变量
面板 + FE + 时间效应上述 + 不随个体变的时间冲击既随时间又随个体变的遗漏

💡 与第 4 章的对接:第 4 章列出内部效度七大威胁——历史 / 成熟 / 测验效应 / 仪器变化 / 统计回归 / 选择偏差 / 样本流失。FE 主要解决的是**选择偏差中"不随时间变的遗漏变量"**这一子类(例如:银行的企业文化、所在地区的金融生态——你观测不到它们,但它们 5 年内基本不变)。

9.2.2 组内估计(Within/FE)vs GLS 随机效应(RE)

固定效应(FE)的核心思路:对每个变量减去其个体均值(去均值化),从而消灭所有不随时间变化的个体特征——无论你是否观测到它们。

yity¯i=β1(x1itx¯1i)++(εitε¯i)

随机效应(RE)的核心思路:假设个体效应 (u_i) 与解释变量不相关((E(u_i|x_{it}) = 0)),用 GLS 加权平均组内和组间信息,比 FE 更高效(标准误更小)。

维度FE(固定效应)RE(随机效应)
关键假设个体效应与解释变量可以相关个体效应与解释变量不相关
估计方法组内去均值后 OLSGLS(利用组内+组间信息)
效率较低(只用组内变异)较高(信息利用更充分)
一致性假设更弱,几乎总是一致假设强,若违反则不一致
能估计不随时间变的变量吗?❌ 不能(被去均值消除了)✅ 能
适用场景不确定个体效应是否与 x 相关时有理论依据支持个体效应与 x 无关时
stata
* ── FE 与 RE 估计(沿用第 1 章 bank_roe 三模型)──
xtset bank_id year

* 模型 2:固定效应(FE)
xtreg roe size leverage governance board_size, fe
estimates store m2_fe
* 输出关键指标:
*   R-sq: within = 0.XXX  ← 组内解释力(FE 的核心指标)
*   F test that all u_i=0: F(99, 396) = XX.XX, Prob > F = 0.0000
*   → p < 0.05 说明个体效应整体显著,FE 比混合 OLS 合适

* 模型 3:随机效应(RE)
xtreg roe size leverage governance board_size, re
estimates store m3_re
* 输出关键指标:
*   corr(u_i, X) = 0  ← RE 假设该值为 0
*   sigma_u / sigma_e 比例 ← 个体效应占总方差的比例

9.2.3 Hausman 检验:FE 还是 RE?

Hausman 检验是FE vs RE 的裁判——它检验的核心问题是:个体效应 (u_i) 是否与解释变量相关?

stata
* ── Hausman 检验 ──
hausman m2_fe m3_re
* 原假设 H0:FE 和 RE 的系数差异不系统(即个体效应与 x 不相关 → RE 一致且高效)
* 备择 H1:差异系统(个体效应与 x 相关 → RE 不一致 → 必须用 FE)
*
* 输出解读:
*   chi2(4) = (b-B)'[(V_b-V_B)^(-1)](b-B) = XX.XX
*   Prob > chi2 = 0.XXXX
*
* 判读规则:
*   p < 0.05 → 拒绝 H0 → 选 FE(个体效应与解释变量相关,RE 有偏)
*   p > 0.05 → 不拒绝 H0 → 选 RE(更高效且无偏)
*   p ≈ 0.05(边界)→ 保守起见选 FE

* ── Hausman 检验的注意事项 ──
* 1. 必须先 estimates store 两个模型的结果
* 2. 如果 Hausman 报 "not positive definite" → 通常意味着 RE 有问题,直接选 FE
* 3. Hausman 检验的前提是 FE 本身一致——如果 FE 也不一致(如存在时变遗漏变量),
*    Hausman 结果无意义 → 需要 IV/DID 等更强识别策略(§9.3-§9.4)

Hausman 检验决策表

Hausman p 值结论选择理由
p < 0.01强烈拒绝 H₀FE个体效应与 x 高度相关
0.01 ≤ p < 0.05拒绝 H₀FE存在相关性,RE 不一致
0.05 ≤ p < 0.10边界FE(保守)宁可牺牲效率也要一致性
p ≥ 0.10不拒绝 H₀RE未发现相关性证据,RE 更高效

9.2.4 BP-LM 检验:RE 还是混合 OLS?

Hausman 回答了"FE vs RE"。但还有一个前置问题:RE 比不用面板信息(混合 OLS)更好吗? Breusch-Pagan Lagrange Multiplier 检验回答这个问题。

stata
* ── BP-LM 检验(需要先安装 xttest0)──
* ssc install xttest0    // 首次使用需安装

* 先跑 RE 模型
xtreg roe size leverage governance board_size, re

* BP-LM 检验
xttest0
* 原假设 H0:σ²_u = 0(无个体效应 → 混合 OLS 即可)
* 备择 H1:σ²_u > 0(存在个体效应 → RE 或 FE 优于混合 OLS)
*
* 输出解读:
*   Breusch and Pagan Lagrangian Multiplier Test for random effects
*   chibar2(01) = XX.XX
*   Prob > chibar2 = 0.XXXX
*
* 判读规则:
*   p < 0.05 → 存在显著个体效应 → RE/FE 优于混合 OLS
*   p > 0.05 → 个体效应不显著 → 混合 OLS 足够

完整的面板模型选择流程

Step 1: 混合 OLS vs RE → BP-LM 检验(xttest0)
        ├── p > 0.05 → 用混合 OLS(无面板效应)
        └── p < 0.05 → 进入 Step 2

Step 2: FE vs RE → Hausman 检验
        ├── p < 0.05 → 用 FE
        └── p > 0.05 → 用 RE

9.2.5 reghdfe:高维固定效应的高效实现

当面板数据量大(如 100 家银行 × 5 年 = 500 obs 还好,但 3000 家企业 × 10 年 = 30000 obs)时,传统 xtreg, fe 计算速度慢。reghdfe 是社区开发的高效替代,还能同时吸收多维固定效应。

stata
* ── reghdfe 高维固定效应 ──
* ssc install reghdfe    // 首次使用需安装
* ssc install ftools     // reghdfe 依赖 ftools

* 基本用法(等价于 xtreg, fe 但更快)
reghdfe roe size leverage governance board_size, absorb(bank_id) vce(cluster bank_id)
* absorb(bank_id) = 吸收银行个体固定效应
* vce(cluster bank_id) = 聚类稳健标准误

* reghdfe vs xtreg 结果对比(应该完全一致)
xtreg roe size leverage governance board_size, fe vce(cluster bank_id)
* → 对比系数和标准误,验证两种实现等价

* reghdfe 的优势:
*   1. 速度:大样本比 xtreg 快 10-100 倍
*   2. 多维 FE:可同时吸收多个固定效应维度
*   3. 灵活:支持 partial out 后的 F 检验

9.2.6 双向固定效应(个体 + 时间)

现实中,不仅银行之间有不同的"先天条件"(个体效应),不同年份也有共同的宏观冲击(时间效应,如 2020 年疫情、2023 年利率下调)。双向固定效应同时控制两者。

stata
* ── 双向固定效应 ──
* 方法 1:reghdfe 直接吸收(推荐,最简洁)
reghdfe roe size leverage governance board_size, ///
    absorb(bank_id year) vce(cluster bank_id)
estimates store m4_twoway

* absorb(bank_id year) = 同时吸收个体FE和时间FE
* 含义:每家银行有自己的截距,每年也有自己的截距
* → 消除了"不随时间变的个体特征" + "不随个体变的时间冲击"

* 方法 2:xtreg + 年份虚拟变量(等价但写法不同)
tab year, gen(yr_d)
xtreg roe size leverage governance board_size yr_d2-yr_d5, fe vce(cluster bank_id)
* yr_d2-yr_d5 = 2021-2024年的虚拟变量(以2020为基准年)

* ── 双向FE vs 单向FE 的 F 检验 ──
* 问题:时间效应是否必要?
* reghdfe 自动报告 "Absorbed degrees of freedom" 和各维度的 F 检验
* 如果时间维度的 F 检验 p < 0.05 → 时间效应显著 → 双向FE合理

* ── 三模型 + 双向FE 完整对照表 ──
esttab m1_ols m2_fe m3_re m4_twoway using "output/panel_model_comparison.rtf", ///
    replace b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
    title("表:银行ROE影响因素——四种模型对照") ///
    mtitles("混合OLS" "FE" "RE" "双向FE") ///
    stats(N r2 r2_w, labels("观测数" "R²" "Within R²")) ///
    note("标准误聚类于银行层面;* p<0.10, ** p<0.05, *** p<0.01")

与第 4 章效度威胁的完整对接

模型控制的效度威胁(第 4 章)不能控制的
混合 OLS仅可观测变量所有不可观测因素
FE(个体)不随时间变的遗漏变量(如银行文化、地域特征)随时间变化的遗漏(如管理能力变动)
双向 FE(个体+时间)上述 + 不随个体变的时间冲击(如宏观政策)既随时间又随个体变的遗漏(如银行特定的行业趋势)
IV(§9.3)遗漏变量 + 反向因果依赖工具变量的有效性
DID(§9.4)历史效应 + 选择偏差依赖平行趋势假设

9.2.7 面板分析完整工作流(模板)

stata
* ══════════════════════════════════════════════════════
* §9.2 面板分析完整流程模板
* ══════════════════════════════════════════════════════
clear all
set more off
capture log close
log using "output/ch09_panel_analysis.log", replace

use "data/clean/bank_panel.dta", clear

* Step 1:声明面板结构
xtset bank_id year
xtdescribe

* Step 2:混合 OLS(基准)
reg roe size leverage governance board_size, vce(cluster bank_id)
estimates store m1_ols

* Step 3:BP-LM 检验(RE vs 混合 OLS)
xtreg roe size leverage governance board_size, re
xttest0
* → p < 0.05? 如果是,面板方法优于混合 OLS

* Step 4:FE 估计
xtreg roe size leverage governance board_size, fe
estimates store m2_fe

* Step 5:RE 估计
xtreg roe size leverage governance board_size, re
estimates store m3_re

* Step 6:Hausman 检验(FE vs RE)
hausman m2_fe m3_re
* → p < 0.05? 如果是,选 FE

* Step 7:双向固定效应
reghdfe roe size leverage governance board_size, ///
    absorb(bank_id year) vce(cluster bank_id)
estimates store m4_twoway

* Step 8:输出对照表
esttab m1_ols m2_fe m3_re m4_twoway using "output/panel_four_models.rtf", ///
    replace b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
    title("银行ROE影响因素:面板模型对照") ///
    mtitles("混合OLS" "FE" "RE" "双向FE") ///
    stats(N r2 r2_w, labels("观测数" "R²" "Within R²"))

log close
display "=== 面板分析完成 ==="

🖐️ 跟做练习 2

目标:独立完成面板模型选择全流程(BP-LM → Hausman → 双向 FE),并写出模型选择的判断依据。

操作步骤

  1. 新建 do 文件 code/ch09_exercise2_panel.do
  2. 按 §9.2.7 模板完成 Step 1—Step 8
  3. 在代码中用注释记录以下判断:
    • BP-LM 的 p 值是多少?→ 结论是什么?
    • Hausman 的 p 值是多少?→ 选 FE 还是 RE?
    • 双向 FE 与单向 FE 的系数变化大吗?→ 时间效应是否重要?
  4. 运行 do 文件,确认 output/panel_four_models.rtf 已生成
  5. 打开 RTF 文件,检查四列系数是否合理(方向一致、量级相近)

进阶挑战(选做)

  • 把主例换成你自己的数据(如第 6 章下载的宏观面板),重复整个流程
  • 思考:如果你的 Hausman 检验 p = 0.03(刚好 < 0.05),你会怎么选?为什么?

自查清单

  • [ ] xtset 输出的 "strongly balanced" 还是 "weakly balanced"?你知道差别吗?
  • [ ] FE 的 Within R² 通常比混合 OLS 的 R² 低——这是正常的吗?为什么?
  • [ ] 你的 Hausman 检验结论与第 1 章 §1.4 跑的结果一致吗?
  • [ ] 双向 FE 中 absorb(bank_id year) 吸收了 100 + 5 - 1 = 104 个参数——这对自由度有什么影响?

⚠️ S9.4 提醒:面板分析的所有系数、Hausman 统计量、BP-LM 值必须来自你自己的 Stata 运行。AI 可以帮你理解"为什么选 FE",但不能替你"编一个 Hausman p 值"。

§9.3 工具变量法(IV/2SLS)

核心理念:当解释变量与误差项相关(内生性)时,OLS 估计有偏且不一致。工具变量法的核心思想是——找到一个"外生推手",它只通过影响内生变量来间接影响结果变量,从而把内生变量中"干净"的部分分离出来。

9.3.1 内生性的三大来源

在 §9.1 的 OLS 五大经典假设中,我们要求 E(ε|X) = 0——即解释变量与误差项不相关。当这个假设被违反时,就出现了内生性(endogeneity)。三大来源:

来源机制金融例子后果
遗漏变量偏误同时影响 X 和 Y 的变量未被纳入模型银行管理层能力同时影响治理水平(governance)和盈利能力(roe),但"能力"无法观测β̂ 有偏且不一致
反向因果Y 反过来影响 X盈利好的银行有更多资源改善治理 → 治理好;但治理好也促进盈利 → 双向因果β̂ 有偏且不一致
测量误差X 的度量包含噪声问卷自评"金融素养"得分有系统性偏差β̂ 衰减偏误(attenuation bias)

📌 判断内生性的经验法则:如果你的核心解释变量是"行为"(如投保、贷款、参加培训)或"制度特征"(如治理水平、股权结构),几乎一定有内生性——因为选择和行为本身就是非随机的。

9.3.2 有效工具变量的两大条件

一个合格的工具变量 Z 必须同时满足:

text
条件 1:相关性(Relevance)
   Z 与内生变量 X 显著相关
   → 可检验:第一阶段 F 统计量 > 10(Stock & Yogo, 2005)

条件 2:排他性约束(Exclusion Restriction)
   Z 只通过 X 影响 Y,不能有直接影响 Y 的其他路径
   → 不可检验!只能靠经济理论和制度逻辑论证

图形化理解

text
         Z(工具变量)

         │ ① Z → X(相关性:可检验)

    X(内生变量)──────→ Y(结果变量)
         ▲               ▲
         │               │
         └─── U ─────────┘  ② 遗漏变量 U 同时影响 X 和 Y(内生性来源)

   排他性约束:Z 到 Y 没有除了经过 X 之外的箭头(即 Z ⊥ U)

9.3.3 两阶段最小二乘法(2SLS)的 Stata 实现

主例:研究公司治理(governance)对银行盈利能力(roe)的影响。我们担心 governance 是内生的(遗漏变量 + 反向因果),使用同行业其他银行的平均治理水平(industry_avg_governance)作为工具变量。

IV 的逻辑:同行业其他银行的平均治理水平与本研究银行的治理水平相关(行业示范效应、监管标准趋同),但不会直接影响本银行的 ROE(排他性约束:其他银行的治理水平只通过"行业规范压力"影响本行治理,而不直接影响本行利润)。

stata
* ── §9.3 IV/2SLS 完整流程 ──
* 数据:bank_panel.dta(100家上市银行×5年面板)
use data/clean/bank_panel.dta, clear
xtset bank_id year

* 第一步:OLS 基准(作为对比)
reg roe size leverage governance board_size, vce(cluster bank_id)
est store m1_ols

* 第二步:2SLS 估计
* 语法:ivregress 2sls 因变量 外生变量列表 (内生变量 = 工具变量), 选项
ivregress 2sls roe size leverage board_size ///
    (governance = industry_avg_governance), ///
    vce(cluster bank_id)
est store m2_iv

* 输出解读:
*   governance 的 IV 系数 = 利用工具变量"提纯"后的因果效应估计
*   若 IV 系数 > OLS 系数 → OLS 可能低估了治理的因果效应(衰减偏误或反向因果稀释)
*   若 IV 系数 < OLS 系数 → OLS 可能高估(遗漏变量正向偏误)

9.3.4 弱工具变量检验:第一阶段 F 统计量

stata
* ── 第一阶段诊断 ──
estat firststage

* 输出解读:
*   关注 F 统计量(Kleibergen-Paap rk Wald F statistic)
*   判读规则:
*     F ≥ 10  → 非弱工具变量,2SLS 估计可信(Stock & Yogo 临界值)
*     F < 10  → 弱工具变量!2SLS 估计可能有严重偏误,甚至比 OLS 更差
*
*   示例输出:
*   Kleibergen-Paap rk Wald F statistic = 15.32
*   判读:F = 15.32 > 10 → 非弱工具,可以信赖 2SLS 结果
*
*   若 F = 3.8 < 10:
*   → 工具变量与内生变量的相关性太弱
*   → 需要换一个更强的工具变量,或放弃 IV 策略

弱工具变量的后果(务必理解):

第一阶段 F后果应对
F > 10正常,2SLS 一致且近似正态直接报告
5 < F < 10灰色地带,可能有有限样本偏误补充报告 Anderson-Rubin 置信区间
F < 5严重弱工具,2SLS 可能比 OLS 更糟放弃该 IV,另寻工具变量

9.3.5 过度识别检验(Sargan / Hansen J)

当你有多个工具变量时(工具变量数 > 内生变量数),可以检验"多余的工具变量是否满足排他性约束":

stata
* ── 过度识别检验(使用两个工具变量) ──
ivregress 2sls roe size leverage board_size ///
    (governance = industry_avg_governance regulatory_pressure), ///
    vce(cluster bank_id)

* Hansen J 检验(异方差稳健版,优先使用)
estat overid

* 输出解读:
*   H0:所有工具变量均满足排他性约束(即过度识别约束有效)
*   p > 0.05 → 不能拒绝 H0 → 工具变量整体可接受
*   p < 0.05 → 拒绝 H0 → 至少有一个工具变量不满足排他性,需要逐一排查
*
*   示例:Hansen J chi2(1) = 0.82, p = 0.365
*   判读:p = 0.365 > 0.05 → 过度识别约束不被拒绝,两个 IV 整体有效

⚠️ 注意:当工具变量数 = 内生变量数时(恰好识别,just-identified),过度识别检验不可用——此时排他性约束完全无法被统计检验,只能靠经济逻辑论证。

9.3.6 金融学常用工具变量举例

IV 类型具体变量适用场景排他性论证思路
行业/地区均值同行业其他企业的平均 X企业层面内生变量(治理、杠杆、研发投入)其他企业的特征不直接影响本企业结果
政策冲击政策试点的批次/时间差异政策评估(数字金融试点、绿色信贷政策)批次分配由行政因素决定,与企业绩效无直接关联
地理变量到金融中心距离、海拔、河流密度金融可得性、保险覆盖地理是"天然的",不受个体行为影响
历史变量历史上的金融基础设施(如民国钱庄数量)当前金融发展水平历史变量通过路径依赖影响当前制度,但不直接影响当前个体结果
制度变量法律起源、监管框架差异跨国/跨地区比较制度由历史决定,不由个体企业选择

💡 AI 辅助研究提示:你可以把研究假设贴给 AI 问"这个场景可能的工具变量有哪些?排他性约束是否合理?"——但最终的 IV 选择和论证是你的学术判断,不能外包给 AI(S9.4 红线)。

🖐️ 跟做练习 3

任务:用 bank_panel.dta 完成 IV/2SLS 全流程并诊断。

  1. 打开数据并设定面板:use data/clean/bank_panel.dta, clear + xtset bank_id year
  2. 运行 OLS 基准:reg roe size leverage governance board_size, vce(cluster bank_id),记录 governance 系数
  3. 运行 2SLS:ivregress 2sls roe size leverage board_size (governance = industry_avg_governance), vce(cluster bank_id)
  4. 检验弱工具变量:estat firststage,记录 F 值并判断是否 > 10
  5. 对比 OLS 与 IV 系数:governance 的系数变大还是变小?尝试解释方向
  6. (进阶)如果你能找到第二个工具变量,加入后运行 estat overid,解读 Hansen J 的 p 值

🔗 回指第4章效度威胁

第 4 章 §4.2 定义了七大内部效度威胁。工具变量法主要解决以下威胁

第4章效度威胁IV 如何应对
选择偏差(Selection)当"参与"是非随机的(如自愿改善治理的银行本身就是好银行),IV 通过外生变异打破自选择,使得"被工具推动改善治理"的部分近似随机
历史(History)(间接)若外部事件同时影响了 X 和 Y,一个好的 IV 与这些事件无关(排他性约束),因此 IV 估计不受历史干扰

用第 4 章的语言说:IV 把"是不是它干的"这个问题,转化为"有没有一个外生的推手能证明是它干的"。如果第一阶段 F > 10 且排他性论证站得住,你就获得了对选择偏差遗漏变量偏误的有效防御。

§9.4 双重差分法(DID)

核心理念:双重差分是政策评估的"黄金标准"之一。它的直觉极为简洁——用对照组的"自然变化"来扣除处理组的"自然变化",剩下的就是政策的因果效应。DID 的本质是一个 2×2 因子设计的交互项。

9.4.1 DID 直觉:差分掉共同趋势

场景:2019 年某省推行"数字金融示范区"政策,你想知道这个政策是否提高了当地银行的 ROE。

text
                    政策前(2018)    政策后(2020)    变化
   处理组(示范省)     roe_T,pre       roe_T,post     ΔT = roe_T,post - roe_T,pre
   对照组(非示范省)   roe_C,pre       roe_C,post     ΔC = roe_C,post - roe_C,pre

   DID 估计量 = ΔT - ΔC
              =(处理组前后差)-(对照组前后差)

为什么需要"双重"差分

  • 只做一次差分(处理组前后差 ΔT):包含了政策效应 + 时间趋势(宏观经济好转、行业整体复苏等)
  • 只做截面差分(处理后处理组 - 对照组):包含政策效应 + 两组先天差异
  • 双重差分:ΔT - ΔC 把"共同时间趋势"和"先天水平差异"同时扣掉

📌 关键假设:平行趋势——如果没有政策干预,处理组和对照组的结果变量应该沿着平行的轨迹变化。不要求水平相同,只要求变化趋势相同。

9.4.2 2×2 因子设计本质(⭐ B版核心新增)

回指 §9.0:我们在 GLM 统摄视角中学过,教材单元 15(qmd 行 1283-1285)给出了 2×2 因子设计的一般线性模型:

y=β0+β1x1+β2x2+β3x1x2+ε

其中 β₁、β₂ 是主效应,β₃ 是交互效应

DID 就是这个公式的直接应用

因子设计术语DID 术语含义
x₁(因子1)treat(处理组虚拟变量)1 = 处理组,0 = 对照组
x₂(因子2)post(时间虚拟变量)1 = 政策后,0 = 政策前
β₁(主效应1)treat 系数处理组与对照组的先天水平差异
β₂(主效应2)post 系数共同时间趋势
β₃(交互效应)treat × post 系数= DID 估计量 = 政策因果效应

教材原文(qmd 行 1284):"回归系数 β₁ 和 β₂ 提供了主效应的效应规模估计值,β₃ 则提供了交互效应的效应规模估计值。"

DID 回归方程

roeit=β0+β1treati+β2postt+β3(treati×postt)+γXit+εit
stata
* ── 2×2 DID 基本回归 ──
use data/clean/bank_panel.dta, clear

* 生成 DID 所需变量
gen treat = (province == "示范省")        /* 处理组标记 */
gen post  = (year >= 2019)                /* 政策后标记 */
gen did   = treat * post                  /* 交互项 = DID 估计量 */

* 运行 DID 回归
reg roe treat post did size leverage, vce(cluster bank_id)

* 输出解读:
*   did 的系数 β₃ = 政策的因果效应(ATT)
*   若 β₃ = 1.2, p < 0.05 → 示范区政策使银行 ROE 提高约 1.2 个百分点
*   treat 系数 = 两组先天差异(不随时间变)
*   post 系数 = 共同时间趋势(两组共享)

教材的关键警示(qmd 行 1285):"如果 β₃ 是显著的……我们就不能显著地解读出课程类型(β₁)或者教学时间(β₂)的独立效应,因为这两个效应不能被区分开来。只有当交互效应不显著的时候,主效应才能被解读出来。"

映射到 DID:当交互项 treat×post 显著时(即政策有效应),treat 和 post 的主效应系数不应单独解读为"处理组特征"或"时间趋势"——它们已经被交互项"吸收"了部分含义。只有在 DID 估计量不显著时,treat 和 post 才可以作为独立的组间差异和时间趋势来解读。

9.4.3 平行趋势假设与事件研究法

平行趋势是 DID 的命门。如何检验?——事件研究法(Event Study):把政策前每一期都设为虚拟变量,看政策前处理组与对照组的差异是否为零。

stata
* ── 事件研究法检验平行趋势 ──
* 需要安装:ssc install eventstudyinteract

* 生成相对时间虚拟变量(以政策前1期为基准期)
gen rel_time = year - 2019   /* -3, -2, -1, 0, 1, 2 */

* 用 eventstudyinteract 估计动态效应
eventstudyinteract roe L3.rel_time L2.rel_time L1.rel_time ///
    F1.rel_time F2.rel_time, ///
    absorb(i.bank_id i.year) ///
    vce(cluster bank_id)

* 或使用标准 DID + 时期虚拟变量手动实现
forvalues k = 3(-1)2 {
    gen D_m`k' = (rel_time == -`k') & treat == 1
}
forvalues k = 0/2 {
    gen D_p`k' = (rel_time == `k') & treat == 1
}

reghdfe roe D_m3 D_m2 D_p0 D_p1 D_p2 size leverage, ///
    absorb(bank_id year) vce(cluster bank_id)

* 输出解读:
*   政策前各期系数(D_m3, D_m2)应不显著(p > 0.10)
*   → 说明政策前两组趋势平行,DID 假设成立
*   政策后各期系数(D_p0, D_p1, D_p2)逐步显著
*   → 说明政策效应存在且可能随时间累积
*
*   ⚠️ 若政策前系数显著 → 平行趋势不成立 → DID 结果不可信
*   → 需要换对照组、缩短时间窗口、或改用合成控制法

判断标准

检验结果判读下一步
政策前各期系数联合 F 检验 p > 0.10平行趋势成立放心使用 DID
个别期显著但无趋势可能是随机波动补充安慰剂检验
政策前呈系统性趋势平行趋势不成立换方法(合成控制/匹配+DID)

9.4.4 多期/交错 DID 与异质性处理效应

现实中,政策往往不是"一刀切"同时实施——不同地区在不同年份被纳入试点(交错处理,staggered adoption)。传统双向固定效应(TWFE)DID 在交错处理 + 异质性处理效应时会产生偏误(Goodman-Bacon, 2021; de Chaisemartin & D'Haultfœuille, 2020)。

stata
* ── 交错 DID:使用 did_multiplegt ──
* 需要安装:ssc install did_multiplegt

* 假设不同银行在不同年份受到政策冲击
* first_treat: 每个个体首次受处理的年份(从未处理的设为 0 或极大值)

did_multiplegt roe bank_id year treat, ///
    robust_dynamic dynamic(3) placebo(3) ///
    breps(200) cluster(bank_id)

* 输出解读:
*   "Average cumulative effect" = 累积平均处理效应
*   "Dynamic effect" 按事件时间报告 → 可画出事件研究图
*   与传统 TWFE 对比:若两者差异大 → 存在异质性处理效应
*
*   ⚠️ 异质性处理效应警示:
*   如果早期处理者的效应 ≠ 晚期处理者的效应
*   → TWFE 的 DID 系数是各 2×2 DID 的加权平均,权重可能为负!
*   → 此时必须使用 did_multiplegt / callaway / sun_abraham 等新方法

9.4.5 标准误聚类到处理层面

DID 的标准误必须聚类到处理分配的层面(treatment assignment level),而不是个体层面:

stata
* ── 正确 vs 错误的标准误 ──

* ❌ 错误:聚类到个体(bank_id)—— 如果政策是省级分配的
reg roe treat post did size leverage, vce(cluster bank_id)

* ✅ 正确:聚类到政策分配层面(province)
reg roe treat post did size leverage, vce(cluster province)

* 判断规则:
*   政策在哪个层面分配 → 就聚类到哪个层面
*   例:省级试点 → cluster(province)
*       行业级监管 → cluster(industry)
*       银行级处理 → cluster(bank_id)
*
*   聚类层级越高,有效样本量越小,标准误越大
*   Abadie et al. (2023):当处理组数量少时,应考虑 wild bootstrap

🖐️ 跟做练习 4

任务:用 bank_panel.dta 完成一个完整的 DID 分析。

  1. 构造处理变量:假设 bank_id 1-30 的银行在 2019 年被纳入"数字治理示范行",生成 treatpostdid 三个变量
  2. 运行 2×2 DID 回归:reg roe treat post did size leverage, vce(cluster bank_id)
  3. 解读交互项 did 的系数——这是政策的因果效应吗?为什么?
  4. 用事件研究法检验平行趋势:生成政策前各期的 treat×year 交互虚拟变量,用 reghdfe 估计
  5. 画出事件研究图(coefplot):政策前系数应围绕零线波动
  6. (进阶)思考:如果不同银行在 2018、2019、2020 不同年份被纳入示范,你应该用什么方法?为什么传统 TWFE 可能有问题?

🔗 回指第4章效度威胁

第 4 章 §4.2 的七大内部效度威胁中,DID + 平行趋势主要解决以下两条

第4章效度威胁DID 如何应对
历史(History)"你的研究期恰好赶上 LPR 下调 / 疫情 / 房地产调控"——DID 通过对照组吸收了所有共同的外部事件冲击。只要这些事件同等地影响了处理组和对照组(平行趋势),差分后就被消除
选择偏差(Selection)"试点县本来就是省里挑的先进县"——DID 不要求处理组和对照组水平相同(treat 主效应吸收了先天差异),只要求变化趋势相同。因此,即便处理组先天更优秀,只要没有政策时两组会平行变化,DID 估计就是无偏的

用第 4 章的语言说:DID 把"历史威胁"交给对照组去吸收,把"选择偏差"转化为"平行趋势是否成立"这个可检验的问题。这正是为什么 DID 在政策评估中如此强大——它不要求消除选择偏差的来源,只要求偏差的时间模式是可预测的。

§9.5 倾向得分匹配(PSM)与断点回归(RDD)

核心理念:PSM 和 RDD 都试图在观测数据中"模拟随机实验"——PSM 通过匹配可观测特征构造"近似等价"的对照组;RDD 利用制度规则的断点,在断点附近创造"近似随机化"的局部比较。


Part A:倾向得分匹配(PSM)

9.5.1 选择偏差与可观测对照组的构造

问题:在第 4 章 §4.2 中,我们把**选择偏差(Selection)**称为"金融研究的头号杀手"——自愿参与保险、贷款、培训的人与不参与的人从一开始就不一样。

PSM 的核心思想

text
理想状态(RCT):随机分配 → 处理组 ≈ 对照组(所有特征均衡)
现实状态(观测数据):自选择 → 处理组 ≠ 对照组

PSM 的折中方案:
  1. 用可观测特征(规模、杠杆、地区、行业...)估计"参与概率"(倾向得分)
  2. 给每个处理组个体找一个倾向得分最接近的对照组个体(匹配)
  3. 匹配后,两组在可观测特征上"近似等价"
  4. 比较匹配后的结果变量差异 = ATT(处理组的平均处理效应)

⚠️ PSM 的根本局限:它只能平衡可观测的特征。如果存在不可观测的混淆变量(如"管理层能力""风险偏好"),PSM 无法解决——此时需要 IV 或 DID。

9.5.2 Stata 实现:psmatch2 与 teffects psmatch

stata
* ── PSM 完整流程 ──
use data/clean/bank_panel.dta, clear

* 假设:treat = 1 表示银行实施了数字化转型
* 目标:评估数字化转型对 ROE 的因果效应

* ─── 方法一:psmatch2(经典,输出详细) ───
* 需要安装:ssc install psmatch2

* Step 1: 估计倾向得分 + 最近邻匹配
psmatch2 treat size leverage board_size governance, ///
    outcome(roe) logit neighbor(1) common ate

* 输出解读:
*   "ATT (Average Treatment Effect on the Treated)" = 处理组的平均处理效应
*   示例:ATT = 0.85, t = 2.31, p = 0.021
*   → 数字化转型使银行 ROE 平均提高 0.85 个百分点,统计显著
*
*   "Number of treated observations matched" = 成功匹配的处理组样本数
*   若有大量未匹配(off support)→ 共同支撑域不足,需谨慎

* ─── 方法二:teffects psmatch(Stata 官方,更现代) ───
teffects psmatch (roe) (treat size leverage board_size governance, logit), ///
    atet nn(1) vce(cluster bank_id)

* 输出解读:
*   ATET = 处理组平均处理效应(与 psmatch2 的 ATT 含义相同)
*   teffects 自动报告标准误和置信区间

9.5.3 匹配质量诊断

匹配不是"跑一下就完了"——你必须证明匹配后两组确实"近似等价"。

stata
* ── 诊断 1:共同支撑域(Common Support) ──
* psmatch2 运行后自动输出
sum _pscore if treat == 1   /* 处理组倾向得分范围 */
sum _pscore if treat == 0   /* 对照组倾向得分范围 */

* 判断:两组倾向得分分布应有大面积重叠
* 若处理组最低分 > 对照组最高分 → 无共同支撑,匹配失败

* ── 诊断 2:平衡性检验 ──
* 方法 A:pstest(psmatch2 配套)
pstest size leverage board_size governance, treated(_weight>0) both

* 方法 B:手动计算标准化偏差(Standardized Bias, SB)
* 匹配前后各协变量的 SB 对比
psacov treat size leverage board_size governance, ///
    pscore(_pscore) treated(1)

* 判断标准:
*   匹配后每个协变量的标准化偏差 |SB| < 10%
*   → 平衡性良好,匹配有效
*   |SB| > 10% → 该变量未平衡,需要调整匹配方法
*   (如:增加匹配数 neighbor(3)、改用核匹配 kernel、加入更多协变量)

匹配质量诊断清单

诊断项合格标准不合格的后果补救措施
共同支撑域两组倾向得分分布重叠 ≥ 90%大量样本被丢弃,外部效度下降修剪(trimming)或换匹配方法
标准化偏差匹配后所有协变量SB< 10%
匹配后样本量ATT 估计基于足够样本统计检验力不足放宽匹配容差或改用 IPW
Rosenbaum 敏感性分析Γ > 1.5 时结论仍稳健存在潜在不可观测混淆承认局限,讨论方向

Part B:断点回归(RDD)

9.5.4 RDD 直觉:断点附近近似随机化

场景:某省规定"资本充足率 ≥ 10.5% 的银行可获得创新业务牌照"。你想知道获得牌照是否提高了银行 ROE。

text
       获得牌照概率
  1.0 ─────────────────┐
                        │  ← 断点(cutoff = 10.5%)
  0.0 ──────────────────┘
       ──────────────────────────
       8%    9%   10%  10.5%  11%  12%
                    资本充足率(running variable)

  核心直觉:
  资本充足率 = 10.4% 的银行 vs 10.6% 的银行
  → 两者在其他方面几乎一样(0.2% 的差异可能是随机波动)
  → 但一个没拿到牌照,一个拿到了
  → 比较断点两侧的 Y = 近似随机实验的局部因果效应

RDD 的识别假设:在断点附近,个体无法精确操纵(manipulate)自己的 running variable 值。如果银行可以精确地把资本充足率调到 10.5% 以上,RDD 就不成立。

9.5.5 Stata 实现:rdrobust 与带宽选择

stata
* ── RDD 完整流程 ──
use data/clean/bank_panel.dta, clear

* 假设:car = 资本充足率(running variable)
*       cutoff = 10.5(断点值)
*       roe = 结果变量

* 需要安装:ssc install rdrobust
*            ssc install rddensity
*            ssc install rdplot

* ─── Step 1:先画图看断点 ───
rdplot roe car, c(10.5) p(1) graph_options(xtitle("资本充足率(%)") ///
    ytitle("ROE(%)") title("断点回归:创新牌照对银行盈利的影响"))

* ─── Step 2:rdrobust 正式估计 ───
rdrobust roe car, c(10.5) kernel(triangular) p(1) bwselect(mserd)

* 输出解读:
*   "Point estimate of the RD treatment effect" = 断点处的因果效应(局部)
*   "p-value" = 常规 t 检验 / 稳健偏差校正检验
*   "Bandwidth" = 最优带宽(MSE 最优,由数据自动选择)
*
*   示例输出:
*   Method: RD  |  有效观测: 68  |  带宽: [9.8, 11.2]
*   Coefficient: 0.72   Std.Err: 0.31   t-stat: 2.32   p-value: 0.020
*   → 在断点附近(资本充足率 9.8%-11.2%),获得牌照使 ROE 提高约 0.72 个百分点
*
*   ⚠️ 注意:这是"局部平均处理效应"(LATE)——只对断点附近的银行有效
*   不能推广到资本充足率 = 15% 的银行

* ─── Step 3:带宽敏感性检验 ───
* 用不同带宽检查结论是否稳健
rdrobust roe car, c(10.5) kernel(triangular) p(1) bwselect(msecomb1)
rdrobust roe car, c(10.5) kernel(uniform) p(1) h(2.0)   /* 手动带宽 ±2% */
rdrobust roe car, c(10.5) kernel(triangular) p(2)       /* 二阶多项式 */

* ─── Step 4:操纵检验(McCrary density test) ───
rddensity roe car, c(10.5) plot

* 判断标准:
*   p > 0.05 → 断点处无密度跳变 → 不存在操纵,RDD 有效
*   p < 0.05 → 密度跳变 → 个体可能在操纵 running variable → RDD 不可信

带宽选择要点

带宽策略优点缺点推荐
MSE 最优带宽(默认)均方误差最小,统计效率最高可能有偏✅ 主结果
0.5× 最优带宽偏差更小样本少,方差大稳健性检验
2× 最优带宽样本多,精度高偏差可能增大稳健性检验
手动固定带宽透明可复现可能被"挑选"补充报告

9.5.6 精确断点 vs 模糊断点

类型定义断点处处理概率估计方法金融例子
精确断点(Sharp RDD)running variable 跨过 cutoff → 100% 获得处理从 0 跳到 1直接比较断点两侧 Y 的局部线性回归资本充足率 ≥ 10.5% → 自动获牌照
模糊断点(Fuzzy RDD)跨过 cutoff → 处理概率跳升但不是 100%从 p₁ 跳到 p₂(p₂ > p₁ 但 < 1)IV 思路:用"是否在断点以上"作为"实际是否接受处理"的工具变量评分 ≥ 60 分的贷款申请"大概率"获批,但审批员有酌情权
stata
* ── 模糊断点 RDD(Fuzzy)──
* 当处理不是由断点唯一决定时
* 用 rdrobust 的 fuzzy 选项:以 cutoff dummy 为工具变量

* 示例:贷款审批分数 ≥ 60 分的申请"大概率"获批
rdrobust loan_amount credit_score, c(60) fuzzy(approved) ///
    kernel(triangular) p(1)

* 输出解读:
*   系数 = Wald 估计量 = (Y 在断点处的跳变) / (处理概率在断点处的跳变)
*   本质上就是 2SLS:用 1(credit_score ≥ 60) 作为 approved 的工具变量
*   → 模糊 RDD = 局部 IV

💡 AI 辅助研究提示:你可以问 AI "我的数据中是否存在天然的断点?"或"帮我论证 running variable 在断点处不可操纵"——但 McCrary 密度检验和带宽敏感性分析必须自己跑,AI 不能替你生成统计量(S9.4 红线)。

🖐️ 跟做练习 5

任务 A(PSM)

  1. 打开 bank_panel.dta,定义 treat = 1 为 board_size > 中位数的银行(大董事会)
  2. 运行 psmatch2 treat size leverage governance, outcome(roe) logit neighbor(1) common
  3. 检查 ATT 是否显著——大董事会是否"因果地"提高了 ROE?
  4. 运行平衡性检验:匹配后各协变量的标准化偏差是否 < 10%?
  5. 思考:PSM 能排除"不可观测的管理层能力"这一混淆因素吗?如果不能,该用什么方法?

任务 B(RDD)

  1. 假设 bank_panel.dta 中有变量 capital_ratio(资本充足率),监管红线为 10.5%
  2. 先画散点图:scatter roe capital_ratio || lowess roe capital_ratio, c(10.5)
  3. 运行 rdplot roe capital_ratio, c(10.5),目视检查断点处是否有跳变
  4. 运行 rdrobust roe capital_ratio, c(10.5),记录点估计、标准误和最优带宽
  5. 做带宽敏感性:分别用 0.5× 和 2× 带宽重跑,结论是否稳健?
  6. (进阶)运行 rddensity,判断是否存在操纵

🔗 回指第4章效度威胁

第 4 章 §4.2 定义的七大内部效度威胁中,PSM 和 RDD 各自针对的核心威胁

识别策略对应的第4章效度威胁具体机制
PSM选择偏差(Selection)"参加农业保险的都是风险厌恶型农户"——PSM 通过匹配可观测特征(收入、规模、教育),构造一个"在可观测维度上与处理组等价"的对照组,从而消除可观测部分的选择偏差
RDD选择偏差(Selection)—— 特指"自选择的断点""试点县本来就是省里挑的先进县"——RDD 利用制度规则的外生断点(如资本充足率门槛),在断点附近个体无法精确操纵自己的位置,因此断点两侧的比较近似随机化

PSM vs RDD 的本质区别

  • PSM 解决的是"可观测特征造成的选择偏差"——前提是你相信控制了所有重要的可观测混淆因素(条件独立假设 CIA)
  • RDD 解决的是"制度规则造成的选择偏差"——不需要 CIA,只需要断点处不可操纵(连续性假设)
  • PSM 估计的是全局 ATT(对整个处理组);RDD 估计的是局部 LATE(只对断点附近的个体)

用第 4 章的话说:PSM 是"在可观测维度上模拟随机分组";RDD 是"利用制度规则制造局部的随机化"。两者都不如真正的 RCT 干净,但在金融观测研究中已是最佳实践。

§9.6 稳健性与异质性

核心理念:稳健性检验不是"凑显著"的借口,而是对你核心结论的诚实压力测试。 参见 S9.1"不 p-hacking"与 S9.2"稳健性检验如实报告"。

9.6.1 三组稳健性检验:主检验 + 替换变量 + 子样本

完成基准回归(§9.1-§9.5)后,你需要回答一个关键问题:我的结论对模型设定的依赖程度有多大? 稳健性检验的标准做法是"三组对照":

组别含义具体操作论文报告格式
第 1 组:主检验改变估计方法/控制变量集加入更多控制变量、换聚类层级、换标准误类型"在加入 XX 控制变量后,核心系数保持显著"
第 2 组:替换变量用另一种方式测量核心概念替换因变量(ROE→ROA)、替换自变量(治理指数→独董比例)"替换核心变量后,结论方向一致/不一致"
第 3 组:子样本排除特定样本重新估计剔除国有银行、剔除疫情年份、仅保留东部地区"在子样本中,效应更大/更小/不显著"

关键原则(S9.2 红线):

  • 三组稳健性检验的结果全部如实报告,不挑好看的
  • 如果某组检验失败了(核心系数不显著),要写明"在 XX 条件下不再稳健"并讨论原因
  • 稳健性检验的目的是给读者提供信息,不是为了"通过"
stata
* ══════════════════════════════════════════════════════
* §9.6 稳健性检验三组:基于 bank_panel.dta 主例
* ══════════════════════════════════════════════════════

use "data/clean/bank_panel.dta", clear
xtset bank_id year

* ── 第 1 组:主检验(基准 + 更多控制 + 换聚类) ──
* 基准:§9.2 已跑过的 reghdfe
reghdfe roe governance size leverage, absorb(bank_id year) vce(cluster province)
est store rob_1a

* 加入更多控制变量
reghdfe roe governance size leverage board_size dual npl_ratio, ///
    absorb(bank_id year) vce(cluster province)
est store rob_1b

* 换聚类层级:银行层面
reghdfe roe governance size leverage, absorb(bank_id year) vce(cluster bank_id)
est store rob_1c

* ── 第 2 组:替换变量 ──
* 替换因变量:ROE → ROA
reghdfe roa governance size leverage, absorb(bank_id year) vce(cluster province)
est store rob_2a

* 替换核心自变量:governance → board_indep(独董比例)
reghdfe roe board_indep size leverage, absorb(bank_id year) vce(cluster province)
est store rob_2b

* ── 第 3 组:子样本 ──
* 剔除国有大型银行
reghdfe roe governance size leverage if bank_type != 1, ///
    absorb(bank_id year) vce(cluster province)
est store rob_3a

* 仅保留 2018-2022(剔除疫情冲击年份 2020)
reghdfe roe governance size leverage if year != 2020, ///
    absorb(bank_id year) vce(cluster province)
est store rob_3b

* ── 输出多列稳健性三线表 ──
esttab rob_1a rob_1b rob_2a rob_2b rob_3a rob_3b ///
    using "reports/robustness.rtf", replace ///
    b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
    stats(N r2_w, fmt(0 3)) ///
    mtitles("基准FE" "更多控制" "ROA" "独董比例" "非国有" "剔疫情") ///
    title("表 9-6  稳健性检验:三组对照") ///
    label booktabs ///
    addnotes("注:括号内为聚类到省份层面的稳健标准误。*** p<0.01, ** p<0.05, * p<0.1。")

输出解读要点

  • 如果核心变量(governance)在所有列中方向和显著性一致 → 结论稳健
  • 如果某一列不显著 → 诚实报告"在剔除国有银行后效应不再显著,可能因为国有银行治理机制不同"
  • 如果方向翻转 → 严重问题,需重新审视模型设定

9.6.2 规格曲线:S9.1"不 p-hacking"的自证工具

什么是规格曲线(Specification Curve)?

传统稳健性检验报告 3-5 种设定,但审稿人可能质疑:"你只挑了对你有利的设定。"规格曲线的做法是:穷举所有合理的模型设定(如所有控制变量组合),画出核心系数的分布图,让读者一目了然。

逻辑:如果你尝试了 128 种合理设定,其中 120 种都显著且方向一致 → 强证据。如果只有 20 种显著 → 你的结论可能是 p-hacking 的产物。

stata
* ══════════════════════════════════════════════════════
* 规格曲线模拟:穷举控制变量子集
* ══════════════════════════════════════════════════════

use "data/clean/bank_panel.dta", clear
xtset bank_id year

* 定义可选控制变量池(4 个变量 → 2^4 = 16 种组合)
local controls "size leverage board_size npl_ratio"
local n_comb = 16

* 循环跑所有组合,存储 governance 系数
postfile spec_curve spec_id b_gov se_gov p_gov using "data/clean/spec_curve.dta", replace

forvalues i = 1/`n_comb' {
    * 根据二进制位决定哪些控制变量进入模型
    local ctrl_list ""
    local j = 0
    foreach v of local controls {
        local j = `j' + 1
        if mod(floor(`i' / 2^(`j'-1)), 2) == 1 {
            local ctrl_list "`ctrl_list' `v'"
        }
    }
    
    * 跑回归
    capture reghdfe roe governance `ctrl_list', absorb(bank_id year) vce(cluster province)
    if _rc == 0 {
        post spec_curve (`i') (_b[governance]) (_se[governance]) (2*ttail(e(df_r), abs(_b[governance]/_se[governance])))
    }
}
postclose spec_curve

* 规格曲线图(需安装 coefplot)
use "data/clean/spec_curve.dta", clear
sort b_gov
gen order = _n
coefplot (scatter b_gov order, msymbol(O) msize(tiny)), ///
    vertical yline(0, lcolor(red)) ///
    title("规格曲线:governance 系数在 16 种设定下的分布") ///
    ytitle("系数估计值") xtitle("模型设定(按系数大小排序)") ///
    note("红线 = 0。所有点在红线同侧 → 结论稳健")
graph export "figures/spec_curve.pdf", replace

给学生的话:规格曲线不是让你"找到显著的那一种",而是展示你的结论不依赖于某一种特定设定。如果曲线在 0 两侧频繁穿越,你的结论确实不稳健——这时候诚实比显著更重要。

9.6.3 异质性分析

异质性回答的问题:核心效应在不同群体间是否有差异? 这不是"换着法子凑显著",而是探索效应的边界条件。

方法一:分组回归(bysort)

stata
* ── 异质性:按银行类型分组 ──
* bank_type: 1=国有大型, 2=股份制, 3=城商行
bysort bank_type: reghdfe roe governance size leverage, ///
    absorb(bank_id year) vce(cluster province)

* 存储分组结果
reghdfe roe governance size leverage if bank_type == 1, absorb(bank_id year) vce(cluster province)
est store het_soe
reghdfe roe governance size leverage if bank_type == 2, absorb(bank_id year) vce(cluster province)
est store het_joint
reghdfe roe governance size leverage if bank_type == 3, absorb(bank_id year) vce(cluster province)
est store het_city

方法二:交乘项(交互效应)

stata
* ── 异质性:交乘项法(推荐,可做组间差异检验) ──
* 生成交乘项
gen gov_x_soe = governance * (bank_type == 1)

reghdfe roe governance gov_x_soe size leverage, ///
    absorb(bank_id year) vce(cluster province)

* 输出解读:
*   governance 系数 = 非国有银行的基准效应
*   gov_x_soe 系数 = 国有银行相对非国有银行的增量效应
*   如果 gov_x_soe 显著 → 治理对国有银行的效果不同于非国有银行

两种方法的选择

  • 分组回归:直观,适合描述;但无法检验"两组系数差异是否显著"
  • 交乘项:可以检验组间差异(交互项的 p 值),适合推断;论文更推荐

9.6.4 三方向副例异质性

方向异质性维度分组变量预期结论
【金】资本结构企业规模(大/中/小)size_group大企业融资渠道多元,杠杆率对治理更不敏感
【险】农业保险需求城乡(城区/郊县/农村)urban_rural农村农户风险厌恶更强,保险需求对补贴更敏感
【农】微型金融贷款可得性区域(东部/中部/西部)region西部金融抑制更强,关系型贷款效应更显著

§9.7 中介效应与机制检验

核心理念:回归告诉你"X 影响 Y",中介分析进一步回答"X 通过什么渠道影响 Y"。 参见教材单元 15(qmd 行 1296):"一个方程的因变量是另一个方程的自变量"——这就是路径分析的核心思想。

9.7.1 Baron-Kenny 三步法

中介效应的经典检验框架由 Baron & Kenny(1986)提出,包含三步回归:

X ──────────────────────→ Y          (第 1 步:总效应 c)
X ──────────────────────→ M          (第 2 步:X 对中介变量的效应 a)
X ────────→ M ──────────→ Y          (第 3 步:直接效应 c' + 中介效应 a×b)
步骤回归方程关注系数含义
第 1 步Y = α₀ + c·X + 控制变量cX 对 Y 的总效应
第 2 步M = β₀ + a·X + 控制变量aX 对中介变量 M 的效应
第 3 步Y = γ₀ + c'·X + b·M + 控制变量c', bc' = 直接效应;b = M 对 Y 的效应

中介效应 = a × b = c - c'

判定标准(逐步检验法):

  1. 第 1 步 c 显著 → X 确实影响 Y
  2. 第 2 步 a 显著 → X 确实影响 M
  3. 第 3 步 b 显著,且 c' 的绝对值 < c 的绝对值 → 存在部分中介
  4. 若 c' 不显著 → 完全中介(X 完全通过 M 影响 Y)
stata
* ══════════════════════════════════════════════════════
* Baron-Kenny 三步法:governance → npl_ratio → roe
* 假说:公司治理(governance)通过降低不良贷款率(npl_ratio)提升盈利能力(roe)
* ══════════════════════════════════════════════════════

use "data/clean/bank_panel.dta", clear
xtset bank_id year

* ── 第 1 步:总效应(X → Y) ──
reghdfe roe governance size leverage, absorb(bank_id year) vce(cluster province)
est store step1_total
* 预期:governance 系数 c > 0 且显著(治理越好,ROE 越高)

* ── 第 2 步:X → M ──
reghdfe npl_ratio governance size leverage, absorb(bank_id year) vce(cluster province)
est store step2_xm
* 预期:governance 系数 a < 0 且显著(治理越好,不良贷款率越低)

* ── 第 3 步:X + M → Y ──
reghdfe roe governance npl_ratio size leverage, absorb(bank_id year) vce(cluster province)
est store step3_full
* 预期:npl_ratio 系数 b < 0 且显著;governance 系数 c' 仍显著但绝对值 < c

* ── 输出三步结果表 ──
esttab step1_total step2_xm step3_full ///
    using "reports/mediation_bk.rtf", replace ///
    b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
    stats(N r2_w, fmt(0 3)) ///
    mtitles("Step1: Y~X" "Step2: M~X" "Step3: Y~X+M") ///
    title("表 9-7  Baron-Kenny 三步法中介效应检验") ///
    label booktabs

9.7.2 Sobel 检验

Baron-Kenny 逐步法有一个缺陷:它不直接检验"a × b 是否显著异于 0"。Sobel(1982)提出了中介效应的直接检验:

Sobel Z 统计量:Z = a·b / SE(a·b),其中 SE(a·b) = √(a²·SE_b² + b²·SE_a²)

判读:|Z| > 1.96 → 中介效应在 5% 水平显著。

局限:Sobel 检验假设 a·b 服从正态分布,但乘积分布通常偏态 → 检验力偏低 → 推荐用 Bootstrap 替代。

9.7.3 Bootstrap 置信区间(推荐方法)

Bootstrap 不依赖正态性假设,直接通过重复抽样构造 a·b 的置信区间:

stata
* ══════════════════════════════════════════════════════
* sgmediation:一键中介效应(Sobel + Bootstrap)
* 需安装:ssc install sgmediation
* ══════════════════════════════════════════════════════

* 方法一:sgmediation(经典三步 + Sobel 检验)
sgmediation roe, mv(npl_ratio) iv(governance) cv(size leverage)
* 输出解读:
*   Indirect effect (a*b) = 系数值
*   Sobel z = Z 统计量,p = p 值
*   若 p < 0.05 → 中介效应显著

* 方法二:Bootstrap 置信区间(推荐,更稳健)
* bootstrap 1000 次抽样,构造 a*b 的 95% CI
bootstrap r(ind_eff), reps(1000) seed(42): sgmediation roe, mv(npl_ratio) iv(governance)
estat bootstrap, percentile bc
* 输出解读:
*   Percentile CI: [下界, 上界]
*   若 CI 不包含 0 → 中介效应显著
*   BC(偏差校正)CI 更准确,优先看 BC 结果

* 方法三:手动 Bootstrap(理解原理)
capture program drop my_mediation
program define my_mediation, rclass
    reghdfe npl_ratio governance size leverage, absorb(bank_id year)
    scalar a = _b[governance]
    reghdfe roe governance npl_ratio size leverage, absorb(bank_id year)
    scalar b = _b[npl_ratio]
    return scalar ind_eff = a * b
end

bootstrap r(ind_eff), reps(1000) seed(42) cluster(bank_id): my_mediation
estat bootstrap, percentile bc

结果解读模板(写入论文):

"Bootstrap 检验(1000 次重复抽样)结果表明,公司治理通过降低不良贷款率影响盈利能力的间接效应为 -0.032,95% 偏差校正置信区间为 [-0.058, -0.011],不包含 0,中介效应显著。中介效应占总效应的比例为 23.5%。"

9.7.4 与教材路径分析的关系

教材单元 15(qmd 行 1296)指出:"多变量 GLM 中,一个方程的因变量是另一个方程的自变量"——这正是路径分析(Path Analysis)的定义,也是中介效应的本质。

对应关系:

教材概念(路径分析)中介效应术语Stata 实现
外生变量X(自变量)governance
内生变量(中间)M(中介变量)npl_ratio
最终内生变量Y(因变量)roe
直接路径系数c'(直接效应)第 3 步 X 的系数
间接路径系数a × b(间接效应)两步系数乘积
总效应c = c' + a·b第 1 步 X 的系数

中介效应是路径分析的最简形态(单条间接路径)。更复杂的多路径模型(如 SEM)将在高级课程中学习。

9.7.5 中介效应 vs 调节效应辨析

维度中介效应(Mediation)调节效应(Moderation)
回答的问题X 通过什么渠道影响 Y?X 对 Y 的影响在什么条件下更强/更弱?
变量角色M 是 X→Y 链条上的中间环节W 改变 X→Y 关系的强度/方向
因果图X → M → YX → Y,W 调节箭头粗细
检验方法Baron-Kenny / Bootstrap交乘项 X×W 是否显著(§9.6.3)
Stata 命令sgmediationreghdfe y c.x##c.w
本章对应§9.7§9.6.3 异质性分析

常见混淆:异质性分析(§9.6.3)本质上就是调节效应检验——"治理效应在国有银行和非国有银行之间不同"= "银行类型调节了治理→绩效的关系"。

§9.8 ABM 仿真实验

核心理念:回归从历史数据中识别因果,仿真从模型规则中生成反事实——两者互补而非替代。 本节为选修内容,面向希望做政策仿真类论文的学生(尤其是【险】方向)。

9.8.1 为什么需要仿真?

回归分析(§9.1-§9.7)的核心能力是:从已经发生的数据中,利用自然实验或统计控制来识别因果关系。但有些研究问题是回归无法回答的:

局限例子ABM 的解决方案
无法做 RCT农业保险补贴率不能随机分配给不同省份在计算机中模拟"如果补贴率是 60%/70%/80%/90%"的反事实
数据不存在新政策尚未实施,没有历史数据基于行为规则模拟政策实施后的可能结果
系统复杂性500 个农户相互影响(邻里效应)、多主体博弈让每个 Agent 遵循决策规则,观察宏观涌现
非线性动态参保率随时间的路径依赖(先亏后保 vs 一直不保)离散时间步逐期模拟,观察动态轨迹

定位:ABM 不是回归的替代品。最佳实践是"回归 + 仿真"双轮驱动——回归验证历史因果,仿真预测政策效果。

9.8.2 ODD 协议:模型描述的国际标准

ABM 模型如果没有标准化的描述文档,他人无法复现、审稿人无法评审。ODD 协议(Grimm et al., 2006)是国际公认的 ABM 报告标准:

ODD 组件含义四川水稻保险 ABM 对应
Overview概述:目的、主体类型、空间结构、时间尺度评估补贴率政策效果;4 类主体(农户/保险公司/银行/政府);小世界网络;步长=1天
Design concepts设计理念:涌现、适应性、目标、学习、随机性参保率涌现;农户根据前景理论适应决策;多随机种子
Details细节:状态变量、过程、调度顺序config.yaml 全部参数 + 年度周期(投保→生产→灾害→收获→理赔)

写论文的启示:如果你的专硕论文选择"产品设计"范式(附录 F.3),其中包含仿真模块,那么 ODD 协议就是"方法"一节必须遵循的报告框架。

9.8.3 四川水稻保险 ABM 跟做

项目路径(绝对路径,请复制到你自己的研究文件夹后再运行):

/Users/xiaoshiishun/微云同步助手(275531137)/当前工作/课件/风险管理与保险研究生课程2026年讲义更新/sichuan_rice_insurance_abm/

项目结构

sichuan_rice_insurance_abm/
├── run.py                      # 启动脚本(python run.py --scenario baseline)
├── config.yaml                 # 全部参数配置(YAML 格式)
├── ODD协议.md                  # ODD 标准描述文档
├── model/rice_insurance_model.py   # 主模型类
├── agents/rice_farmer_agent.py     # 农户主体(核心决策逻辑)
├── agents/insurer_agent.py         # 保险公司
├── agents/bank_agent.py            # 银行(保险+信贷联动)
├── agents/government_agent.py      # 政府(补贴政策)
└── results/                        # 运行输出

核心参数一览(来自 config.yaml):

参数类别关键参数取值数据来源
模型规模农户数量500代表四川 2800 万亩水稻种植户样本
网络结构小世界网络 k=8, p=0.1模拟农村熟人社会
风险偏好CRRA 风险厌恶系数N(1.2, 0.4)文献估计
行为参数损失厌恶系数 λN(2.8, 0.6)蔡天鸣(2024)中国农户实验
保险合约保额 1100 元/亩,费率 4.5%保费 49.5 元/亩四川水稻完全成本保险条款
财政补贴总补贴率 75%(中央45%+省20%+市县10%)农户自缴 25% ≈ 12.4 元/亩四川省农业农村厅
灾害参数洪涝 3%/年,干旱 2%/年,病虫害 5%/年国家统计局四川调查总队

跟做步骤

bash
# 步骤 1:复制项目到你的研究文件夹
cp -r "/Users/xiaoshiishun/微云同步助手(275531137)/当前工作/课件/风险管理与保险研究生课程2026年讲义更新/sichuan_rice_insurance_abm/" ~/research/my_abm/

# 步骤 2:安装依赖
cd ~/research/my_abm
pip install -r requirements.txt

# 步骤 3:运行基准情景(补贴率 75%)
python run.py --scenario baseline
# 观察输出:参保率、财政支出、赔付率

# 步骤 4:运行补贴率扫描实验(50% → 90%,步长 5%)
python run.py --scenario subsidy_sweep
# 输出四指标曲线:补贴率 → 参保率 → 财政效率 → 赔付率

subsidy_sweep 参数扫描的四个输出指标

指标含义政策关注点
参保率投保农户占比政策目标:≥85%
财政支出政府补贴总额预算约束:≤8000万元
财政效率每万元财政支出带动的参保率提升边际效益递减点在哪?
赔付率保险公司理赔/保费收入可持续性:60%-80% 为健康区间

论文写法:跑完 subsidy_sweep 后,画四指标对补贴率的折线图,找到"参保率≥85% 且财政效率最大"的拐点 → 这就是你的政策建议。

9.8.4 ABM 诚信边界

┌───────────────────────────────────────────────────────────────────────┐
│  ⚠️ ABM 仿真的三条诚信红线                                             │
│                                                                       │
│  1. 仿真结果 ≠ 现实                                                    │
│     · ABM 输出是"在假设条件下的可能结果",不是预测                        │
│     · 论文中必须写"本模型结果依赖于以下假设:..."                         │
│                                                                       │
│  2. 参数校准与来源必须披露                                              │
│     · 每一个参数都要注明数据来源(文献/统计年鉴/调研)                     │
│     · 禁止"拍脑袋"设定关键行为参数(如风险厌恶系数)                      │
│     · config.yaml 中的注释就是你的"参数审计轨迹"                        │
│                                                                       │
│  3. 禁止调参凑结论                                                      │
│     · 不得反复修改参数直到仿真结果"符合预期"                              │
│     · 正确做法:先确定参数(有来源)→ 跑模型 → 如实报告结果                │
│     · 如果结果与预期不符 → 讨论为什么,而不是改参数                        │
│     · 敏感性分析(±20% 扰动)是合法的稳健性检验                          │
│     · 多随机种子(seed=42,123,456,789,999)报告均值和标准差               │
└───────────────────────────────────────────────────────────────────────┘

S9.4 延伸:AI 可以帮你写 Python 仿真代码、解释 ODD 协议、调试报错;但 AI 不能帮你编造参数值或伪造仿真输出。所有参数必须有可追溯的来源。

AI 辅助研究栏 · 第 9 章

AI 在实证分析中的合法应用

① 贴回归输出让 AI 诊断(推荐提示词模板)

我跑了一个面板回归(reghdfe),输出如下:

[粘贴 Stata 输出]

请帮我诊断:
1. 是否存在异方差疑虑?(看 Breusch-Pagan 或 White 检验 p 值)
2. 是否存在多重共线性?(看 VIF 值)
3. 是否有内生性风险?(核心解释变量是否可能与误差项相关)
4. 我的聚类标准误选择是否合理?

请不要帮我编造任何数字,只基于我贴的输出进行分析。

② stata-mcp 六步法 AI 协作要点

六步法步骤AI 可以做什么AI 不能做什么
Step 1 数据导入帮你写 import excel / use 代码帮你编造数据
Step 2 描述统计生成 summarize / tabstat 代码编造描述统计数值
Step 3 基准回归推荐模型设定、写回归命令生成回归系数
Step 4 内生性帮你想 IV 候选、写 ivregress 代码编造第一阶段 F 值
Step 5 稳健性生成多组检验代码框架选择性报告(AI 不知道哪些"好看")
Step 6 输出esttab / putdocx 格式化命令伪造表格中的数字

③ AI 能做 / 不能做对照表

✅ AI 能做❌ AI 绝对不能做
根据你的描述生成 Stata 代码生成回归系数、标准误、p 值、R²
解释回归输出中各统计量的含义编造"看起来合理"的数字填入论文
诊断异方差/共线性/内生性的可能原因替你判断"该不该剔除这个样本"
推荐识别策略(IV/DID/PSM/RDD)保证推荐的策略适用于你的数据
帮你写 esttab / coefplot 美化代码修改你的实证结果使其"更好看"
翻译统计术语为日常语言替代你对理论的理解

AI 诚信栏 · 第 9 章

S9.1 不 p-hacking

┌─────────────────────────────────────────────────────┐
│  ✦ 诚信检查点 S9.1                                    │
│                                                       │
│  核心原则:                                            │
│  模型设定必须基于理论,不是基于"哪种设定最显著"。       │
│  教材原话:"数据是用来验证模型的,而不是用来设定模型的" │
│                                                       │
│  具体要求:                                            │
│  □ 不得"换三个控制变量组合终于显著了"只报显著那个      │
│  □ 不得事后剔除"异常值"以凑显著                        │
│    (剔除标准必须事前确定,如 winsor2 在回归前完成)   │
│  □ 不得尝试多个因变量只报告显著的那个                  │
│  □ 不得隐藏不显著的尝试——规格曲线就是你的"自证清白"   │
│                                                       │
│  自检方法:                                            │
│  画一张规格曲线(§9.6.2),展示所有合理设定下核心      │
│  系数的分布。如果曲线在 0 两侧频繁穿越,说明你的       │
│  结论不稳健——此时诚实比显著更重要。                    │
│                                                       │
│  反面教材:                                            │
│  · "我试了 20 种控制变量组合,第 17 种终于 p<0.05"    │
│  · 论文报告 N=387,实际原始数据 N=500——中间悄悄       │
│    删了 113 个"异常值"但没说明标准                     │
│  · 先跑 ROE 不显著,换 ROA 显著了,只报 ROA 结果      │
└─────────────────────────────────────────────────────┘

S9.2 稳健性检验如实报告

┌─────────────────────────────────────────────────────┐
│  ✦ 诚信检查点 S9.2                                    │
│                                                       │
│  核心原则:                                            │
│  稳健性检验是给读者提供完整信息,不是给自己找退路。    │
│  "失败的稳健性检验"同样必须如实报告。                  │
│                                                       │
│  具体要求:                                            │
│  □ 三组检验全做:主检验 + 替换变量 + 子样本            │
│  □ 所有结果写入论文表格(通常 4-6 列)                 │
│  □ 如果某组不显著,写"在 XX 条件下不再稳健"并讨论     │
│  □ 不得把不显著的稳健性检验藏在附录/脚注中            │
│  □ 表述格式统一:                                      │
│    "在替换 X 变量后,核心结论保持/不再稳健"           │
│                                                       │
│  自检方法:                                            │
│  检查你的论文稳健性表格是否有"全是星号"的可疑现象。   │
│  现实中,稳健性检验有部分不显著是正常的。              │
│                                                       │
│  反面教材:                                            │
│  · 跑了 10 种稳健性检验,只把显著的 4 种放进论文      │
│  · 稳健性表格所有列都 p<0.01——高度可疑                │
│  · "替换因变量后不显著"但论文中只字不提                │
└─────────────────────────────────────────────────────┘

S9.3 可复现三件套

┌─────────────────────────────────────────────────────┐
│  ✦ 诚信检查点 S9.3                                    │
│                                                       │
│  核心原则:                                            │
│  你的实证分析必须"一键可复现"——同学拿到你的文件夹,   │
│  运行 master.do,能得到和你论文中一模一样的表格。      │
│                                                       │
│  具体要求:                                            │
│  □ do 文件:从 use "data/raw/xxx.dta" 开始            │
│    · data/raw/ 只读存档(原始数据,绝不修改)          │
│    · do 文件生成 data/clean/(清洗后数据)             │
│    · 回归 → 表格 → 图全部在 do 文件中完成             │
│  □ data 文件夹结构:                                   │
│    · data/raw/     → 原始数据(只读)                 │
│    · data/clean/   → 清洗后数据(do 生成)            │
│    · data/derived/ → 中间变量(do 生成)              │
│  □ log 文件:                                          │
│    · 每次运行自动生成带时间戳的 log                   │
│    · log 中包含所有命令 + 输出 + 运行环境信息          │
│                                                       │
│  自检方法:                                            │
│  □ 把 master.do 发给同学从零跑一遍                    │
│  □ 对比 log 中的数字与论文表格是否完全一致            │
│  □ 确认 data/raw/ 从未被修改(对比 MD5 校验码)       │
│                                                       │
│  反面教材:                                            │
│  · "这个表格是我三个月前跑的,现在找不到代码了"       │
│  · data/raw/ 被直接修改过,无法追溯原始数据            │
│  · log 文件中的 N=450 但论文写 N=453                  │
└─────────────────────────────────────────────────────┘

S9.4 AI 辅助计量不编造系数

┌─────────────────────────────────────────────────────┐
│  ✦ 诚信检查点 S9.4                                    │
│                                                       │
│  核心原则:                                            │
│  AI 是你的"编程助手"和"翻译官",不是"数据生成器"。   │
│  论文中出现的每一个数字,都必须来自你自己的 Stata 运行。│
│                                                       │
│  具体要求:                                            │
│  □ AI 可以做:写代码 / 解释输出 / 诊断问题 / 推荐方法 │
│  □ AI 绝对不能做:                                     │
│    · 生成回归系数(如"b=0.045, se=0.012, p<0.01")  │
│    · 编造 F 统计量、R²、Hausman 检验 p 值             │
│    · 虚构"看起来合理"的稳健性检验结果                 │
│  □ 检测红线:论文中任何一个数字,导师有权要求你        │
│    当场打开 Stata 复现                                  │
│                                                       │
│  自检方法:                                            │
│  □ 打开你的 log 文件,逐一核对论文表格中的数字         │
│  □ 确认每个系数都能在 log 中找到对应输出               │
│  □ 如果你在 ChatGPT/AI 对话中看到"建议系数为..."     │
│    立即警惕——这不是你的数据                           │
│                                                       │
│  反面教材:                                            │
│  · 问 AI "帮我写一段实证结果",AI 编造了系数,        │
│    你直接复制进论文                                    │
│  · 导师要求当场跑回归,你说"我回去跑给你看"           │
│  · log 文件和论文表格数字不一致(说明表格是手打的)    │
└─────────────────────────────────────────────────────┘

本章产出物

序号产出物文件名建议说明
1实证论文草稿my_paper_v1.docx≥8000 字,含完整实证章节
2基准回归表reports/baseline.docxOLS/FE/RE 三列对照
3DID 回归表reports/did.docx双重差分主表 + 事件研究图
4中介效应表reports/mediation.docxBaron-Kenny 三步 + Bootstrap CI
5系数图figures/coefplot.pdf核心变量系数及 95% CI
6AI 使用声明ai_disclosure_v1.md开题版(说明 AI 在哪些环节参与)
7(选修)ABM 报告abm_sweep_report.mdsubsidy_sweep 四指标结果与政策建议

提交要求:产出物 1-6 为必交项,产出物 7 为选修加分项。所有文件遵循 S9.3 可复现三件套标准(do + data + log 齐备)。


自检题

1. DID 的交互项和 2×2 因子设计的交互项是什么关系?

参考答案

本质相同。教材单元 15(qmd 行 1284)给出双因素 GLM:y = β₀ + β₁·x₁ + β₂·x₂ + β₃·x₁·x₂ + ε,其中 β₃ 是交互效应。

DID 的回归方程:y = β₀ + β₁·Treat + β₂·Post + β₃·Treat×Post + ε

对应关系:

因子设计DID
因素 A(如课程类型)Treat(处理组/对照组)
因素 B(如教学时间)Post(政策前/后)
β₃ 交互效应DID 估计量(处理效应)

关键解读(qmd 行 1285):"若交互效应显著,不能独立解读主效应"——对应 DID 中"当 Treat×Post 显著时,Treat 主效应和 Post 主效应不应单独解读"。

一句话:DID 就是一个 2×2 因子设计的交互项回归,只不过因素 A 是"是否受处理"、因素 B 是"时间前后"。

2. PSM 解决选择偏差的思路和 RDD 有何不同?

参考答案
维度PSM(倾向得分匹配)RDD(断点回归)
核心思路在可观测变量上找到"长得像"的对照组利用处理分配的断点,比较断点两侧的个体
识别假设条件独立假设(CIA):给定可观测变量 X,处理分配与潜在结果无关连续性假设:潜在结果在断点处连续(无人能精确操控自己在断点哪一侧)
解决的效度威胁选择偏差(可观测部分)自选择的断点(断点附近近似随机化)
估计量ATT(处理组平均处理效应)LATE(断点附近局部平均处理效应)
外推性可推广到匹配样本范围仅适用于断点附近(外推性弱)
典型应用比较参保农户 vs 未参保农户(匹配风险偏好等)分数线录取、贫困县认定(收入低于某阈值)

一句话区别:PSM 用"统计匹配"构造反事实,RDD 用"制度断点"构造反事实。PSM 需要"所有混淆变量可观测"的强假设,RDD 只需要"断点附近无法精确操控"。

3. "换了三个控制变量组合终于显著了"——这算什么问题?(S9.1)

参考答案

这是典型的 p-hacking(p 值操纵),违反 S9.1 诚信红线。

为什么是错的

  1. 每次尝试都增加"偶然发现显著结果"的概率——如果尝试 20 次,即使真实效应为零,在 α=0.05 下平均有 1 次"显著"
  2. 只报告最后一次(显著的)= 选择性报告 = 误导读者
  3. 违反教材原则(qmd 行 1255):"模型设定应该基于对所研究的现象的理论思考,而不是什么模型能够最好地拟合观测数据"

正确做法

  1. 事前(看到数据之前)确定控制变量集——基于理论和文献
  2. 如果基准模型不显著 → 诚实报告"核心假说在本样本中未获支持"
  3. 如果想展示结论对设定的敏感性 → 画规格曲线(§9.6.2),穷举所有合理设定
  4. 讨论为什么可能不显著(样本量?测量误差?理论边界条件?)

后果:如果被发现 p-hacking,论文可能被撤稿,学术声誉受损。

4. Hausman p<0.05 但 BP-LM p>0.05 时怎么解释?

参考答案

两个检验回答不同的问题:

检验原假设 H₀p 值含义
HausmanRE 与 FE 系数无系统差异(RE 一致)p<0.05 → 拒绝 H₀ → FE 和 RE 结论不同 → 应选 FE
BP-LM不存在随机效应(σ²_u = 0)p>0.05 → 无法拒绝 H₀ → 可能不存在个体效应 → OLS 也许够用

组合解读

  • Hausman 显著 → 个体效应与解释变量相关 → FE 一致、RE 不一致
  • BP-LM 不显著 → 但个体效应的方差可能很小(σ²_u ≈ 0)
  • 结论:选 FE(因为 Hausman 告诉你 RE 有偏),但个体效应本身不大——这意味着面板结构的"个体异质性"较弱,FE 和 OLS 的结果可能很接近

实操建议:仍然用 FE(reghdfe),因为即使个体效应小,只要它与解释变量相关就会导致 OLS/RE 有偏。在论文中写:"Hausman 检验拒绝随机效应模型(χ²=XX, p<0.05),故采用固定效应估计。"

5. IV 第一阶段 F<10 意味着什么?

参考答案

弱工具变量问题(Weak IV)

第一阶段 F 统计量检验的是"工具变量 Z 对内生变量 X 的解释力"。经验法则(Stock & Yogo, 2005):

第一阶段 F诊断后果
F > 10工具变量强度可接受2SLS 估计近似无偏
F < 10弱工具变量2SLS 估计严重偏误,可能比 OLS 更差
F < 5极弱工具变量2SLS 完全不可信,置信区间无意义

为什么会这样:当 Z 与 X 的相关性很弱时,2SLS 本质上是在"放大噪声"——用 Z 中微弱的变异去"纯化" X,结果纯化出来的部分几乎全是噪声。

应对措施

  1. 换更强的工具变量(找与 X 相关性更高的 Z)
  2. 使用多个工具变量(过度识别),但每个都要通过 Sargan/Hansen J 检验
  3. 如果实在找不到强 IV → 诚实地放弃 IV 策略,改用其他识别方法(DID/PSM/RDD)
  4. 报告:"第一阶段 F=6.3,低于 Stock-Yogo 临界值 10,工具变量较弱,结果需谨慎解读"

6. sgmediation 的 Sobel 检验 p<0.05 但 Bootstrap 区间包含 0 怎么办?

参考答案

以 Bootstrap 结果为准,报告"中介效应不显著"。

原因分析

  • Sobel 检验假设间接效应 a·b 服从正态分布
  • 但乘积分布(a·b)通常是偏态的(右偏或左偏)
  • 正态假设导致 Sobel 检验在某些情况下过度拒绝 H₀(假阳性偏高)
  • Bootstrap 不依赖分布假设,直接从数据中构造置信区间,更准确

论文写法

"Sobel 检验表明中介效应边际显著(Z=1.98, p=0.048),但 Bootstrap 1000 次的 95% 偏差校正置信区间为 [-0.003, 0.041],包含 0。鉴于 Sobel 检验依赖正态性假设而乘积分布通常偏态,本文以 Bootstrap 结果为准,认为中介效应证据不足。"

进一步建议

  1. 增加 Bootstrap 次数(如 5000 次)看区间是否收窄
  2. 检查中介变量 M 的测量是否有较大误差
  3. 考虑是否存在多个并行中介路径(单一路径效应被稀释)
  4. 诚实报告"中介机制的证据不充分,需进一步研究"

7. 方向题:为你的假说选识别策略并说明它对应解决哪条效度威胁。

参考答案框架

答题模板(三步):

步骤你需要回答示例
① 明确假说X → Y 是什么?"公司治理水平(X)提升银行盈利能力(Y)"
② 识别效度威胁什么因素可能让 X-Y 关系是虚假的?"遗漏变量:管理能力同时影响治理和盈利"
③ 选择识别策略用什么方法排除这个威胁?"FE 消除不随时间变的遗漏变量;或用行业平均治理水平作 IV"

三方向参考

  • 【金】"资本结构(杠杆率)→ 企业价值"

    • 威胁:反向因果(高价值企业主动选择高杠杆)
    • 策略:IV(用行业平均杠杆率作工具)或滞后一期自变量
  • 【险】"农业保险参保 → 农户收入稳定性"

    • 威胁:选择偏差(风险厌恶者更倾向参保,本身收入就更稳定)
    • 策略:PSM(匹配风险偏好、土地规模等)或 DID(利用保险试点政策的时间差异)
  • 【农】"微型金融可得性 → 农户创业概率"

    • 威胁:遗漏变量(社会网络同时影响贷款可得性和创业)
    • 策略:IV(用村庄到最近银行网点的距离作工具)或 RDD(利用信用评分阈值)

关键要求:必须说清楚"为什么这个策略能解决这条效度威胁",而不只是列名字。


下一章预告:第 9 章走的是"回归路线"——用统计模型从数据中识别因果。但并非所有研究问题都适合回归。第 10 章将进入"案例研究路线":当你的问题是 How 型("某政策是如何落地的?")或 Why 型("某银行为何失败?")时,案例研究能给你回归给不了的过程性洞察。两条路线不是对立的——好的专硕论文常常是"案例 + 数据"混合设计。


📦 本章配套资源

下载配套 notebook:Wooldridge 教材数据 + Python 复现实战(.ipynb,用 Qoder / Jupyter / VS Code 打开):

  • pip install wooldridge linearmodels 后开箱即跑,111 个教材数据集四类实证设计全流程(OLS → 面板 FE → IV/2SLS → 时间序列)
  • 每个回归均与教材例题答案对照(例 2.4/3.1、14.1、第 15 章 Card IV、第 11 章期限结构)——答案对不上就是代码错了
  • 含 Stata ↔ Python 命令对照表与「两个取数坑」提示

农村金融业务及监管 2026 秋季 | AI 辅助金融研究学生自学手册


本站教学资源仅供四川农业大学选课学生学习使用,版权归原作者所有,未经授权不得转载、转发或用于商业用途