实证方法教程 / rwolf

Romano-Wolf 多重检验校正

把内生性、稳健性和标准误问题说清楚

这节课解决什么用于处理内生性、弱识别、标准误、空间相关或多重检验等识别风险。
先准备哪些变量因变量 / 核心解释变量
会看到哪张表rwolf_results.csv
论文里怎么克制解释披露校正口径和失败/不可用状态,不把补充诊断伪装成主规格显著性。

Romano-Wolf 多重检验校正是什么?

Romano-Wolf 处理的是多重检验带来的误报风险。你同时检验很多结果、很多机制或很多子组时,总会更容易碰到偶然显著;它要回答的是校正以后哪些结论仍然站得住。

先用一句话理解

把 Romano-Wolf 想成给一组 p 值做严格复查。不是每个 p 值各看各的,而是问:在整组检验里,最极端的随机结果会不会已经足以解释这些星号。

什么时候用

判断项教科书式判断
适合用在同一理论下同时检验多个结果变量、多个处理效应或多个机制。
先不要用在检验 family 没有事先定义,只是把所有跑过的表事后塞在一起。
最关键的前提family 的边界必须清楚,重抽样方式要和样本依赖结构匹配。
读表顺序先看 adjusted p-value,再看原始 p 值。
论文表述边界原始 p 显著但校正 p 不显著时,不能写成稳健显著。

把它和相近方法分清楚

容易混淆的对象怎么区分初学者记法
原始 p 值每个检验单独判断显著性。检验越多,误报概率越高。
Bonferroni用简单保守规则校正。容易过度保守。
Romano-Wolf用 stepdown 重抽样控制 family-wise error。保留检验之间的相关结构。

核心直觉和模型公式

校正后的 p 值

Romano-Wolf 关注一组检验统计量中的最大极端程度:

\[p^{adj}_j=Pr\left(\max_{k\in H}|T_k^*|\ge |T_j|\right)\]

H 是同一个 family 里的假设集合;星号表示重抽样世界中的检验统计量。

公式里的符号怎么读

符号含义在本页怎么理解
H检验 family同一理论问题下同时被检验的一组假设。
T_j真实检验统计量第 j 个假设在原始样本中的统计量。
T_k*重抽样统计量在 bootstrap 或置换世界中得到的统计量。
max最极端统计量用整组检验里最极端的随机结果控制误报。
p_adj校正 p 值正文应优先报告和解释的 p 值。

专业使用口径

Romano-Wolf 的重点是校正 p 值,不能只把它当作“又一张稳健性表”。

口径专业写法
family 定义说明哪些假设被放在同一个多重检验组。
重抽样层级面板或聚类数据应考虑在合适层级重抽样。
stepdown 顺序校正通常按统计量显著程度逐步进行。
正文写法优先写 adjusted p-value,原始 p 值只能作为参照。

一步一步做:从问题到结果的五步

步骤这一页具体做什么做到什么程度才算读懂
1. 先定义 family把同一研究问题下的多个假设放在一起。不要事后为了结果好看调整 family。
2. 固定每个模型每个假设对应的主模型不能在重抽样中随意改变。模型变化会混入规格搜索。
3. 重抽样统计量在重抽样世界里计算整组检验统计量。要保留样本依赖结构。
4. 计算校正 p 值比较真实统计量和重抽样最大统计量。读校正 p,不读原始星号。
5. 写出结论变化说明哪些结论校正后仍显著,哪些不再显著。校正后不显著不能沉默处理。

结果怎么读:先读口径,再读数字

本页案例读表时,先记住这个口径:ln Patent raw p = 0.0016;同一核心变量在多个结果变量上的未校正 p 值。

读表顺序本页怎么读不要这样读
先看 family这组校正到底覆盖了哪些结果或模型。family 不清楚,校正 p 值没有解释对象。
再看 adjusted p校正后仍显著的结果才更稳。不要用原始 p 值写正文结论。
然后看原始 p原始 p 只能帮助理解校正幅度。不能用原始星号覆盖校正结果。
最后看重抽样次数次数少时 p 值分辨率有限。不要过度解释小数点后三位。

初学者最容易错在哪里

误读为什么错
只报告原始 p 值错。Romano-Wolf 的目的就是校正原始 p 值。
事后拼 family错。family 应和理论问题对应。
校正后不显著还写稳健错。这恰恰说明多重检验风险不可忽略。
把多重检验当主规格错。它是推断校正,不是新的主模型。

先看这个案例的结论

  • ln Patent raw p = 0.0016;同一核心变量在多个结果变量上的未校正 p 值。
  • Patent raw p = 0.9177;同一核心变量在多个结果变量上的未校正 p 值。
  • High patent raw p = 0.0000;同一核心变量在多个结果变量上的未校正 p 值。
  • 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。

变量要求和案例口径

字段口径
数据CSMAR 风格 A 股企业创新面板
原始样本196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准
因变量patent_count;回归页通常使用 ln(1 + patent_count)
核心解释变量dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index
控制变量roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age
输出文件rwolf_results.csv
角色要求因变量、核心解释变量
依赖包rwolf2

实际代码

下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。

import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year

global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0

rwolf $y patent_count high_patent, indepvar($x) controls($controls i.year) reps(999)
export delimited using "$JOB_DIR/rwolf_results.csv", replace

实际输出表

这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。

指标数值解释
样本1200 obs / 196 firms / 2015-2020来自共用案例 CSV
因变量ln(1 + patent_count)企业创新产出
核心解释变量dfi_index数字普惠金融指数
输出文件rwolf_results.csvempirical-wizard 对应方法产物
ln Patent raw p0.0016同一核心变量在多个结果变量上的未校正 p 值
Patent raw p0.9177同一核心变量在多个结果变量上的未校正 p 值
High patent raw p0.0000同一核心变量在多个结果变量上的未校正 p 值
校正思路stepdown / Romano-Wolf页面展示 raw p,正式报告用重抽样校正后的 p 值

案例图

这是一张由同一份案例数据生成的页面内诊断图。

Romano-Wolf 多重检验校正 的共用案例输出图。
Romano-Wolf 多重检验校正 的共用案例输出图。

论文里怎么写

为缓解模型设定或内生性担忧,本文补充报告Romano-Wolf 多重检验校正。相关估计输出见 rwolf_results.csv。该检验不替代研究设计本身,但可以说明核心结论在替代识别、标准误或稳健性口径下是否保持一致。

检查清单

  • 先定义同一个 family 里包含哪些假设,不能事后只把显著项拿来校正。
  • 正文优先报告 Romano-Wolf 校正 p 值,原始 p 值只能作为参考。
  • 校正后不显著时,不能继续把该结果写成稳健显著。

返回教程库 · 查看共用案例