主题
03 · 谐化与定向过滤
对应模块:R/05_harmonise.R参考:Hemani 2018(谐化);Hemani 2017(Steiger)
作用
把暴露与结局的效应对齐到同一效应等位,处理回文(palindromic)SNP 的链歧义,再用 Steiger 过滤剔除因果方向错误的 SNP。这一步保障 MR 估计里"β 的符号方向"是可比的。
1. 转成 TwoSampleMR 格式
to_tsmr_exposure() / to_tsmr_outcome() 把内部标准 schema 喂给 TwoSampleMR::format_data(),分别生成 exposure / outcome 格式。结局只取工具 SNP 那几行。F 统计量、R² 这类非标准列会被 format_data 丢弃,所以代码额外 merge 回来供报告用。
2. 谐化 + 回文处理(harmonise_pair)
调 TwoSampleMR::harmonise_data(action = ...)。harmonise_action 控制回文 SNP 策略:
action | 策略 |
|---|---|
| 1 | 假设所有等位已正向对齐(最激进) |
| 2(默认) | 用 EAF 推断回文 SNP 的链方向 |
| 3 | 直接丢弃所有回文 SNP(最保守) |
谐化后再显式剔除残留的 palindromic & ambiguous(模糊回文)SNP,然后只保留 mr_keep == TRUE 的变异。
3. Steiger 定向过滤(apply_steiger)
MR 假设工具先影响暴露、再影响结局。若某 SNP 与结局的关联其实强于与暴露的关联,说明方向可能反了。TwoSampleMR::steiger_filtering() 比较每个 SNP 对暴露、对结局的 R²,剔除 steiger_dir == FALSE(方向错误)的 SNP。
Steiger 需要暴露、结局双方的 R²,所以必须在谐化之后(拿到配对数据)才能做。由 config 的 iv.steiger_filtering 开关(默认开)。
单对编排(build_harmonised)
IV → exposure fmt / outcome fmt(仅工具SNP) → harmonise_data → 剔模糊回文 → mr_keep → Steiger若结局与暴露无重叠 SNP,返回 NULL 并跳过该对(错误隔离,不影响其它对)。谐化后的 IV 数(nrow(h))直接决定下一步选哪套 MR 方法。
对应 config 字段
yaml
iv:
harmonise_action: 2 # 1=假设正向 2=按MAF推断 3=丢弃回文
steiger_filtering: true # Steiger 定向过滤下一步:谐化后的工具变量进入 MR 估计方法。IV 数(1 / 2 / ≥3)决定用哪套方法。