💻

PheWAS 实操:mrasst 包

基于 UK Biobank 的全表型关联分析

本教程演示如何使用 mrasst 包进行 PheWAS 分析,结合 MR 验证因果关系。 基于真实公开数据,提供完整代码和结果解读。

⚠️
前置要求

需要 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 分析)。

← 返回原理介绍 继续学习:ieugwasr 包 →