如何在Sommer的GWAS模型中纳入显性效应矩阵?
在Sommer中纳入显性效应矩阵进行GWAS的方法
函数选择优先用GWAS()
GWAS()是mmer()的GWAS专用封装,会直接输出SNP关联分析结果(P值、效应量等),比mmer()更高效,优先选GWAS()即可。
核心修改步骤
要纳入显性效应,需同时准备显性遗传关系矩阵(用于拟合随机效应)和对应显性编码的标记矩阵(用于计算SNP显性效应,按需选择),再调整GWAS()参数:
- 生成显性遗传关系矩阵
用D.mat()基于等位基因剂量标记矩阵(0/1/2编码,比如你原代码里的Xz)生成显性关系矩阵:
D <- D.mat(Xz) # Xz为加性编码标记矩阵:0=纯合参考,1=杂合,2=纯合替代
- 调整随机效应项
在原有加性随机项基础上,添加显性效应的随机项,建议给效应命名避免混淆:
# 同时拟合加性+显性遗传效应 random_formula <- ~vs(id, Gu=Aa, name="add") + vs(id, Gd=D, name="dom")
Gu=Aa对应你原代码中的加性关系矩阵Gd=D对应刚生成的显性关系矩阵name参数自定义效应名称,后续指定gTerm更清晰
- 调整M和gTerm参数
根据你要计算的SNP效应类型调整:
- 若计算加性SNP效应:保持
M=Xz,gTerm="add"(对应加性效应项) - 若计算显性SNP效应:先生成显性编码标记矩阵,再指定
M=X_dominant,gTerm="dom"
生成显性编码标记矩阵示例:
# 转换为显性编码:杂合子=1,纯合子=0 X_dominant <- ifelse(Xz == 1, 1, 0)
完整代码示例
示例1:拟合加性+显性效应,计算加性SNP关联
# 生成显性关系矩阵 D <- D.mat(Xz) # 运行GWAS mix2 <- GWAS(R2~1, random=~vs(id, Gu=Aa, name="add") + vs(id, Gd=D, name="dom"), rcov=~units, data=phenorm, n.PC = 3, M= Xz, gTerm = "add")
示例2:拟合加性+显性效应,计算显性SNP关联
# 生成显性关系矩阵和显性编码标记矩阵 D <- D.mat(Xz) X_dominant <- ifelse(Xz == 1, 1, 0) # 运行GWAS mix2_dom <- GWAS(R2~1, random=~vs(id, Gu=Aa, name="add") + vs(id, Gd=D, name="dom"), rcov=~units, data=phenorm, n.PC = 3, M= X_dominant, gTerm = "dom")
注意事项
- 显性效应模型复杂度更高,若出现收敛问题,可尝试添加
maxIter=1000(增大迭代次数)或tolParInv=1e-6(调整收敛阈值)参数 - 确保标记矩阵编码正确:加性编码为0/1/2,显性编码为0/1(仅杂合子为1)
- GWAS中通常保留加性效应作为基础模型,仅需显性效应时可去掉加性vs项
内容的提问来源于stack exchange,提问作者Toin C.
相关产品推荐
相关产品推荐

