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
相关产品推荐
相关产品推荐

