⚠️
前置要求
需要 R 4.0+,安装 mrasst、TwoSampleMR 等包。建议先完成 MR 基础教程。
📦 环境准备
安装依赖包
# 安装 mrasst 包
devtools::install_github("MRCIEU/mrasst")
# 安装其他依赖
install.packages(c("TwoSampleMR", "ieugwasr", "data.table", "dplyr"))
🔍 Step 1: 获取表型信息
首先读取风险位点信息,然后从 IEU 数据库获取相关表型信息。
library(readxl)
library(mrasst)
library(stats)
library(TwoSampleMR)
# 设置工作目录(替换为你的数据路径)
setwd("XXXXX/your-data-directory")
# 读取风险 loci 信息(CSV 格式,包含 SNP 列)
SNPinfo <- read.csv("your-snp-file.csv")
# 获取表型信息
# getAtlas 函数从 IEU GWAS 数据库获取表型元数据
Traitinfo <- getAtlas(SNPinfo)
Traitinfo$p.value <- as.numeric(Traitinfo$p.value)
# 保存表型信息
write.csv(Traitinfo, "Traitinfo.csv", row.names = FALSE)
💡 提示:SNPinfo 需要包含 SNP ID(如 rs123456)列。getAtlas 会自动匹配数据库中包含该 SNP 的表型。
⚡ Step 2: PheWAS 分析
使用 phewas_enrichment 函数进行全表型关联分析。
# 创建结果存储数据框
phewas_res <- data.frame(Trait = character(0), p_value = numeric(0))
# 执行 PheWAS 分析
# phewas_enrichment 会自动:
# 1. 提取每个表型的 SNP 效应
# 2. 进行关联检验
# 3. 返回显著性结果
phewas_res <- phewas_enrichment(Traitinfo, SNPinfo)
# FDR 校正(控制假阳性率)
phewas_res$P_Adjust <- p.adjust(phewas_res$P_Value, method = "fdr")
# 保存原始结果
write.csv(phewas_res, "phewas_res.csv", row.names = FALSE)
📊 结果解读:
- • P_Adjust < 0.05:显著关联
- • P_Adjust < 0.01:强显著关联
- • 可进一步进行 MR 验证因果方向
🔄 Step 3: MR 因果验证
对 PheWAS 发现的显著表型进行 MR 分析,验证因果关系方向。
library(TwoSampleMR)
# 示例:对两个表型进行双向 MR 分析
# 表型1: ebi-a-GCST90002401(示例 ID)
# 表型2: ebi-a-GCST002245(示例 ID)
# 方向1: 表型1 → 表型2
iv <- extract_instruments("ebi-a-GCST90002401", clump = TRUE)
out <- extract_outcome_data(iv$SNP, "ebi-a-GCST002245", proxies = FALSE)
dat <- harmonise_data(iv, out)
mr_result_1 <- mr(dat)
# 方向2: 表型2 → 表型1
iv <- extract_instruments("ebi-a-GCST002245", clump = TRUE)
out <- extract_outcome_data(iv$SNP, "ebi-a-GCST90002401", proxies = FALSE)
dat <- harmonise_data(iv, out)
mr_result_2 <- mr(dat)
# 查看双向结果
print(mr_result_1)
print(mr_result_2)
🔄 双向 MR:如果两个方向都显著且效应方向一致,可能存在因果关系;如果方向相反,需要进一步分析多效性。
📈 完整工作流示例
# ===== 完整 PheWAS + MR 工作流 =====
library(readxl)
library(mrasst)
library(TwoSampleMR)
library(data.table)
library(dplyr)
# 1. 初始化
setwd("XXXXX/your-data-directory")
# 2. 读取 SNP 信息
SNPinfo <- read.csv("your-snp-file.csv")
# 3. 获取表型元数据
Traitinfo <- getAtlas(SNPinfo)
write.csv(Traitinfo, "Traitinfo.csv", row.names = FALSE)
# 4. PheWAS 分析
phewas_res <- phewas_enrichment(Traitinfo, SNPinfo)
phewas_res$P_Adjust <- p.adjust(phewas_res$P_Value, method = "fdr")
write.csv(phewas_res, "phewas_res.csv", row.names = FALSE)
# 5. 筛选显著表型(可选)
significant_traits <- phewas_res[phewas_res$P_Adjust < 0.05, ]
cat("显著表型数量:", nrow(significant_traits), "\n")
# 6. MR 验证(对每个显著表型)
# 此处需要根据实际显著表型 ID 进行 MR 分析
# 详见 Step 3 代码
⚠️ 常见问题与注意事项
Q1: PheWAS 结果太多怎么办?
使用 FDR 校正控制假阳性,优先关注 P_Adjust < 0.01 的结果。
Q2: 如何确定因果方向?
使用双向 MR(Steiger 检验)验证因果方向,排除水平多效性。
Q3: 数据量不足怎么办?
考虑使用 UK Biobank 完整数据,或合并多个队列(Meta 分析)。