sommer包的GbyE分析

sommer包可以做单环境模型、主效应模型、对角线模型(DG)、复合对称模型(CS)、复合对称+对角线模型(CS+DG)、非结构化模型(US)、随机回归模型(RR)和协方差结构G×E。当然,还可以有其他自己的组合。

library(sommer)
data(DT_example)
DT <- DT_example  # 41个土豆材料,1个地点,3个年份=3个环境
A <- A_example   # 系谱矩阵
# 1. 单地点
# BLUP
ansSingle <- mmer(Yield~1,
                  random= ~ vs(Name, Gu=A),
                  rcov= ~ units,
                  data=DT, verbose = FALSE)
summary(ansSingle)

# 2. 主效应,假设没有基因型与环境互作
# 环境作为固定效应+BLUP
ansMain <- mmer(Yield~Env,
                random= ~ vs(Name, Gu=A),
                rcov= ~ units,
                data=DT, verbose = FALSE)
summary(ansMain)

# 3. 对角线模型
# 假设存在基因型与环境互作
# 假设每个环境基因型的方差不同
# 每个环境单独拟合基因型效应
# 缺点:没有环境间的协方差(每个环境为不同个体)
# 环境作为固定效应+单环境的BLUP(环境的对角线矩阵)
ansDG <- mmer(Yield~Env,
              random= ~ vs(ds(Env),Name, Gu=A),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansDG)

# 4. 复合对称模型
# 假设存在基因型与环境互作
# 主要的基因型方差协方差分量跨所有环境
# 假设主要的基因型效应被跨环境效应影响
# 缺点:各环境之间有相同的方差-协方差
# 环境作为固定效应+BLUP+GEI
E <- diag(length(unique(DT$Env)))   # 环境的对角线矩阵
rownames(E) <- colnames(E) <- unique(DT$Env)   #  添加环境名称
# 克罗内克乘积,矩阵1的每一项×矩阵2的每一项
# 若矩阵1是m×n,矩阵2是p×q,则克罗内克乘积是mp×nq的方形矩阵
# make.dimnames表示添加行名列名
EA <- kronecker(E,A, make.dimnames = TRUE)
ansCS <- mmer(Yield~Env,
              random= ~ vs(Name, Gu=A) + vs(Env:Name, Gu=EA),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansCS)

# 5. 复合对称+对角线模型
# 假设存在基因型与环境互作
# 假设每个环境都有不同的基因型与环境互作方差
# 缺点:各环境有相同的协方差
# 环境作为固定效应+BLUP+每个地点的基因型与环境互作效应
ansMain <- mmer(Yield~Env,
                random= ~ vs(Name, Gu=A) + vs(ds(Env),Name, Gu=A),
                rcov= ~ units,
                data=DT, verbose = FALSE)
summary(ansMain)

# 6. 非结构化模型
# 假设存在基因型与环境互作
# 非结构化模型可以得到尽可能多的环境到环境组合的协方差
# 缺点:方差分量很大,方差组分很难收敛,一些方差协方差组分是零,且很难有良好的初始值
# 环境作为固定效应+单环境BLUP(协方差调整)
ansUS <- mmer(Yield~Env,
              random= ~ vs(us(Env),Name, Gu=A),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansUS)

# 7. 随机回归模型
# 假设环境可以视为连续变量,因此,截距和斜率的方差组分可以被拟合
# 方差分量的数量将依赖于Legendre多项式拟合的阶数(leg函数)
GBIT.library("orthopolynom")
DT$EnvN <- as.numeric(as.factor(DT$Env))
ansRR <- mmer(Yield~Env,
              random= ~ vs(leg(EnvN,1),Name),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansRR)
# 此外,其他结构的方差协方差矩阵可以应用于这个多项式
GBIT.library("orthopolynom")
DT$EnvN <- as.numeric(as.factor(DT$Env))
ansRR <- mmer(Yield~Env,
              random= ~ vs(us(leg(EnvN,1)),Name),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansRR)

# 8. 基因型环境互作协方差结构
# 不常用,但1阶自回归和其他协方差结构可以应用于GEI模型
# 
E <- AR1(DT$Env) # can be AR1() or CS(), etc.
rownames(E) <- colnames(E) <- unique(DT$Env)
EA <- kronecker(E,A, make.dimnames = TRUE)
ansCS <- mmer(Yield~Env,
              random= ~ vs(Name, Gu=A) + vs(Env:Name, Gu=EA),
              rcov= ~ units,
              data=DT, verbose = FALSE)
summary(ansCS)

sommer使用直接反演(DI)算法,大数据集会非常缓慢。该包比较适合p>n,即随机效应水平大于材料数。1000个材料,2个重复,2000个记录,或者300个材料,100000个标记,sommer包能快速完成。

评论

发表回复