
欢迎关注ASReml线下培训
1.1 加性效应
指等位基因或非等位基因对性状的贡献值可以累加的效应。即每个基因(或等位基因)对性状的影响是独立的,多个基因的总效应等于各个基因单独效应的总和,不受其他基因(或等位基因)组合方式的影响。
特点:
可稳定遗传:加性效应由基因的累加作用决定,在世代传递中不会因基因重组而消失(只要基因本身存在),是亲子代性状相似的主要原因。
决定育种值:个体的加性效应总和称为 “育种值”(breeding value),是选择育种(如自交系改良、纯系选育)的核心依据 —— 通过选择育种值高的个体,可稳定提高后代群体的性状表现。
指基因间的相互作用导致的效应,无法通过单个基因的效应简单累加获得,主要包括显性效应(dominance effect)和上位效应(epistatic effect)
1.2.1 显性效应(Dominance Effect)
同源染色体上等位基因之间的相互作用(如显性、不完全显性、超显性等)导致的效应,即杂合子(如 Aa)的表型不等于显性纯合子(AA)和隐性纯合子(aa)效应的平均值。依赖杂合基因型存在,在纯合化(如自交)过程中会因杂合度降低而减弱或消失,不能稳定遗传。
1.2.2 上位效应(Epistatic Effect)
非同源染色体上非等位基因之间的相互作用(如一个基因抑制或增强另一个基因的表达)导致的效应,即某一基因的效应依赖于其他基因的基因型。依赖基因的组合方式,在基因重组时会因基因型组合改变而变化,同样不能稳定遗传。
在系谱为基础的动物模型中,如果想要计算非加性效应,需要用系谱构建非加性效应矩阵,然后放到混合线性模型中的随机因子项中进行分析。
这里给出参考代码:
# 计算系谱的显性矩阵
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))
四、不会操作怎么办,快速学习



