You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LDpred2 R教程中bigstatsr::FBM对象子集提取操作咨询

问题原因确认

你遇到的矩阵维度不匹配问题,本质是传入big_prodMat的FBM矩阵G的列索引对应的SNP数量,与beta_auto的行数不一致。通常是运行snp_ldpred2_auto时自动过滤了不符合质控要求的SNP,导致最终返回的beta_auto对应的SNP集合,和你当前传入的df_beta[["_NUM_ID_"]]对应的初始SNP集合不匹配。

FBM.code256 子集提取与匹配操作步骤

FBM.code256是文件绑定矩阵,不需要将全量数据加载到内存即可完成子集提取,操作逻辑和常规R矩阵一致,同时bigsnpr提供了专用参数适配,具体操作如下:

  • 第一步:匹配SNP顺序和索引
    snp_ldpred2_auto返回的beta_auto的行顺序,和你输入到该函数的df_beta子集的行顺序完全对应,因此你需要提取该子集对应的_NUM_ID_作为列索引,而非使用原始全量df_beta的索引:
# 假设你运行LDpred2自动模型的代码如下:
# auto_res <- snp_ldpred2_auto(corr_obj, df_beta_qc, h2_init = estimated_h2, vec_p_init = 0.1)
# beta_auto <- sapply(auto_res, function(x) x$beta_est)
# 直接使用输入给模型的df_beta_qc的_NUM_ID_作为列索引
ind.col_matched <- df_beta_qc[["_NUM_ID_"]]
  • 第二步:校验维度后执行计算
    先确认索引长度和beta_auto行数匹配,再将匹配后的索引传入big_prodMat即可,无需单独对G做子集保存,FBM会自动按索引读取对应列:
# 校验维度匹配,避免SNP顺序错位或数量不一致
stopifnot(length(ind.col_matched) == nrow(beta_auto))
pred_auto <- big_prodMat(G, beta_auto, ind.row = ind.test, ind.col = ind.col_matched)
  • 如果你需要单独提取G的子集保存为新的FBM文件,可使用big_copy函数:
# 提取指定行列子集,保存为新的FBM.code256文件
G_sub <- big_copy(G, ind.row = ind.test, ind.col = ind.col_matched, backingfile = "filtered_G")
注意事项
  • 不要使用常规R矩阵的G[,]语法全量提取FBM内容,会将全量基因型数据加载到内存,极易触发内存溢出
  • 必须保证ind.col_matched的SNP顺序和beta_auto的行顺序完全一致,仅取交集不对齐顺序会导致效应值和SNP对应错误,最终计算的多基因评分完全无效

内容的提问来源于stack exchange,提问作者Javier Schneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:15:00