基于GWAS汇总数据的基因组结构方程建模:从多性状整合到遗传结构解析
基因组结构方程建模(Genomic SEM)为多性状遗传分析提供了统一的框架,能够基于GWAS汇总统计量构建和检验复杂的遗传结构模型。本文介绍GenomicSEM R包的核心用法,涵盖数据准备、模型设定与评估,以及结果解读。
环境与数据准备
安装GenomicSEM并加载所需包:
# 安装开发版
install.packages("devtools")
devtools::install_git("https://gitcode.com/gh_mirrors/ge/GenomicSEM")
library(GenomicSEM)
数据预处理是分析的基础。使用munge()函数将不同来源的GWAS汇总文件统一为适配格式,同时校正基因组膨胀因子。该函数要求提供文件路径、性状名称和样本量向量。
# 示例:四个代谢相关性状的GWAS文件
files <- c("bmi_gwas.txt", "whr_gwas.txt", "glucose_gwas.txt", "hdl_gwas.txt")
traits <- c("BMI", "WHR", "Glucose", "HDL")
N_vec <- c(150000, 140000, 120000, 130000)
# 数据清洗与标准化
sumstats <- munge(files = files, trait.names = traits, N = N_vec)
数据质量通过QQ图进行可视化检查,判断是否存在群体分层等混杂因素。
预处理流程的选择取决于表型类型(连续/二分类)和后续模型需求,决策路径可参考下图:
模型构建与拟合
GenomicSEM允许用户通过lavaan风格的语法定义遗传结构模型。以下示例构建一个公共因子模型,假设四个代谢性状共享一个潜在的遗传因子:
# 定义模型:公共因子 F1 解释所有性状的遗传变异
model_syntax <- "
F1 =~ BMI + WHR + Glucose + HDL
F1 ~~ 1*F1
"
# 拟合模型,使用稳健最大似然估计
fit_cf <- commonfactor(data = sumstats, model = model_syntax, estimator = "MLR")
模型可通过summary()查看参数估计和标准误,并使用fitmeasures()获得拟合指标:
summary(fit_cf)
fits <- fitmeasures(fit_cf)
print(fits)
常见的拟合评判标准包括:CFI > 0.95,RMSEA < 0.05,SRMR < 0.08。若拟合不佳,可尝试增加因子或调整模型结构。
对于更复杂的假设,可以构建中介模型。例如,考察遗传因子通过表型A间接影响表型B:
mediation_model <- "
# 直接路径
F1 -> TraitB
# 中介路径:F1 -> TraitA -> TraitB
F1 -> TraitA
TraitA -> TraitB
# 允许残差相关
F1 ~~ TraitA
"
交互因子模型可用于捕捉更精细的遗传结构,例如在精神疾病遗传学研究中区分共同因子和特定因子。
结果解读
因子载荷表示每个性状与潜在遗传因子的关联强度,绝对值越接近1,共享遗传效应越强。残差方差则反映性状特异性的遗传组分。
遗传相关性矩阵可用于判断性状间的遗传重叠程度,取值范围为[-1, 1]。正值表示共享同向遗传效应,负值表示遗传效应方向相反。
常见问题与处理
- 模型不收敛:简化模型、增加迭代次数(
max.iter = 10000)或更换优化器(optimizer = "bobyqa")。 - 内存不足:按染色体分批分析,减少并行核心数,或增加系统内存。
- 结果难以解释:从双变量相关模型起步,逐步引入因子,并参考领域文献验证模型合理性。
代码获取
GenomicSEM的源代码可通过Git克隆获取:
git clone https://gitcode.com/gh_mirrors/ge/GenomicSEM
更多高级功能(如userGWAS())及示例脚本参见项目仓库中的R目录和帮助文档。