← 返回教程列表

🔗 本地Clump操作

解决在线clump 502报错问题

📋 概述

Clump(连锁不平衡聚类)是MR分析中的关键步骤,用于从筛选出的SNP中移除处于连锁不平衡(LD)状态的 SNP,确保每个SNP代表独立的遗传信号。

⚠️ 常见问题:在线clump经常遇到502报错,本地clump是更稳定的替代方案。

⚙️ Clump参数说明

参数 默认值 说明
clump_kb 10000 连锁不平衡区域大小(kb)
clump_r2 0.001 LD r²阈值(小于此值保留)
clump_p 0.99 SNP相关性p值阈值
pop EUR 人群祖先(EUR/AFR/AMR/EAS/SAS)

💻 本地Clump完整代码

步骤1:加载必要的包

# 设置工作路径
setwd("path/to/MR_analysis")

# 安装并加载必要的包
# devtools::install_github("explodecomputer/plinkbinr")
library(plinkbinr)

# 获取plink可执行文件路径
get_plink_exe()
# 输出类似:"path/to/your/data"

步骤2:数据预处理

library(TwoSampleMR)
library(data.table)

# 读取暴露数据
exp <- fread("exposure_data.csv")

# P值筛选
exp_p5e8 <- subset(exp, p < 5e-8)

# 格式化数据
exp_format <- format_data(
  exp_p5e8,
  type = "exposure"
)

# 或者直接从数据库提取
exp_format <- extract_instruments(
  outcomes = 'ukb-b-11874',
  p1 = 5e-08,
  clump = FALSE, # 禁用在线clump
  access_token = NULL
)

步骤3:运行本地Clump

library(ieugwasr)
library(plinkbinr)

# 执行本地clump
clumped <- ld_clump(
  # 参数设置
  clump_kb = 10000,   # LD区域:10Mb
  clump_r2 = 0.001,   # r²阈值:0.001(严格筛选)
  clump_p = 0.99,    # p值阈值
  pop = "EUR",      # 欧洲人群
  
  # 输入数据
  dplyr::tibble(
    rsid = exp_format$SNP,
    pval = exp_format$pval.exposure,
    id = exp_format$id.exposure
  ),
  
  # plink路径(根据实际路径修改)
  plink_bin = "path/to/plink.exe",
  
  # 参考基因组(1kg EUR)
  bfile = "path/to/reference/EUR"
)

cat("Clump完成!保留", nrow(clumped), "个SNP\n")

步骤4:提取完整信息

# 使用 %in% 过滤保留的SNP
# %in% 表示向量a中同时出现在向量b中的元素
exp_clumped <- subset(
  exp_format,
  SNP %in% clumped$rsid
)

# 查看结果
head(exp_clumped)
cat("最终保留", nrow(exp_clumped), "个独立SNP\n")

⚠️ 注意事项

📥 参考数据下载

1000 Genomes Phase 3

用于clump的参考面板,推荐下载EUR人群子集以提高速度

→ 国际人类基因组计划网站

📚 相关教程