📋 概述
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参考数据集(1kg)
- • 人群匹配:选择与你的GWAS数据相同的人群
- • 路径问题:Windows路径使用正斜杠或双反斜杠
- • 内存:大样本参考文件可能需要较大内存