Skip to content

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.001clump_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 = 样本量):

R2=2β2maf(1maf)2β2maf(1maf)+2nmaf(1maf)se2

每个 SNP 的 F 统计量

F=R2(n2)1R2

整体 Fk 个强工具,r2_sum = ΣR²n_mean 平均样本量):

Foverall=r2sum(nmeank1)(1r2sum)k

弱工具剔除:去掉 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_statr2),并在属性里带上 overall_foverall_r2unclumped 标记,以及 flow 计数(raw → significant → cis_window → clumped → strong_F)供报告画流程图。

下一步:工具变量与结局数据一起进入 谐化与定向过滤

个人科研与运维文档 · 内容持续修订