Nothing
## -----------------------------------------------------------------------------
library(sommer)
data(DT_example)
DT <- DT_example
A <- A_example
ansSingle <- mmes(Yield~1,
random= ~ vsm(ism(Name), Gu=A),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansSingle)
# if setting henderson=TRUE provide the inverse
# Ai <- solve(A)
# Ai <- as(as(as( Ai, "dMatrix"), "generalMatrix"), "CsparseMatrix")
# attr(Ai, "inverse")=TRUE
## -----------------------------------------------------------------------------
ansMain <- mmes(Yield~Env,
random= ~ vsm(ism(Name), Gu=A),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansMain)
# if setting henderson=TRUE provide the inverse
# Ai <- solve(A)
# Ai <- as(as(as( Ai, "dMatrix"), "generalMatrix"), "CsparseMatrix")
# attr(Ai, "inverse")=TRUE
## -----------------------------------------------------------------------------
ansDG <- mmes(Yield~Env,
random= ~ vsm(dsm(Env),ism(Name), Gu=A),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansDG)
# if setting henderson=TRUE provide the inverse
# Ai <- solve(A)
# Ai <- as(as(as( Ai, "dMatrix"), "generalMatrix"), "CsparseMatrix")
# attr(Ai, "inverse")=TRUE
## -----------------------------------------------------------------------------
E <- diag(length(unique(DT$Env)));rownames(E) <- colnames(E) <- unique(DT$Env)
Ei <- solve(E)
Ai <- solve(A)
EAi <- kronecker(Ei,Ai, make.dimnames = TRUE)
Ei <- as(as(as( Ei, "dMatrix"), "generalMatrix"), "CsparseMatrix")
Ai <- as(as(as( Ai, "dMatrix"), "generalMatrix"), "CsparseMatrix")
EAi <- as(as(as( EAi, "dMatrix"), "generalMatrix"), "CsparseMatrix")
attr(Ai, "inverse")=TRUE
attr(EAi, "inverse")=TRUE
ansCS <- mmes(Yield~Env,
random= ~ vsm(ism(Name), Gu=Ai) + vsm(ism(Env:Name), Gu=EAi),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansCS)
## -----------------------------------------------------------------------------
ansUS <- mmes(Yield~Env,
random= ~ vsm(usm(Env),ism(Name), Gu=A),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansUS)
# if setting henderson=TRUE provide the inverse
Ai <- solve(A)
Ai <- as(as(as( Ai, "dMatrix"), "generalMatrix"), "CsparseMatrix")
attr(Ai, "inverse")=TRUE
## -----------------------------------------------------------------------------
library(orthopolynom)
DT$EnvN <- as.numeric(as.factor(DT$Env))
ansRR <- mmes(Yield~Env,
random= ~ vsm(dsm(leg(EnvN,1)),ism(Name)),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansRR)
## -----------------------------------------------------------------------------
library(orthopolynom)
DT$EnvN <- as.numeric(as.factor(DT$Env))
ansRR <- mmes(Yield~Env,
random= ~ vsm(usm(leg(EnvN,1)),ism(Name)),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansRR)
## -----------------------------------------------------------------------------
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 <- mmes(Yield~Env,
random= ~ vsm(ism(Name), Gu=A) + vsm(ism(Env:Name), Gu=EA),
rcov= ~ units,
data=DT, verbose = FALSE)
summary(ansCS)
## -----------------------------------------------------------------------------
data(DT_h2)
DT <- DT_h2
## build the environmental index
ei <- aggregate(y~Env, data=DT,FUN=mean)
colnames(ei)[2] <- "envIndex"
ei$envIndex <- ei$envIndex - mean(ei$envIndex,na.rm=TRUE) # center the envIndex to have clean VCs
ei <- ei[with(ei, order(envIndex)), ]
## add the environmental index to the original dataset
DT2 <- merge(DT,ei, by="Env")
# numeric by factor variables like envIndex:Name can't be used in the random part like this
# they need to come with the vsm() structure
DT2 <- DT2[with(DT2, order(Name)), ]
mix2 <- mmes(y~ envIndex, henderson=TRUE,
random=~ Name + vsm(dsm(envIndex),ism(Name)), data=DT2,
rcov=~vsm(dsm(Name),ism(units)),
tolParConvNorm = .0001,
nIters = 50, verbose = FALSE
)
# summary(mix2)$varcomp
b=mix2$uList$`vsm(dsm(envIndex), ism(Name))` # adaptability (b) or genotype slopes
mu=mix2$uList$`vsm( ism( Name ) )` # general adaptation (mu) or main effect
e=sqrt(summary(mix2)$varcomp[-c(1:2),1]) # error variance for each individual
## general adaptation (main effect) vs adaptability (response to better environments)
plot(mu[,1]~b[,1], ylab="general adaptation", xlab="adaptability")
text(y=mu[,1],x=b[,1], labels = rownames(mu), cex=0.5, pos = 1)
## prediction across environments
Dt <- mix2$Dtable
Dt[1,"average"]=TRUE
Dt[2,"include"]=TRUE
Dt[3,"include"]=TRUE
pp <- predict(mix2,Dtable = Dt, D="Name")
preds <- pp$pvals
# preds[with(preds, order(-predicted.value)), ]
## performance vs stability (deviation from regression line)
plot(preds[,2]~e, ylab="performance", xlab="stability")
text(y=preds[,2],x=e, labels = rownames(mu), cex=0.5, pos = 1)
## -----------------------------------------------------------------------------
data(DT_h2)
DT <- DT_h2
DT=DT[with(DT, order(Env)), ]
head(DT)
indNames <- na.omit(unique(DT$Name))
A <- diag(length(indNames))
rownames(A) <- colnames(A) <- indNames
# fit diagonal model first to produce H matrix
ansDG <- mmes(y~Env, henderson=TRUE,
random=~ vsm(dsm(Env), ism(Name)),
rcov=~units, nIters = 100,
# we recommend giving more EM iterations at the beggining
emWeight = c(rep(1,10),logspace(10,1,.05), rep(.05,80)),
data=DT, verbose = FALSE)
H0 <- ansDG$uList$`vsm(dsm(Env), ism(Name))` # GxE table
# reduced rank model
ansFA <- mmes(y~Env, henderson=TRUE,
random=~vsm( usm(rrm(Env, H = H0, nPC = 3)) , ism(Name)) + # rr
vsm(dsm(Env), ism(Name)), # diag
rcov=~units,
# we recommend giving more iterations to these models
nIters = 100, verbose = FALSE,
# we recommend giving more EM iterations at the beggining
emWeight = c(rep(1,10),logspace(10,1,.05), rep(.05,80)),
data=DT)
vcFA <- ansFA$theta[[1]]
vcDG <- ansFA$theta[[2]]
loadings=with(DT, rrm(Env, nPC = 3, H = H0, returnGamma = TRUE) )$Gamma
scores <- ansFA$uList[[1]]
vcUS <- loadings %*% vcFA %*% t(loadings)
G <- vcUS + vcDG
# colfunc <- colorRampPalette(c("steelblue4","springgreen","yellow"))
# hv <- heatmap(cov2cor(G), col = colfunc(100), symm = TRUE)
uFA <- scores %*% t(loadings)
uDG <- ansFA$uList[[2]]
u <- uFA + uDG
## -----------------------------------------------------------------------------
##########
## stage 1
## use mmes for dense field trials
##########
data(DT_h2)
DT <- DT_h2
head(DT)
envs <- unique(DT$Env)
BLUEL <- list()
XtXL <- list()
for(i in 1:length(envs)){
ans1 <- mmes(y~Name-1,
random=~Block,
verbose=FALSE,
data=droplevels(DT[which(DT$Env == envs[i]),]
)
)
ans1$Beta$Env <- envs[i]
BLUEL[[i]] <- data.frame( Effect=factor(rownames(ans1$b)),
Estimate=ans1$b[,1],
Env=factor(envs[i]))
# to be comparable to 1/(se^2) = 1/PEV = 1/Ci = 1/[(X'X)inv]
XtXL[[i]] <- solve(ans1$Ci[1:nrow(ans1$b),1:nrow(ans1$b)])
}
DT2 <- do.call(rbind, BLUEL)
OM <- do.call(adiag1,XtXL)
##########
## stage 2
## use mmes for sparse equation
##########
m <- matrix(1/var(DT2$Estimate, na.rm = TRUE))
ans2 <- mmes(Estimate~Env, henderson=TRUE,
random=~ Effect + Env:Effect,
rcov=~vsm(ism(units,thetaC = matrix(3), theta = m)),
W=OM,
verbose=FALSE,
data=DT2
)
summary(ans2)$varcomp
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.