孟德尔随机化(三)—— 再也不用担心网络或其他各种报错啦 | 从数据库下载

[复制链接]
发表于 2026-10-3 14:26:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

孟德尔随机化实战(三):从 IEU 数据库下载 GWAS 数据不报网络错

做两样本孟德尔随机化(TwoSampleMR)时,很多人卡在第一步——代码里调 API 下载数据,不是超时就是各种网络报错。解决办法很直接:绕开在线 API,直接从数据库把数据下载到本地,再读进 R 里。下面把数据要求和 IEU 下载流程一次讲清楚。

一、数据必须满足的最基本要求

TwoSampleMR 的工具变量数据框要求每行一个 SNP,至少要有这四列:

  • SNP:rsID,SNP 的唯一标识符(形如 rs1234567)
  • beta:效应大小。如果是二分类变量(比如是否患病),要用 log(OR),不能直接拿 OR 值
  • se:效应大小的标准误差
  • effect_allele:效应等位基因(A/T/C/G)

下面这些是加分项、不是必须:

  • other_allele:非效应等位基因
  • eaf:效应等位基因频率
  • phenotype:SNP 有效应的表型名称
  • chr / position:染色体与位置
  • samplesize:估计效应量所用的样本量
  • ncase / ncontrol:病例数 / 对照数
  • pval:SNP 与暴露因子关联的 P 值
  • units:效应量的单位
  • gene:SNP 所在基因或其他注释

务必注意:不同来源的数据列名经常有出入(比如有的用 effect_allele、有的用 eaf 的拼写变体,有的把 beta 叫 effect),导入 R 之前先 colnames() 核一遍,再按 TwoSampleMR 需要的名字重命名。从数据库下的一般问题不大,从文献附表里抠出来的最容易缺列。

二、从 IEU OpenGWAS 数据库下载

第 1 步:找到数据

IEU 数据库官网:https://gwas.mrcieu.ac.uk/。首页中间那个搜索框直接输关键词就行;也可以点右上角的 datasets 进列表页,在 Trait contains 框里输关键词。这里以 bodymassindex(身体质量指数,也就是常说的 BMI)举例。

第 2 步:拿到 dataset id

搜出来会列出一堆数据集,每条都有一个形如 ieu-a-2 的 id(a 表示"发现"数据集,b 通常表示复制数据集)。记下这个 id,它就是后面拉取数据的钥匙。注意看每条的 ncase/ncontrol、 Population(人群,欧洲人为主)、Year 这几个字段——暴露和结局必须是同一人群,混着用是 MR 的经典错误。

第 3 步:两种取数方式

方式 A:命令行直接拉,适合网络不好的时候(在线 API 最容易超时,这也是最常见的报错来源):

wget "https://gwas-api.mrcieu.ac.uk/ieu-a-2/data"
# 或 curl
curl -o ieu-a-2.csv "https://gwas-api.mrcieu.ac.uk/ieu-a-2/data"

方式 B:在 R 里指定本地文件读,装好 TwoSampleMR 后:

library(TwoSampleMR)
dat <- read.csv("ieu-a-2.csv")
# 然后按列名整理成 mr_input 要求的格式
exposure_dat <- dat %>%
  mutate(SNP = rsid, beta = effect, se = standard_error) %>%
  select(SNP, beta, se, effect_allele, other_allele, eaf, pval)
out <- mr(exposure_dat, outcome_dat)

如果一定要走 API,就把 ieugwasr 的 token 配好(ieugwasr::get_gwas_info() 验证连通性),并设置代理,比裸连稳。

三、避免网络报错的四个做法

  • 优先本地文件:数据下到本地再读,比每次分析都打 API 快得多,也不受网络波动影响。
  • 下载完先体检:检查列名、检查有没有缺失的 beta/se、检查 effect_allele 是不是大写字母,有问题在这步修,别等到跑 MR 报错。
  • 网络受限就换镜像/代理:IEU 的 API 在国内直连经常超时,配代理或走 mirror 都行。
  • 缓存结果:处理好的 exposure/outcome 对象 saveRDS() 存下来,下次直接读,省得重复下载。

四、小结

MR 分析里"下载数据"这一步出状况,八成不是代码写错,而是在线 API 连不上。改成从 IEU 把数据下到本地、按四列基本要求整理好再进 TwoSampleMR,后面工具变量筛选、IVW、MR-Egger 那些步骤才跑得顺。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表