你有没有想过:为什么有人打伞的地方,路面总是湿的?如果按这个逻辑,打伞简直是“路面浇水器”。但三岁小孩都知道真相——是“下雨”同时导致了“打伞”和“路面湿”。统计学家把这件事讲得更严谨:打伞与路面湿之间存在“假相关”,根源是一个共同的“幕后推手”——下雨。要揭穿这个假象,只需做一件事:先把“是否下雨”控制住,再看打伞与路面湿之间还剩下多少“私下的默契”。如果控制之后两者毫无关联,我们就说它们在给定“下雨”的条件下是相互独立的。 判断“控制住第三者之后,两个变量是否还纠缠不清”的统计方法,就是本文的主角——条件独立检验。它不直接回答“谁导致谁”,而是先回答更基础的问题:“这两个变量之间,到底有没有直接联系?”因果发现算法正是靠一次次这样的检验,像侦探一样层层筛掉共因制造的假象,最终拼出因果图。针对连续数据与离散数据,统计学家准备了不同的检验工具;再加上条件集搜索与显著性校准这两门手艺,你就能成为一名合格的“因果侦探”。
条件独立检验是因果发现的“侦察手段”:学会它,你才能分辨真正的因果链与共因制造的巧合,这是构建因果图与贝叶斯网络的基本功。
目录
可视化演示
动态演示条件独立检验的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
条件独立检验:条件独立 条件独立性检验的统计框架与因果 Fisher Z检验与偏相关系 核心机制可视化 条件独立检验整体架构与关键组件
条件独立概念:侦探的“隔离审问”思维
侦探小说里有个经典桥段:两位嫌疑人总在同一时间出没,看起来配合默契。老练的侦探不会急着下结论,而是先把“中间人”支开——分别单独审问。如果支开中间人后,两人说辞立刻对不上,说明之前的“默契”全靠中间人传话;如果单独审问时依然口径一致,才说明他们之间有直接联系。这个“支开中间人再审问”的套路,正是条件独立思想的生活原型。
在因果发现中,“嫌疑人”是两个变量 X 和 Y,“中间人”是第三个变量 Z。我们关心的问题是:在给定 Z 的条件下,X 与 Y 是否仍然相互依赖?如果给定 Z 后,X、Y 变得毫不相干,就说它们在给定 Z 时条件独立。注意——这里强调“给定 Z”,因为脱离条件谈独立,结论很可能被共因欺骗。
正式定义写在概率语言里:对任意取值 x、y、z,已知 Z 时的联合分布可以拆成两个边缘分布的乘积。
把因果图画出来,这个道理更直观:Z 同时在“指挥”X 和 Y,形成 X ← Z → Y 的结构。在这个共因结构下,X、Y 边缘上看高度相关,但给定 Z 后条件独立;反过来,若结构是 X → Z ← Y(对撞结构),边缘可能独立,条件后反而相关。可见“相关”与“条件独立”是两套完全不同的信息——侦探的职责,就是通过条件独立检验识别出哪些“相关”只是共因制造的假象。
- 条件概率记号P(X,Y|Z) 表示在已知 Z 取值的条件下,X 与 Y 联合出现的概率。
- 乘积分解若联合概率能拆成 P(X|Z) 与 P(Y|Z) 的乘积,说明给定 Z 后,知道 X 不会改变 Y 的分布规律。
- 独立记号X⊥Y|Z 是“条件独立”的速记符号,读作“X 与 Y 在给定 Z 时独立”。
检验框架总览:侦探的“证据规则”
侦探办案不能靠一句“我觉得他俩没关系”交差,得有白纸黑字的证据规则。统计学家更“较真”:先假设嫌疑人清白,即原假设 H0:X 与 Y 条件独立;然后问——如果清白是真的,我们观察到当前这种“巧合”的概率有多大?这个概率就是 p 值。
判决标准很直观:p 值越小,“清白假设”越难为当前数据圆谎。通常约定阈值 α=0.05(也可取 0.01 或 0.1)。若 p<α,就拒绝原假设,认定 X 与 Y 存在条件依赖;若 p≥α,证据不足,维持“条件独立”的结论。注意“证据不足”不等于“证明独立”——这是后文要反复强调的点。
数学上,任何条件独立检验都包含一个统计量 T(由样本计算出的数字,如 Fisher Z 值、卡方值),p 值定义为:
这套规则像侦探的办案流程表:受理案件(设定 H0)→ 收集证据(计算统计量)→ 评估巧合概率(p 值)→ 作出裁决。后文三种检验方法——Fisher Z、卡方、G 平方——本质都是这套流程的具体工具,只是“证据形式”不同。
- 统计量 T由样本数据计算出的一个汇总数字,不同检验方法有不同的 T。
- 观测值 t_obs你这份数据实际算出来的统计量数值,是“已发生的事实”。
- 尾部概率p 值是在 H0 成立的假设世界里,统计量比实际观测值更极端的概率。
- 判决规则p<α(通常 α=0.05)→ 拒绝 H0;p≥α → 不拒绝,维持条件独立。
Fisher Z 检验:连续世界的“精密卷尺”
路面湿度、体温、基因表达量都是连续变量,侦探需要一把能“扣除干扰”的精密尺。思路很朴素:既然怀疑 Z 在背后捣鬼,就先让 Z 分别对 X、Y 做回归,把 Z 能解释的部分剔除掉,剩下的残差就是“洗过澡”的干净信号。两个残差之间的相关系数,就是偏相关系数 r_{XY·Z}——它度量的是“扣掉 Z 之后,X、Y 还剩多少私下互动”。
偏相关的计算有简洁的公式:从 X、Y、Z 两两之间的相关系数出发,把 Z 对二者的共同贡献减掉,再归一化。
但直接用偏相关做检验有个麻烦:r 的抽样分布不稳定,越靠近 ±1 越“拧巴”。Fisher 先生的妙招是做变换 arctanh(r),把 r 映射到全体实数,使分布快速逼近正态。于是检验统计量为:
多个条件变量时,偏相关可用相关矩阵求逆的通用算法计算。有了这把精密尺,连续世界的因果侦探如虎添翼:在 PC 算法的骨架发现阶段,每判断“某条边是否该删”,就对候选条件集做一次 Fisher Z 检验。尺子越准,因果图越接近真相。
- Z 变换½·ln((1+r)/(1-r)) 就是 arctanh(r),把 r 从 (-1,1) 映射到全体实数并稳定方差。
- 样本量修正√(n-|S|-3) 中,|S| 是条件集中变量的个数;样本越大、条件越少,信息越足。
- 标准正态变换后的 z 在原假设下服从标准正态分布,查表或调用软件即可得到 p 值。
卡方检验:离散世界的“对质表”
现实中有大量离散变量:打不打伞、路面干不湿、是否吸烟。侦探手里的证据从“尺子”换成“计数表”。做法是:在 Z 的每个取值层内,把 X、Y 的联合频数整理成一张 I×J 列联表(对质表),然后问:如果 X、Y 无关,每个格子“理应”有多少人?
“理应”的期望频数由行、列合计推出来:若行列独立,格子期望数 = 该行合计 × 该列合计 ÷ 层内样本总数。
实际人数与期望人数差距越大,越说明 X、Y 暗中有联系。把所有格子的偏差平方归一后累加,得到卡方统计量;自由度则要乘上条件变量的水平数。
卡方检验就是侦探的“人口普查法”:把每个“中间人在场”的小圈子分别清点人数、对比账目,任何一个圈子里账目对不上,就说明两人有私下勾连。在贝叶斯网络结构学习中,离散变量的条件独立判断绝大多数靠它。
- 偏差平方归一每个格子“实际-期望”的平方除以期望,偏差越大的格子贡献越多。
- 跨层累加对条件集中每个 Z 层内的所有格子求和,等效于把各层证据汇总。
- 自由度(I-1)(J-1) 是单层二维表的自由度,再乘上各条件变量水平数之积得到总自由度。
G 平方检验:卡方的“高精度天平”
卡方检验像弹簧秤,只关心“差值平方”;G 平方检验则像精密天平,基于似然比原理:分别比较“X、Y 有关”和“X、Y 无关”两个模型对数据的解释力,用对数似然比衡量数据更支持谁。
Wilks 定理保证:在原假设下,对数似然比的两倍近似服从卡方分布,自由度与卡方检验完全相同。因此 G 平方与卡方是“同分异构”的检验。
两者大样本下渐近等价;差异出现在小样本与稀疏列联表——大量格子期望频数小于 5,甚至出现零计数时,卡方近似变粗,G 平方对稀有事件更敏感,但极端稀疏时也会膨胀。工程上可用加 0.5 平滑或精确检验兜底。主流因果发现工具(pcalg、gCastle)默认用卡方,稀疏数据场景建议改 G 平方。回到侦探故事:如果“下雨且打伞”的样本少得可怜,弹簧秤可能“砰”地失衡,精密天平却能细腻衡量证据——选对工具,才不至于在数据稀薄的角落冤枉好人。
- 观测频数O_ij 是列联表中第 i 行第 j 列的实际计数。
- 比值取对数ln(O/E) 度量“实际相对期望”的偏差方向与强度,偏离越远绝对值越大。
- 加权求和乘 2以实际频数为权重累加所有格子的对数偏差,整体乘 2 来自似然比检验的 -2lnΛ。
条件集搜索:侦探的“排查艺术”
现实里“中间人”不止一个。侦探要判断 X、Y 之间是否真有直接联系,必须排查所有可能传话的候选人:先怀疑只有 Z1 在传话(条件集 {Z1}),再怀疑 Z1 和 Z2 合伙(条件集 {Z1,Z2})……只要存在某个条件集 S,使得给定 S 后 X、Y 独立,就说明没有证据支持直接关系。
候选条件集的数量随变量数爆炸式增长:p 个变量中挑 k 个做条件集,有 C(p,k) 种;全部可能条件集加起来是 2^p。
PC 算法用两招破解:一是“从小到大增广搜索”,先测空集、再测单变量条件集……一旦在某个小条件集下判定独立,立刻停止扩大;二是“剪枝”,每判定一条边独立就删除该边,并从后续候选条件集中剔除它,搜索空间快速收缩。侦探的排查同样如此:先从与双方都有交集的最可疑中间人审起;若他在场时两人毫无默契,立刻结案,不必把全城人叫来。条件集搜索的每次剪枝,都是为因果发现省下的办案时间。
- 组合数C(p,k) 表示从 p 个变量中挑选 k 个作为条件集的方式数。
- 总量翻倍所有可能条件集总数是 2^p,p=20 时超过一百万,逐一枚举不现实。
显著性校准:别让误判在“多案并查”中浑水摸鱼
侦探接手的连环案越来越多,他给自己定规矩:每案误判率不超过 5%。可当 100 个互不相干的案件同时过堂时,就算全部清白,按 5% 也会冤枉约 5 起。因果结构学习里,检验次数动辄成千上万,单次 α=0.05 会让大量伪边混入骨架。
校准策略分两派:控制“家族错误率”(FWER,确保至少误报一次的概率 ≤ α)和控制“错误发现率”(FDR,控制所有“显著”结论中误报的占比)。前者代表作是 Bonferroni,后者代表作是 Benjamini-Hochberg(BH)。
实际选择:误报代价高、检验次数适中→Bonferroni;希望保留更多候选边、样本量大→FDR。因果发现软件中常对条件独立检验不做过度惩罚(骨架搜索本身有局部性),但特征选择与学术汇报应有校正。侦探最终明白:审的案子越多,越要克制“看谁都可疑”的冲动。统计显著不等于因果显著——经过校准的结论,才敢写进结案报告。
- Bonferroni 摊薄把单次显著性水平 α 除以检验次数 m,使总误报率控制在 α 以内。
- BH 的 q 值把 m 个 p 值从小到大排序,第 i 小的 p 值乘以 m/i 得到 q 值,q<α 才判显著。
- 判决规则q_{(i)}<α 时拒绝对应原假设;m=1 时退化为普通单次检验。
AI 应用场景
基因调控网络推断
阶段:因果结构学习 / 特征筛选
解决的问题:基因表达数据是典型的连续变量,成千上万个基因两两相关性极高,但大量相关是“共表达”假象(共享同一转录因子)。传统做法直接算相关矩阵并画热图,无法区分“直接调控”与“间接共因”。用 Fisher Z 条件独立检验,在控制候选调控基因后判断两个基因是否真正直接相关,从而构建可靠度更高的基因调控网络。
具体案例:某研究团队在单细胞 RNA 测序数据上用 PC 算法骨架学习,对每个基因对在每个候选条件集下做 Fisher Z 检验,保留 p<0.01 的边。结果在 T 细胞分化数据中不仅压缩了 90% 以上的候选边,还成功找回了已知的转录因子调控子结构。
电商用户行为贝叶斯网络
阶段:贝叶斯网络结构学习 / 特征选择
解决的问题:用户行为都是离散事件(点击/加购/下单、是否领券、是否新客),且存在大量伪装成因果的“相关性”——领券用户购买率高,可能只是因为他们本来就有购买意向。“是否领券”与“是否下单”在控制“用户活跃度”后是否仍然关联?这正是卡方/G 平方条件独立检验的用武之地。
具体案例:某电商平台用 Bnlearn 库对 20 个用户行为变量做贝叶斯网络结构学习,内部启用 G² 检验。结果发现“领券”→“加购”的直接边在控制“优惠敏感度”后变得不显著,团队据此把营销资源从“无差别发券”转向“对敏感用户精准投放”,转化率提升了 12%。
Python 演示
import numpy as npfrom scipy import stats def fisher_z_ci_test(x, y, z, alpha=0.05): # 连续变量条件独立检验: 控制 Z 后 X 与 Y 是否独立 (Fisher Z) if z.ndim == 1: z = z.reshape(-1, 1) zmat = np.column_stack([z, np.ones(len(z))]) beta_x, _, _, _ = np.linalg.lstsq(zmat, x, rcond=None) beta_y, _, _, _ = np.linalg.lstsq(zmat, y, rcond=None) rx = x - zmat.dot(beta_x) ry = y - zmat.dot(beta_y) r = np.corrcoef(rx, ry)[0, 1] k = z.shape[1] zstat = np.sqrt(len(x) - k - 3) * 0.5 * np.log((1 + r) / (1 - r)) p = 2 * (1 - stats.norm.cdf(abs(zstat))) return {"corr": r, "zstat": zstat, "p": p, "independent": p >= alpha} def discrete_ci_test(data, x, y, z, method="chi2"): # 离散变量条件独立检验: 卡方 / G 平方, 控制 Z 后 X 与 Y 是否独立 xs = sorted({row[x] for row in data}) ys = sorted({row[y] for row in data}) zs = sorted({row[z] for row in data}) stat = 0.0 dof = 0 for zv in zs: table = np.zeros((len(xs), len(ys))) for row in data: if row[z] == zv: table[xs.index(row[x]), ys.index(row[y])] += 1 n = table.sum() if n == 0: continue expected = table.sum(axis=1, keepdims=True) * table.sum(axis=0, keepdims=True) / n mask = expected > 0 o, e = table[mask], expected[mask] if method == "g2": stat += 2 * (o * np.log(o / e)).sum() else: stat += ((o - e) ** 2 / e).sum() dof += (len(xs) - 1) * (len(ys) - 1) p = 1 - stats.chi2.cdf(stat, dof) return {"stat": stat, "dof": dof, "p": p, "independent": p >= 0.05} if __name__ == "__main__": rng = np.random.default_rng(42) n = 500 z = rng.normal(size=n) x = 0.8 * z + rng.normal(size=n) y = 0.8 * z + rng.normal(size=n) r0 = np.corrcoef(x, y)[0, 1] print("无条件相关系数 r=%.3f (看似相关!)" % r0) res = fisher_z_ci_test(x, y, z) print("FisherZ: r=%.3f, z=%.3f, p=%.4f -> 独立? %s" % (res["corr"], res["zstat"], res["p"], res["independent"])) dz = rng.integers(0, 2, n) dx = np.where(rng.random(n) < 0.9, dz, 1 - dz) dy = np.where(rng.random(n) < 0.9, dz, 1 - dz) data = [{"x": int(a), "y": int(b), "z": int(c)} for a, b, c in zip(dx, dy, dz)] r2 = discrete_ci_test(data, "x", "y", "z", "chi2") r3 = discrete_ci_test(data, "x", "y", "z", "g2") print("卡方: stat=%.3f, df=%d, p=%.4f -> 独立? %s" % (r2["stat"], r2["dof"], r2["p"], r2["independent"])) print("G平方: stat=%.3f, df=%d, p=%.4f -> 独立? %s" % (r3["stat"], r3["dof"], r3["p"], r3["independent"]))
rx = x - zmat.dot(beta_x)把 Z 对 X 的线性贡献回归掉,得到“洗过澡”的残差。zstat = np.sqrt(len(x) - k - 3) * 0.5 * np.log((1 + r) / (1 - r))Fisher Z 变换并乘样本量修正,构造标准正态统计量。p = 2 * (1 - stats.norm.cdf(abs(zstat)))双侧 p 值,与标准正态分布比较。expected = table.sum(axis=1, keepdims=True) * table.sum(axis=0, keepdims=True) / n用行列合计推算“假设无关”时的期望频数。stat += ((o - e) ** 2 / e).sum()逐层累加卡方统计量。stat += 2 * (o * np.log(o / e)).sum()切到 G 平方模式:以实际频数为权重的对数似然比。dof += (len(xs) - 1) * (len(ys) - 1)每个 Z 层的自由度合并,等价于乘以条件变量水平数。dx = np.where(rng.random(n) < 0.9, dz, 1 - dz)构造与 Z 强相关的“假 X”,用于验证检验能否识破共因。
常见误区
误区“我算了一下,X 和 Y 的相关系数很高,p 值 < 0.001,所以它们肯定有关系,可以直接画因果边。”
正解高相关只能说明“边缘依赖”。若存在共同原因 Z(如“下雨”同时影响“打伞”和“路面湿”),X、Y 会被 Z“牵着走”产生假相关。必须在给定候选条件集后重新检验:若控制 Z 后独立性成立,说明 X、Y 之间没有直接因果证据。这正是辛普森悖论的教训——合并数据会骗人,分层(条件化)才见真相。
为何常见:人的直觉天然把“一起出现”等同于“有联系”;而教科书先讲皮尔逊相关,学习者容易把第一步的结论当成最终结论。
误区“反正都是检验独立性,连续变量数据我也用卡方,离散变量我用 Fisher Z,都一样。”
正解Fisher Z 基于偏相关,要求 X、Y、Z 近似连续且关系为线性;卡方/G 平方基于频数列联表,要求变量离散。把连续变量强行离散化(如中位数切分)会损失信息甚至扭曲相关结构;把离散变量当连续变量算相关则毫无意义。选择检验前先问:数据是连续尺子还是离散计数器。
为何常见:很多工具库“一键检验”屏蔽了内部差异,用户只看到“输出一个 p 值”,想当然认为可互换。
误区“条件集里变量越多越严谨,我把所有其他变量都放进去,控制得干干净净。”
正解条件集过大有两个问题:一是样本被层层细分,每个格子数据稀疏,检验功效骤降(明明有依赖也检不出);二是自由度随条件水平数快速增长,极端情况下 p 值失去意义。好的条件集搜索遵循“从最小集开始、够用即停”策略——能判定独立就不再扩大。
为何常见:控制变量在日常语境里常被理解为“越多越安全”,但统计检验是要用数据“喂”自由度的,样本量有限。
误区“我把图上所有邻居都测了一遍,只要有一次 p < 0.05 就能说明这条边存在。”
正解检验次数 m 越大,纯随机数据里出现 p<0.05 的期望次数就越多(约 m×0.05)。因果骨架搜索常在成千上万次检验后进行边判定,应做 Bonferroni(严格控制误报)或 FDR(控制错误发现比例)校正,并把校正后的结论作为报告依据。
为何常见:单次检验的教材惯例深入人心,“多重比较”概念属于进阶内容,入门者容易踩坑。
误区“检验的 p 值是 0.3,说明 X 和 Y 条件独立,我可以放心地不画这条边了。”
正解p>0.05 只是“证据不足以拒绝原假设”,不等于“证明独立成立”。样本量小或检验功效低时,p>0.05 可能只是“没发现”而不是“不存在”。因果发现里,通常会结合独立性样本量判断、bootstrap 稳定性分析或额外依赖度量(如互信息估计)来佐证。
为何常见:假设检验的二元判决(拒绝/不拒绝)容易被误解为“独立/不独立”的绝对结论;初学者不熟悉两类错误与检验功效的概念。
面试题
Q1. 关于条件独立 X⊥Y|Z,下列说法正确的是?
- A.X 与 Y 在任何情况下都互不影响
- B.给定 Z 后 X 与 Y 不再互相提供信息← 正确答案
- C.存在 Z 使 X 与 Y 永远独立于一切
- D.X、Y、Z 三者两两之间完全无关
答案:B。条件独立只承诺“在给定 Z 的每个取值下,X、Y 不互相提供额外信息”。A 把它夸大成“永远无关”,C 表述混乱(“独立于一切”不成立),D 混淆了条件独立与两两独立。就像侦探只证明“支开中间人后两人对不上供词”,不代表两人在任何场合都没关联。
Q2. 打伞(X)与路面湿(Y)高度相关,控制下雨(Z)后相关性消失,这说明?
- A.打伞行为会直接导致路面变湿
- B.下雨是 X、Y 关系里的混杂因素← 正确答案
- C.Z 是打伞与湿路面之间的中介变量
- D.X 与 Y 二者完全无关互不影响
答案:B。打伞与路面湿的强相关被“下雨”这个共因同时驱动,控制 Z 后相关消失,说明 Z 是混杂因素。若 Z 是中介(X→Z→Y),控制后 X、Y 的关联通常只是减弱而非消失;本例 X、Y 无直接因果,B 正确。
Q3. 处理连续变量之间的条件独立检验,首选方法是?
- A.卡方检验和 G 平方检验方法
- B.Fisher Z 检验或偏相关检验← 正确答案
- C.列联表频数全部两两求和
- D.把连续数据离散化成 0/1 值
答案:B。连续变量的线性关联用偏相关/Fisher Z 检验最自然;卡方/G 平方围绕频数列联表设计,适用于离散计数数据。把连续数据硬切成 0/1 会损失大量信息,一般不推荐。
Q4. Fisher Z 变换(arctanh(r))的主要作用是?
- A.让相关系数取值范围扩展到实数域
- B.使样本偏相关分布近似正态化← 正确答案
- C.将偏相关值压缩到零到一之间
- D.消除条件变量之间所有共线性
答案:B。arctanh 将 r∈(-1,1) 映射到 (-∞,+∞) 并使其抽样分布快速趋于正态、方差近似稳定——这是假设检验的前提。A 只是伴随表象而非目的;C 方向反了(是扩展而非压缩);D 与检验无关。
Q5. 在 Z 的每一层内构建 I×J 列联表做条件独立检验,自由度 df 为?
- A.(I-1)(J-1) 乘以条件变量水平数之积← 正确答案
- B.(I+J) 减去样本数量的平方根
- C.I×J 减去总样本数后再加一
- D.(I-1)(J-1) 再加上条件集变量个数
答案:A。各 Z 层内的检验相互独立,总自由度等于单层二维表的自由度 (I-1)(J-1) 乘以各条件变量水平数之积。其余选项都没有统计依据。
Q6. 关于 G² 统计量与卡方统计量的关系,正确的是?
- A.两者在任何情况下都严格相等
- B.大样本渐近等价小样本表现有别← 正确答案
- C.G 平方检验比卡方少一个自由度
- D.卡方检验只适用于二维的 2×2 表
答案:B。大样本下 G² 与 χ² 近似相等;小样本或稀疏列联表中,两者对零频、低期望格子的处理不同,表现有差异。二者自由度相同,C 错误;卡方可用于任意 I×J 表,D 错误。
Q7. Fisher Z 检验中统计量 z=√(n-k-3)·arctanh(r),其中 k 表示?
- A.数据集中所有变量的总个数
- B.条件集中变量的个数即 |S|← 正确答案
- C.列联表中行数加列数的和
- D.检验重复执行的总次数
答案:B。k=|S| 是条件集中变量的个数。样本量 n 越大信息越多,条件变量越多消耗自由度越多,√(n-k-3) 正是这种平衡的体现。A 混淆了总变量数与条件个数,D 是多重检验的概念。
Q8. 下列哪些做法属于条件集搜索的正确策略?
- A.从大小为 0 的条件集开始逐步增大← 正确答案
- B.一旦找到独立条件集立即停止扩大← 正确答案
- C.无条件枚举全部 2^p 个条件集
- D.用已删边的信息来剪枝候选集← 正确答案
答案:ABD。PC 算法从空集开始增广搜索,一旦判定独立就停止扩大,并用已删边更新候选条件集,大幅缩减搜索空间。C 是典型的“组合爆炸”错误做法,p=20 时超过一百万次检验,既不现实也没必要。
Q9. 关于多重检验校正,下列说法正确的有?
- A.Bonferroni 将 α 除以总检验次数← 正确答案
- B.FDR 控制所有拒绝中误报的比例← 正确答案
- C.校正使单次检验门槛变得更宽松
- D.多重检验只影响离散数据检验
答案:AB。Bonferroni 用 α/m 控制“至少一次误报”的概率;FDR 控制所有“显著”结论中误报的占比。校正使每个单次检验的门槛更严格而非更宽松,C 错误;多重检验影响一切统计检验方法,D 错误。
Q10. 在因果发现中使用条件独立检验,应注意哪些事项?
- A.连续变量用 Fisher Z 并检查线性假设← 正确答案
- B.离散稀疏列联表需谨慎或加平滑← 正确答案
- C.p 值显著即证明因果方向完全确定
- D.报告时注明条件集和校正方法← 正确答案
答案:ABD。A、B、D 都是正确实践。条件独立检验只能判断“是否有直接边的证据”,无法单独确定因果方向(方向还需结合 v 结构与干预实验);C 把“显著拒绝独立”过度解读成“因果方向已定”,是入门者最常犯的错误。