主题
多组学 MR 与功能验证 · 代码引擎详解
和主 MR 流水线的 方法引擎 同规格:逐脚本讲清每一步用了什么统计方法、什么公式、什么函数。所有描述以实际代码为准(WSL,research 用户)。
这一栏配合结果页 多组学 MR · 干分析 与 靶点功能验证 · 干分析进展 看:那两页讲"做完是什么结果",这栏讲"代码怎么写的、对不对"。
两个代码目录,别搞混
- 01–07 →
/home/research/multiomics-mr/(多组学 MR:eQTL / 代谢物 / meQTL / 视网膜 / 整合) - 08–10 →
/home/research/dr-amd-targets/(功能验证:单细胞 / 通讯 / 轨迹 / bulk / GSEA)
两者是独立项目目录,与主筛查流水线 mr-pipeline 也相互隔离。
代码目录(唯一真源)
/home/research/multiomics-mr/ # ← 01–07
├── common/mr_funcs.R # 共享函数:结局配置 + 提取 + Z→β + clump + MR + coloc
├── 01_eqtl_mr/
│ ├── 01a_prep_eqtlgen.R # eQTLGen Z-score → β/se,建暴露表
│ └── 01b_mr_coloc.R # 血 eQTL MR + 共定位 + FDR
├── 02_metabolite_mr/
│ ├── 02_metabolite_mr.R # Nightingale NMR 代谢物 MR
│ └── 02d_chen_mr.R # Chen 专项代谢物(谷胱甘肽/肉碱等)
├── 03_meqtl_smr/
│ ├── 03a_make_ma.sh # FinnGen → SMR .ma
│ └── 03c_fix_and_run.sh # .esi chr:pos→rsID 重映射 + 跑 SMR
├── 05_retina/05a_retina_eqtl.R # Advani 视网膜 eQTL MR + coloc(眼特异)
└── 04_multiomic_coloc/04_integrate.R # 四层证据矩阵(capstone)
/home/research/dr-amd-targets/analysis/ # ← 08–10(功能验证)
├── 01_bulk_analysis.R # GEO bulk DEG(limma)+ 入口
├── 02_wgcna_gsea.R # WGCNA 共表达模块
├── 03_gsea_fgsea.R # 单基因 GSEA(fgsea + 自建 GO-BP)
├── 11_dr_scrna.R # DR 纤维血管膜单细胞(GSE165784)
├── 12_amd_scrna_rpe.R # AMD RPE/脉络膜单细胞(GSE230348)
├── 13_amd_pseudobulk.R # 逐样本伪 bulk(避开细胞级 Wilcoxon)
├── 21_dr_cellchat.R # CellChat 细胞通讯(TAM/MERTK 轴)
├── 23_dr_monocle.R # ⚠ 存在但未执行(monocle3 未安装)
├── 25_dr_slingshot.R # Slingshot 活化伪时序
└── 31_gct_nsr_vs_rpe.R # EGA 视网膜 359 样本 NSR vs RPE 组织定位逐模块导读
| 模块 | 对应脚本 | 讲什么 |
|---|---|---|
| 01 · 共享函数与数据读取 | common/mr_funcs.R | 结局配置、按 rsID 提取、Z→β 换算、LD clump、MR、coloc 的实现与坑 |
| 02 · 血 eQTL MR + 共定位 | 01a + 01b | eQTLGen 预处理、金标准判定(FDR<0.05 且 H4≥0.8) |
| 03 · 代谢物 MR | 02 + 02d | NMR + Chen 专项,IVW/Egger/WM/Q/Steiger + robust 定义 |
| 04 · 甲基化 SMR | 03a + 03c | .ma 构建、chr:pos→rsID 重映射、SMR+HEIDI |
| 05 · 视网膜 eQTL MR | 05a | Advani QTLtools 解析、眼特异共定位 |
| 06 · 多组学整合矩阵 | 04_integrate.R | 四层 0/1/2 打分、n_layers、热图 |
| ★ 07 · 代码审计与发表标准 | 全部 | 本次静态代码审计发现的问题、已修项、发表前必须解决项 |
功能验证(dr-amd-targets)
| 模块 | 对应脚本 | 讲什么 |
|---|---|---|
| 08 · 单细胞定位与伪 bulk | 11 12 13 | QC 门槛、Harmony 整合、模块评分 argmax 自动注释、伪 bulk 为何取代细胞级 Wilcoxon |
| 09 · 细胞通讯与活化轨迹 | 21 25(23 未执行) | CellChat triMean/min.cells=10、Slingshot 根锚定规则、monocle3 交叉验证并不存在的订正 |
| 10 · bulk 转录 / WGCNA / GSEA | 01 02 03 31 | limma DEG、DR 组织混杂警告、单基因 GSEA 的真实含义、NSR vs RPE 组织定位 |
关于分子对接 / 分子动力学(简述)
用户问过"对接/MD 的代码是否也这样逐行核对过" —— 没有,也不太需要按这个规格做,原因:
- 对接(分子对接)和 MD(分子动力学)的核心计算由成熟第三方引擎完成:AutoDock Vina / GNINA(对接打分)、GROMACS(分子动力学积分器 + 力场)。这些引擎本身经过大规模验证,"算得对不对"取决于上游引擎 + 参数选择,不是我们写的代码。
- 我们写的只是编排/解析层(准备受体配体、调 GPU、跑流程、读输出、出图)—— 属于工程正确性,不是新颖统计方法。它们的文档已停在"使用说明 + 方法介绍 + 参数"这一层,够用。
- 因此对接/MD 值得核对的是参数是否达发表标准(如 MD 生产轨迹 ≥100 ns、exhaustiveness、力场版本 —— 这些在各自文档里已写明),而不是逐函数讲代码。若将来要把某个对接/MD 结果写进论文,再针对那一次的参数与收敛性单独核查即可。
一句话
只有多组学 MR(这一栏)和主 MR 流水线(方法引擎)是"我们自己写的统计代码",才需要逐脚本核对;对接/MD 是"我们调别人的引擎",核对重点在参数而非代码。