主题
02 · 工具变量选择
对应模块:R/04_iv_select.R参考:Zheng 2020;Staiger & Stock 1997;Pierce 2011
作用
从标准化后的暴露数据里,选出满足 MR 相关性假设的工具变量(IV)。编排函数 select_instruments() 依次做四步,并全程记录 SNP 流水账(STROBE-MR item 10a 流程图):
raw → 显著性 → cis 窗口 → LD clumping → F≥10 剩余1. 显著性阈值(apply_significance)
按分析模式取阈值(iv: 段可调):
cis模式:pval_cis = 5e-6(cis 区域先验强,阈值放宽)genome_wide模式:pval_genome_wide = 5e-8(全基因组显著)
2. cis 窗口过滤(apply_cis_window,仅 cis 模式)
以基因的 TSS/TES 为中心,取 ±cis_window_kb(默认 500kb,可改 1000=±1Mb)内的 SNP。窗口由 resolve_cis_window()(01_config.R)解析:优先用暴露条目里显式的 chr/tss/tes,否则查 gene_annotation 按基因名定位。
window = [ min(tss,tes) − 窗口 , max(tss,tes) + 窗口 ]3. LD clumping(clump_iv)
去掉连锁不平衡(LD)冗余,保留近独立的工具。两种后端:
local:本地 PLINK 二进制 + 1000G LD 面板(reference/ld/EUR),走ieugwasr::ld_clump;api:OpenGWAS 在线 clumping。
参数 clump_r2 = 0.001、clump_kb = 10000。
失败守卫
clumping 失败时不中断:回退用未 clump 的 SNP,并打上 unclumped 标记 —— 报告会明确标注"结果可能因 LD 冗余而膨胀",而不是悄悄给出误导结果。SNP ≤1 个时直接跳过 clumping。
4. F 统计量与 R²,剔除弱工具(compute_f_stats)
衡量工具强度(相关性假设)。有 EAF 时按标准公式逐 SNP 计算:
每个 SNP 的方差解释比例 R²(maf = min(eaf, 1−eaf),n = 样本量):
每个 SNP 的 F 统计量:
整体 F(k 个强工具,r2_sum = ΣR²,n_mean 平均样本量):
弱工具剔除:去掉 F < f_stat_min(默认 10)的 SNP —— F<10 是弱工具偏倚的经典阈值(Staiger & Stock)。
EAF 缺失时的代理
若整列 EAF 缺失,无法算 R²,则用 (beta/se)² ≈ z² 作每-SNP F 的代理(此时不做弱工具剔除,仅提示)。
对应 config 字段
yaml
analysis_mode: "cis" # cis | genome_wide
iv:
pval_cis: 5.0e-6
pval_genome_wide: 5.0e-8
cis_window_kb: 500 # ±500kb
clump_r2: 0.001
clump_kb: 10000
clump_pop: "EUR"
f_stat_min: 10 # 弱工具阈值
ld:
method: "local" # local(PLINK) | api(OpenGWAS)
plink_bin: "reference/bin/plink"
bfile: "reference/ld/EUR"输出
一张工具变量表(含每 SNP 的 f_stat、r2),并在属性里带上 overall_f、overall_r2、unclumped 标记,以及 flow 计数(raw → significant → cis_window → clumped → strong_F)供报告画流程图。
下一步:工具变量与结局数据一起进入 谐化与定向过滤。