主题
把三个 A 级候选放到转录层与甲基化层重测
这一层为什么必须做
血浆 pQTL 测的不是蛋白分子数,而是抗体或适配体的结合信号。靶蛋白自身的错义变异会 改变结合力,被读成"丰度变化"——APOL1 的表位伪影就是这么来的。
eQTL 测的是 mRNA,全程不经过任何结合反应,对表位伪影免疫。 所以这一层不是"再加一层证据",而是对第一层的独立检验。
〇、做了什么
| 层 | 数据 | 结局 | 方法 |
|---|---|---|---|
| 转录层 | eQTLGen 血液 cis-eQTL(N≤31,684) | FinnGen R9 黄斑病变 / 视网膜病变 / T2D(易感性对照) | MR(Wald/IVW + Egger/WM)+ Steiger + coloc.abf |
| 甲基化层 | US_Blood mQTL | 同上 | SMR + HEIDI |
| 跨层 | 同变异对齐 | — | plink LD + 等位对齐后符号比较 |
代码:multiomics-mr/07_r9dm/(07a–07h)
一、工具覆盖:三个基因全部可分析
07_r9dm/eqtl_gene_coverage.csv
| 基因 | cis-eQTL 数(FDR<0.05) | F≥10 后 | 最小 p | 顶点 SNP | 最大 F | 状态 |
|---|---|---|---|---|---|---|
| IFNAR1 | 799 | 799 | 1.9×10⁻³⁰³ | rs8178576 | 1386 | 可分析 |
| ERMAP | 1354 | 1354 | 3.3×10⁻³¹⁰ | rs11210731 | 3906 | 可分析 |
| APOL1 | 126 | 126 | 8.5×10⁻⁶⁰ | rs76406801 | 266 | 可分析 |
没有一个是"无工具"——这一层的阴性结果是真阴性,不是没测。
二、转录层 MR 主结果
07_r9dm/eqtl_mr_r9dm_full.csv
| 基因 | 结局 | 角色 | nSNP | b | se | p | FDR | PP.H4 | Steiger |
|---|---|---|---|---|---|---|---|---|---|
| IFNAR1 | 黄斑病变 | 主 | 44 | +0.193 | 0.047 | 3.5×10⁻⁵ | 1.8×10⁻⁴ | 0.235 | ✓ |
| IFNAR1 | 视网膜病变 | 主 | 44 | +0.072 | 0.026 | 5.2×10⁻³ | 0.0155 | 0.011 | ✓ |
| IFNAR1 | T2D | 对照 | 44 | +0.045 | 0.011 | 4.0×10⁻⁵ | — | 0.012 | ✓ |
| APOL1 | 黄斑病变 | 主 | 6 | −0.380 | 0.245 | 0.121 | 0.272 | 0.984 | ✓ |
| APOL1 | 视网膜病变 | 主 | 6 | −0.129 | 0.113 | 0.253 | 0.456 | 0.501 | ✓ |
| APOL1 | T2D | 对照 | 6 | +0.025 | 0.049 | 0.617 | — | 0.009 | ✓ |
| ERMAP | 黄斑病变 | 主 | 41 | −0.037 | 0.042 | 0.378 | 0.529 | 0.011 | ✓ |
| ERMAP | 视网膜病变 | 主 | 41 | −0.017 | 0.021 | 0.411 | 0.529 | 0.010 | ✓ |
| ERMAP | T2D | 对照 | 41 | +0.008 | 0.012 | 0.505 | — | 0.005 | ✓ |
三、★ 先别急着读方向:两层用的不是同一个变异
这是最容易读错的地方。把 eQTL 顶点与血浆 pQTL 哨兵拿去 plink 算 LD:
07_r9dm/cross_layer_ld.csv(1000G EUR,n=503)
| 基因 | eQTL 顶点 | pQTL 哨兵 | r² | D' |
|---|---|---|---|---|
| IFNAR1 | rs8178576 | rs914142 | 0.095 | 1.00 |
| ERMAP | rs11210731 | rs11210710 | 0.031 | 0.38 |
| APOL1 | rs76406801 | rs136168 | 该 SNP 不在 1000G 面板 | — |
两层各自的最强信号基本独立。 所以表二里 IFNAR1 的 b=+0.193 与血浆层的 b=−0.246不构成"矛盾"——它们测的是同一个基因区里两个不同的调控信号。
这是普遍现象,不是我们数据的毛病
UKB-PPP 原文即报告:只有一小部分血浆 cis-pQTL 与对应基因的全血 cis-eQTL 由同一个因果变异驱动。 血浆 pQTL 测的是细胞外蛋白,血液 eQTL 测的主要是白细胞内 RNA,两者分离是常态。 (UKB-PPP, bioRxiv 2022; Nat Genet 2024 fine-mapped eQTL/pQTL)
四、干净的比较:同一个变异,mRNA 与蛋白往哪走
把血浆层用的那个哨兵 SNP 本身拿去 eQTLGen 查,等位对齐后比符号。 这是唯一能真正回答"转录与蛋白是否一致"的做法。
07_r9dm/same_variant_cross_layer.csv
| 基因 | 哨兵 | 效应等位 | 血浆蛋白 β | 同等位 mRNA Z | mRNA p | 同向? |
|---|---|---|---|---|---|---|
| APOL1 | rs136168 | A | −0.318 | +15.63 | 4.9×10⁻⁵⁵ | ✗ |
| ERMAP | rs11210710 | T | −0.091 | −5.74 | 9.7×10⁻⁹ | ✓ |
| IFNAR1 | rs914142 | A | −0.450 | +21.95 | 9.1×10⁻¹⁰⁷ | ✗ |
一个必须说清的技术点
在同一个 SNP 上,两层 MR 的分子(疾病 β)完全相同, 所以"MR 估计符号相反"是暴露侧符号翻转的算术后果,本身不含任何额外信息。 真正的信息量只在"同一等位下 mRNA 与血浆蛋白反向"这一件事本身。 07_r9dm/matched_single_variant_mr.csv 把这一点显式算了出来,避免把同一件事重复计为两条证据。
五、逐个候选的结论
5.1 APOL1:转录层站在 SomaScan 一边,成为撤回的第三条独立证据
同一个等位(rs136168-A)下:
| 测量对象 | 方向 |
|---|---|
| mRNA(eQTLGen,p=4.9×10⁻⁵⁵) | ↑ |
| SomaScan 适配体 11510_31(p=1.8×10⁻²⁵¹) | ↑(+0.378) |
| Olink 抗体(UKB-PPP) | ↓(−0.318) |
三个测量里两个说"升高",只有 Olink 抗体说"降低"。 加上 rs136168 与错义变异 rs2239785(K150E) r²=1.000, 指向 Olink 抗体的结合表位被 K150E 扰动这一解释。撤回结论进一步加固。
这一类现象已有系统性估计,可直接引用
Epitope Effect Prevalence in Affinity-based pQTL studies(bioRxiv 2025) 在 UKB / deCODE / Fenland 共 5,817 个靶点中:两平台都测到 cis-pQTL 的有 914 个蛋白, 其中 301 个(33%)与错义变异连锁;37 个蛋白在两平台方向相反, 85 个蛋白的错义 pQTL 只在单平台显著。作者结论是错义介导的表位效应影响 不超过 12% 的 cis-pQTL 结果。
APOL1 正好同时落在这两类里:主适配体与抗体方向相反(37 类), 第二适配体 9506_10 无信号(p=0.176,85 类)。这不是我们数据的孤例,是有命名的已知现象。
★ 但表位效应的比例有两个互相冲突的已发表估计,写作时必须两个都给:
| 来源 | 估计 | 口径 |
|---|---|---|
| bioRxiv 2025(上文) | ≤12% | 仅错义介导的表位效应 |
| Eldjarn 2023 Nature | Olink 约 23%、SomaScan 约 24% | 表位效应总体(含非错义机制) |
两者差近一倍,只引 12% 会低估这个问题的普遍性。
一个我们无法完全排除的替代解释
Eldjarn 2023 明确指出:平台间方向不一致也可能源于蛋白异构体(proteoform), 而非试剂结合被扰动——他们以神经丝轻链(NFL)为例(Olink OR=1.64 vs SomaScan OR=0.53), 并写明"我们没有关于两个平台各自测到哪种异构体的信息"。
我们判定 APOL1 为表位伪影,靠的是两条异构体解释不易给出的证据: ① 工具与 K150E 错义变异 r²=1.000;② 同一蛋白的第二条适配体完全无信号,且两个独立队列一致 (deCODE p=0.176 / ARIC p=0.694)。但异构体机制我们的数据无法完全排除,须写进讨论。
★ 另一条独立佐证:deCODE 自己的补充表 ST19 就把 rs2239785 列为 APOL1 适配体 11510-31 的 cis 哨兵之一,其 LD class 中明确含 rs136168(我们的工具),并标注 any coding same gene = Y、cis eQTL coding genes = APOL1 (e); APOL1 (c)。 deCODE 自己标记了这个位点涉及 APOL1 编码变异,同时独立印证了我们算出的 r²=1.000。
至于转录层自身的 MR:b=−0.380 但 p=0.121,不显著(只有 6 个工具)。 coloc PP.H4=0.984 看似很高,但见第七节的限制说明,不能单独当判据。
5.2 ERMAP:新增两条硬伤,降级理由从 8 条变成 10 条
07_r9dm/ermap_demotion_evidence.csv
转录层本身是阴性(b=−0.037,p=0.378;PP.H4=0.011 不共定位)。 但这次真正的新发现在基因归属上:
⑦ 哨兵 rs11210710 是 6 个基因的 cis-eQTL,而 ERMAP 是其中最弱的一个:
| eGene | Z | p |
|---|---|---|
| CCDC23 | 94.02 | 3.3×10⁻³¹⁰ |
| RP5-994D16.9 | 20.64 | 1.3×10⁻⁹⁴ |
| LEPRE1 | −19.95 | 1.5×10⁻⁸⁸ |
| ZMYND12 | 8.55 | 1.3×10⁻¹⁷ |
| SLC2A1-AS1 | 6.16 | 7.4×10⁻¹⁰ |
| ERMAP | −5.74 | 9.7×10⁻⁹ |
⑧ 我们自己流水线的生信注释,把这个变异归给了 CLDN19(upstream_gene_variant),不是 ERMAP。
⑨(★2026-08-03 新增)SomaScan 上的 cis-pQTL 不存在:deCODE n=35,367,p=0.619, 完全没有信号;ARIC p=0.0029 也过不了 cis 区 Bonferroni(1.9×10⁻⁵)。
⑩(★2026-08-03 新增)两个平台对 ERMAP 的测量互不相关: Eldjarn 2023 ST6 在同一批人身上 同时用两个平台测同一蛋白,ERMAP 的相关性只有 r = −0.026(p=0.33,不显著)—— 对比 APOL1 的 0.687、IFNAR1 的 0.188。
ERMAP 的问题性质要改写
之前的说法是"效应弱、衰减可疑"。加上⑨⑩之后,正确的说法是: 两个平台测的根本不是同一个东西,ERMAP 的问题在测量本身。
合计:反对 10 条、支持 1 条(同变异跨层同向)、中性 1 条(单细胞图谱覆盖受限)。 ERMAP 的降级不再是"衰减可疑",而是连"这个信号属于 ERMAP"本身都站不住。
5.3 IFNAR1:转录层没能给它加分,但也没有推翻它
先说清楚三件事,一件都不能省:
(a) 同变异下 mRNA 与血浆蛋白反向(Z=+21.9 vs β=−0.450)。 这看着刺眼,但按第三节引的文献,分子层与蛋白层方向不一致在全基因组是普遍现象, 被归因于蛋白降解、遗传缓冲等机制。所以这一条不能当作反对 IFNAR1 的证据, 它的作用是:转录层无法为血浆层提供佐证。
(b) 转录层自身的 MR 显著(b=+0.193,FDR=1.8×10⁻⁴),但共定位不支持: PP.H4=0.235 而 PP.H3=0.466,即更倾向"两个不同的因果变异被 LD 串在一起"。 与第三节的 r²=0.095 一致。
(c) 糖尿病易感性对照也显著: T2D 的 b=+0.045(p=4.0×10⁻⁵)。 黄斑病变的效应量是它的 4.3 倍,所以不是纯粹的糖尿病易感性效应, 但存在糖尿病本身的成分,写作时必须披露。
一条对 IFNAR1 有利的排除
干扰素受体基因簇(chr21)在血浆层的邻居都是阴性: IFNGR2 p=0.184、IL10RB p=0.919(各自用自己的哨兵)。 所以血浆 IFNAR1 的信号不是整段区域的 LD 假象。 另外 rs914142 在 eQTLGen 里的最强 eGene 就是 IFNAR1 本身(Z=−21.9,次强 ITSN1 仅 −10.8), 基因归属比 ERMAP 干净得多。
★ 2026-08-03 更新:跨平台已完成,IFNAR1 通过
原文此处写"最终判定取决于 deCODE 跨平台复制,该文件仍在下载"。现已测完:
| 效应等位 A 的效应 | p | n | |
|---|---|---|---|
| Olink 抗体(UKB-PPP) | −0.450 | — | 34,557 |
| SomaScan · deCODE | −0.1663 | 1.05×10⁻⁶⁹ | 35,380 |
| SomaScan · ARIC | −0.3917 | 8.0×10⁻⁹⁹ | 7,213 |
三方同向,ΔEAF=0.034 对齐可信 → 不是表位伪影,IFNAR1 是三个候选里唯一全部通过的。 量级差异属队列间常态,跨平台只比方向。详见 APOL1 页第五节。
一次虚惊也已排除:deCODE 表里 IFNAR1 的 6 个 cis-pQTL 有 4 个标注与 IFNAR1 编码变异连锁, 但我们的工具 rs914142 与其中最强的 rs2257167 只有 r²=0.058,另两个 MAF 仅 1.95%/0.24% 无法标记 MAF 27% 的变异。
六、甲基化层:SMR + HEIDI
6.1 判据必须是三分类,不是两分类
SMR 会对每个探针输出 p_HEIDI。HEIDI 检验的含义是: p>0.05 = 通过 = 支持"单一共享变异";p≤0.05 = 更像"两个不同变异被 LD 串在一起"。
但还有第三种情况——p_HEIDI 是 NA,算不出来(区域内工具 SNP 太少)。
我们自己写的判据把第三种当成了第一种
本项目原有脚本两处(03d_parse_smr.R 与 04_integrate.R L81)都写的是:
r
heidi_pass := is.na(p_HEIDI) | p_HEIDI > 0.05 # ← NA 被当成通过"算不出来"不等于"排除了连锁",恰恰相反,是无法排除。 这是本项目反复栽的同一类错误(没测 vs 测了没有), 这次栽在自己的判据里。已改为三分类:pass / fail_linkage / not_evaluable, not_evaluable 不计入稳健,但单独存进 smr_heidi_not_evaluable.csv,不让它消失。
6.2 这个 bug 对旧的 DR/AMD 结论有多大影响(实测)
| 结局 | 严格判据稳健命中 | 旧口径多算 | 虚高比例 |
|---|---|---|---|
| DR | 191 | +148 | 43.7% |
| AMD(FinnGen) | 204 | +68 | 25.0% |
| AMD(IAMDGC 2.0) | 340 | +83 | 19.6% |
13 个目标基因层面的变化:
| 结局 | 旧说法 | 严格判据后 | 扣除 MHC 后可用 |
|---|---|---|---|
| DR | AGER + TNXB(2 个) | TNXB(1 个) | 0 个(结论仍为阴性,未变) |
| AMD(FinnGen) | APOE/CASP10/TNFRSF10A/AGER/TNXB(5 个) | CASP10/TNFRSF10A/TNXB(3 个) | CASP10 + TNFRSF10A(2 个) |
| AMD(IAMDGC) | — | TNFRSF10A/TNXB(2 个) | TNFRSF10A(1 个) |
完全掉出的:AGER(三个结局全掉)、APOE(AMD 两个结局全掉)。
主结论没有动摇
multiomic_evidence_matrix.csv 重跑后,CASP10 与 TNFRSF10A 仍是 n_layers=3, 三组学收敛的核心结论不变。变化是 APOE 失去甲基化层(AMD 的 n_layers 由 2 降为 1) 与 AGER 失去甲基化层。热图上 APOE-AMD 的甲基化格子已改标 HEIDI n/a, 不是"无证据",是"测不出来"。
6.3 三个 R9 候选在甲基化层的表现
窗口取每个基因 ±1Mb,覆盖情况显式记录(07_r9dm/smr_r9_coverage.csv): APOL1 区 204 个探针、ERMAP 区 159 个、IFNAR1 区 145 个——没有一个是零覆盖。
黄斑病变结局下,三个候选区内 SMR FDR<0.05 的只有 3 条:
| 候选 | 探针 | 探针注释基因 | 是候选基因本身? | b_SMR | p_SMR | FDR | p_HEIDI | 判定 |
|---|---|---|---|---|---|---|---|---|
| IFNAR1 | cg00207965 | IFNAR1 | 是 | −1.273 | 1.9×10⁻⁴ | 0.0176 | 0.135 | ★ 稳健 |
| APOL1 | cg16121206 | APOL2 | 否 | +3.455 | 4.6×10⁻⁴ | 0.0384 | 6.2×10⁻⁴ | 未通过(连锁) |
| APOL1 | cg10543947 | APOL2 | 否 | +4.872 | 4.7×10⁻⁴ | 0.0390 | NA | 不可评估 |
- IFNAR1 拿到唯一一条稳健命中:探针 cg00207965 位于 chr21:34,697,220, 落在 IFNAR1 基因体 5' 端(34,696,734–34,732,168)的启动子区,HEIDI 用 20 个 SNP 检验、p=0.135 通过。
- APOL1 的两条都不能用:探针注释是 APOL2 不是 APOL1,且一条 HEIDI 失败、一条算不出来。
- ERMAP 区内没有一条 FDR<0.05。窗内最强的几条注释到 SLC2A1 / KDM4A / LEPRE1, 又一次不是 ERMAP 本身——与第 5.2 节的基因归属问题一致。
6.4 ★ 但这一条不能用来给 IFNAR1 定方向
b_SMR = −1.273 说的是"甲基化升高→风险降低"。要翻译成表达方向, 必须知道该 CpG 与 IFNAR1 表达的关系。我们查了本地视网膜 eQTM 资源:
- cg00207965 不在表内;
- IFNAR1 在表内的 top CpG 是 cg10412497,但 p.adj = 0.233,本身不显著。
所以本地资源无法确定方向。 而且窗内另一个注释为 IFNAR1 的探针 cg00622702 (chr21:34,727,950,基因 3' 端)符号相反(b_SMR=+7.577,FDR=0.104 不显著)。
正确表述
甲基化层给 IFNAR1 的是位点层面的支持——IFNAR1 启动子区甲基化与黄斑病变 共享同一因果变异(HEIDI 通过)。它不能用来判断"IFNAR1 高好还是低好"。 不要把 b_SMR 的符号直接读成表达方向。
补充两条一致性信息:
- 该 mQTL 顶点
rs17875806与血浆 pQTL 哨兵rs914142的 r² = 0.448、D' = 0.992 ——比 eQTL 顶点(r²=0.095)近得多,说明甲基化层与血浆层至少部分共享信号。 - 同一探针在视网膜病变结局上 b_SMR=−0.351、p=0.085(同号但不显著,衰减约 3.6 倍), 与血浆层"黄斑强、糖网弱"的模式一致。
七、方法学修正:Steiger 的单位在这一层也是坏的
multiomics-mr/01b 从建立起就直接调用 directionality_test() 而没有设置 units, 与 mr-pipeline 的 Phase 0.1 缺陷完全同源。本次一并修好并实测验证生效:
07_r9dm/steiger_units_check.csv(IFNAR1×黄斑病变,44 个工具)
| 旧(未设单位,按连续量算) | 新(units="log odds" + ncase/ncontrol/prevalence) | 倍数 | |
|---|---|---|---|
| rsq.outcome 中位数 | 1.754×10⁻⁶ | 2.386×10⁻⁵ | 13.77× |
提示信息不能当验证
TwoSampleMR 无论设没设单位都会打印 "assuming all are quantitative traits" 这句提示。 所以判断分支有没有走对,只能比对 rsq.outcome 的数值,不能看有没有报这句话。 本次两种设置下 Steiger 判定均为 TRUE,结论未变,但数值链路已经对了。
八、这一层的限制(必须写进正文)
- coloc 的暴露侧被截断。 eQTLGen 公开文件只含 FDR<0.05 的 SNP, 区域内的零效应 SNP 缺失,会扭曲
coloc.abf的后验。 故本层 PP.H4 只作提示,不作判据——APOL1 的 0.984 尤其不能直接当"强共定位"用。 - 组织不匹配。 eQTLGen 是全血;疾病发生在视网膜。 血液 mRNA 与视网膜的关系是间接的。
- APOL1 只有 6 个工具,IVW 不稳,p=0.121 的阴性也可能只是功效不足。
- eQTLGen 的 β 由 Z 分数还原(
sqrt(2p(1-p)(N+z²))),不是原始效应量。