如何计算非加性效应的遗传力
vsnc软件
2025年08月18日 11:55
收录于文集
共12篇
UP动画剧场

欢迎关注ASReml线下培训

一、概念解释

1.1 加性效应

指等位基因或非等位基因对性状的贡献值可以累加的效应。即每个基因(或等位基因)对性状的影响是独立的,多个基因的总效应等于各个基因单独效应的总和,不受其他基因(或等位基因)组合方式的影响。

特点:

可稳定遗传:加性效应由基因的累加作用决定,在世代传递中不会因基因重组而消失(只要基因本身存在),是亲子代性状相似的主要原因。

决定育种值:个体的加性效应总和称为 “育种值”(breeding value),是选择育种(如自交系改良、纯系选育)的核心依据 —— 通过选择育种值高的个体,可稳定提高后代群体的性状表现。

1.2 非加性效应

指基因间的相互作用导致的效应,无法通过单个基因的效应简单累加获得,主要包括显性效应(dominance effect)和上位效应(epistatic effect)

1.2.1 显性效应(Dominance Effect)

同源染色体上等位基因之间的相互作用(如显性、不完全显性、超显性等)导致的效应,即杂合子(如 Aa)的表型不等于显性纯合子(AA)和隐性纯合子(aa)效应的平均值。依赖杂合基因型存在,在纯合化(如自交)过程中会因杂合度降低而减弱或消失,不能稳定遗传。

1.2.2 上位效应(Epistatic Effect)

非同源染色体上非等位基因之间的相互作用(如一个基因抑制或增强另一个基因的表达)导致的效应,即某一基因的效应依赖于其他基因的基因型。依赖基因的组合方式,在基因重组时会因基因型组合改变而变化,同样不能稳定遗传。

二、系谱动物模型如何计算非加性效应

在系谱为基础的动物模型中,如果想要计算非加性效应,需要用系谱构建非加性效应矩阵,然后放到混合线性模型中的随机因子项中进行分析。

这里给出参考代码:

2.1 载入软件包和读取数据

# 计算系谱的显性矩阵

library(AGHmatrix)

library(nadiv)

library(asreml)

dat = read.csv("test_dat_dom.csv")

head(dat)

str(dat)

for(i in 1:4) dat[,i] = as.factor(as.character(dat[,i]))

str(dat)

ped = dat[,c(1,3,2)]

head(ped)

2.2 计算加性效应逆矩阵

ainv1 = ainverse(ped)

head(ainv1)

2.3 计算显性效应矩阵

ginvD <- makeD(ped)$listDinv# 显性效应逆矩阵

attr(ginvD,"INVERSE") = TRUE

head(ginvD)

2.4 计算上位效应矩阵

ginvAA <- makeAA(ped)$listAAinv# 加加效应逆矩阵

attr(ginvAA,"INVERSE") = TRUE

head(ginvAA)

ginvAD <- makeDomEpi(ped)$listADinv# 加显效应逆矩阵

attr(ginvAD,"INVERSE") = TRUE

head(ginvAD)

## 报错!数据原因,不支持显显的上位性效益

ginvDD <- makeDomEpi(ped)$listDDinv# 显显效应逆矩阵

attr(ginvDD,"INVERSE") = TRUE

2.5 建模分析

加性效应模型:

## asreml ablup

ainv1 = ainverse(ped)

head(ainv1)

model.A.as = asreml(trait1 ~ sex, random=~ vm(ID,ainv1),

                     residual = ~ idv(units),

                     data=dat)

model.A.as$converge

summary(model.A.as)$varcomp

vpredict(model.A.as,h2 ~ V1/(V1+V2))

加性效应+显性效应模型:

# 加性效应+显性效应

model.A_D <- asreml(trait1 ~ sex, random=~ vm(ID,ginvA) + vm(ID,ginvD),

                    residual = ~ idv(units),

                    data=dat)

summary(model.A_D)$varcomp

vpredict(model.A_D,h2 ~ V1/(V1+V2+V3))

blup_A_D = coef(model.A_D)$random

head(blup_A_D)

write.csv(blup_A_D,"blup_A_D.csv")

加性效应 + 显性效应 + 上位性效应模型:

# 加性效应 + 显性效应 + 加加效应

model.A_D_AA <- asreml(trait1 ~ sex,                        random=~ vm(A,ginvA) + vm(D,ginvD) + vm(AA,ginvAA),                       residual = ~ idv(units),                       data=dat)model.A_D_AA = update(model.A_D_AA)model.A_D_AA$convergesummary(model.A_D_AA)$varcomplrt.asreml(model.A.as_nadiv,model.A_D)lrt.asreml(model.A_D,model.A_D_AA)# 加性效应 + 显性效应 + 加加效应 + 加显效应model.A_D_AA_AD <- asreml(trait1 ~ sex,                           random=~ vm(A,ginvA) + vm(D,ginvD) + vm(AA,ginvAA) + vm(AD,ginvAD),                          residual = ~ idv(units),maxit=100,                          data=dat)model.A_D_AA_AD = update(model.A_D_AA_AD)summary(model.A_D_AA_AD)$varcomp

三、基因组选择模型如何计算非加性效应

基因组选择的非加性效应,和动物模型计算一样,需要先用基因型数据计算显性矩阵和上位性矩阵。

演示代码如下:

3.1 对基因型数据进行清洗

library(asreml)

library(ASRgenomics)library(data.table)library(learnasreml)M012 = fread("GS-data/genotype/plink.raw")M012[1:10,1:10]G = as.matrix(M012[,!c(1:6)])rownames(G) = M012$IIDG[1:10,1:10]# 清洗基因组数据:maf,callrateG_clean = qc.filtering(G,marker.callrate = 0.1,ind.callrate = 0.1,maf = 0.05)# G_clean$plot.maf#​ G_clean1 = qc.filtering(G_clean$M.clean,marker.callrate = 0.1,ind.callrate = 0.1,maf = 0.05)# G_clean1$plot.maf#​ G_clean1$plot.heterozG_clean$M.clean[1:10,1:10]clean_m012 = G_clean$M.cleanclean_m012[1:10,1:10]

3.2 对基因型数据计算加性矩阵

G_clean$M.clean[1:10,1:10]

Gmat = G.matrix(G_clean$M.clean)$G

Gmat[1:5,1:5]

ginv = G.inverse(Gmat,sparseform = T)$Ginv.sparse

head(ginv)

3.3 对基因型数据计算显性矩阵

# 构建显性效应

Dmat = G.matrix(clean_m012,method = "Vitezica")$G

Dmat[1:5,1:5]

diag(Dmat) = diag(Dmat) + 0.01

dinv = G.inverse(Dmat,sparseform = T)$Ginv.sparse

head(dinv)

3.4 对加性矩阵和显性矩阵进行建模

加性效应GBLUP模型:

modg = asreml(phe ~ Sex + Generation, 

              random = ~ vm(ID,ginv), 

              dense = ~ vm(ID,ginv),

              residual = ~ idv(units), 

              workspace = "2Gb",

              data=dd)

summary(dd)

dim(dd)

# 方差组分

summary(modg)$varcomp

# 遗传力

vpredict(modg, h2 ~ V1/(V1+V2))

加显效应GBLUP模型:

# 加性效应 + 显性效应

modg_ad = asreml(phe ~ Sex + Generation , 

              random = ~ vm(ID,ginv) + vm(ID,dinv), 

              dense = ~ vm(ID,ginv),

              residual = ~ idv(units), 

              workspace = "2Gb",

              data=dd)

# 方差组分

summary(modg_ad)$varcomp

vpredict(modg_ad, h2 ~ V1/(V1+V2+V3))

四、不会操作怎么办,快速学习