cat("#### Test estimateV at, fa, rr functions for MET data with asreml42\n")
test_that("MET_estimateV_asreml42", {
skip_if_not_installed("asreml")
skip_on_cran()
library(dae)
library(asreml)
library(asremlPlus)
#Function too replace design matrix colnames when computing V
replaceColnames <- function(des)
{
colnam <- colnames(des)
colnam <- strsplit(colnam, split = ":")
colnam <- lapply(colnam, strsplit, split = "_")
colnam <- lapply(colnam,
function(nam)
paste(sapply(nam, function(fac) fac[1]), collapse = ":"))
colnames(des) <- colnam
return(des)
}
data(MET)
asreml.options(design = TRUE, keep.order=TRUE)
#Test at
asreml.obj <-asreml(fixed = GY.tha ~ + at(expt, c(1:5)):rep + at(expt, c(1)):vrow +
at(expt, c(2,3,6,7)):colblocks +
at(expt, c(1:5,7)):vcol + Genotype*Condition*expt,
random = ~ at(expt, c(1)):dev(vrow) + at(expt, c(2)):spl(vcol) +
at(expt, c(3,5,7)):dev(vcol) + at(expt, c(7)):units,
data=comb.dat, maxit = 100, workspace = "1Gb")
summary(asreml.obj)$varcomp
ranterms <- names(asreml.obj$G.param)
n <- nrow(comb.dat)
design <- asreml.obj$design
design <- replaceColnames(design)
V.g <- matrix(0, nrow = n, ncol = n)
for (term in ranterms)
{
cols <- grep(term, colnames(design), fixed = TRUE)
V.g <- V.g + asreml.obj$vparameters[term] * (design[, cols] %*%
t(as.matrix(design[, cols])))
}
V.g <- as.matrix(asreml.obj$sigma2 * (V.g + mat.I(n)))
Vat <- estimateV(asreml.obj)
testthat::expect_true(all.equal(Vat, V.g))
set.daeTolerance(1e-04, 1e-04)
#All defaults
R2.adj <- R2adj(asreml.obj)
testthat::expect_true(all(abs(R2.adj - 86.26415) < 0.01))
testthat::expect_equal(attr(R2.adj, which = "fixed"), ~.)
#Specify a set of fixed terms
set.daeTolerance(1e-04, 1e-04)
fix.mod <- as.formula(paste("~", paste0("at(expt, '", levels(comb.dat$expt)[1:5],
"'):rep", collapse = " + ")))
R2.adj <- R2adj(asreml.obj, orthogonalize = "eigenmethods",
include.which.fixed = fix.mod)
testthat::expect_true(all(abs(R2.adj - 50.50893) < 0.01))
fix.mod <- as.formula(paste("~", paste0(c(paste0("at(expt, '", levels(comb.dat$expt)[1],
"'):rep"),
paste0("rep:at(expt, '", levels(comb.dat$expt)[2:5],
"')")), collapse = " + ")))
testthat::expect_equal(attr(R2.adj, which = "fixed"), fix.mod)
## Testing random term removal
#No fixed terms and a specified random term
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ at(expt, 'tcnue10'):dev(vcol))
testthat::expect_true(all(abs(R2.adj - 0.7028481) < 1e-02))
testthat::expect_equal(attr(R2.adj, which = "random"), ~at(expt, 'tcnue10'):dev(vcol))
#No fixed terms and three specified random terms
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ at(expt, 'tcnue10'):dev(vcol) +
at(expt, 'rsnue11'):dev(vcol) + at(expt, 'tarlee13'):dev(vcol))
testthat::expect_true(all(abs(R2.adj - 1.019012) < 1e-04))
testthat::expect_equal(attr(R2.adj, which = "random"),
~at(expt, 'tcnue10'):dev(vcol)+dev(vcol):at(expt, 'rsnue11')+dev(vcol):at(expt, 'tarlee13'))
#No fixed terms and minus a single bound random at term using actual level as in coefficients$random
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ . - at(expt, 'tarlee13'):units)
testthat::expect_true(all(abs(R2.adj - 2.741433) < 1e-02))
testthat::expect_true(attr(R2.adj, which = "random") ==
~at(expt, "mtnue10"):dev(vrow) + at(expt, "pnnue10"):spl(vcol) +
at(expt, "tcnue10"):dev(vcol) +
dev(vcol):at(expt, "rsnue11") + dev(vcol):at(expt, "tarlee13"))
#No fixed terms and minus a single random at term using ordinal level
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ . - at(expt, c(7)):units) #not removed because ordinal levels
testthat::expect_true(grepl('at\\(expt, \\"tarlee13\\"\\):units',
as.character(attr(R2.adj, which = "random"))[2])) #term still in formula
#No fixed terms and all random terms - provides benchmark
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL, include.which.random = ~ .)
testthat::expect_true(all(abs(R2.adj - 2.741433) < 1e-02))
testthat::expect_true(attr(R2.adj, which = "random") == ~.)
#No fixed terms and minus one of a compound random at term using actual level
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ . - at(expt, 'tarlee13'):dev(vcol))
testthat::expect_true(all(abs(R2.adj - 2.577726) < 1e-02))
testthat::expect_true(attr(R2.adj, which = "random") ==
~at(expt, "mtnue10"):dev(vrow) + at(expt, "pnnue10"):spl(vcol) +
at(expt, "tcnue10"):dev(vcol) + dev(vcol):at(expt, "rsnue11") +
at(expt, "tarlee13"):units)
## Test fixed model term removal
#No random terms and minus a single fixed term using actual level
R2.adj <- R2adj(asreml.obj, include.which.fixed = ~ . - at(expt, 'mtnue10'):vrow,
orthogonalize = "eigen")
testthat::expect_true(all(abs(R2.adj - 86.27269) < 1e-02))
testthat::expect_false(grepl('at\\(expt, \\"mtnue10\\"\\):vrow',
as.character(attr(R2.adj, which = "fixed"))[2]))
#No random terms and minus two single fixed terms using actual level from a compound term
R2.adj <- R2adj(asreml.obj,
include.which.fixed = ~ . - (at(expt, 'pnnue10'):colblocks +
at(expt, 'geranium13'):colblocks),
orthogonalize = "eigen")
testthat::expect_true(all(abs(R2.adj - 63.41818) < 1e-02))
testthat::expect_false(grepl('at\\(expt, \\"pnnue10\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_false(grepl('at\\(expt, \\"geranium13\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_true(grepl('at\\(expt, \\"tcnue10\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_true(grepl('colblocks:at\\(expt, \\"tarlee13\\"\\)',
as.character(attr(R2.adj, which = "fixed"))[2]))
## Test fixed model term removal
fix.mod <- c("at(expt, 'mtnue10'):rep", "at(expt, 'pnnue10'):rep",
"at(expt, 'tcnue10'):rep", "at(expt, 'csnue11'):rep",
"at(expt, 'rsnue11'):rep", "at(expt, 'mtnue10'):vrow",
"at(expt, 'pnnue10'):colblocks", "at(expt, 'tcnue10'):colblocks",
"at(expt, 'geranium13'):colblocks", "at(expt, 'tarlee13'):colblocks",
"at(expt, 'mtnue10'):vcol","at(expt, 'pnnue10'):vcol",
"at(expt, 'tcnue10'):vcol", "at(expt, 'csnue11'):vcol",
"at(expt, 'rsnue11'):vcol", "at(expt, 'tarlee13'):vcol")
#Test at with actual levels and single terms in the model
asreml.obj <-asreml(fixed = GY.tha ~ at(expt, c(1:5)):rep + at(expt, c(1)):vrow +
at(expt, c('pnnue10', "tcnue10", "geranium13", "tarlee13")):colblocks +
at(expt, c(1:5,7)):vcol + Genotype*Condition*expt,
random = ~ at(expt, 'mtnue10'):dev(vrow) + at(expt, 'pnnue10'):spl(vcol) +
at(expt, 'tcnue10'):dev(vcol) + at(expt, 'rsnue11'):dev(vcol) +
at(expt, 'tarlee13'):dev(vcol) + at(expt, 'tarlee13'):units,
data=comb.dat, maxit = 100, workspace = "1Gb")
summary(asreml.obj)$varcomp
#No fixed terms and minus a single bound random at term using actual level as in coefficients$random
R2.adj <- R2adj(asreml.obj, include.which.fixed = NULL,
include.which.random = ~ . - at(expt, 'tarlee13'):units)
testthat::expect_true(all(abs(R2.adj - 2.741433) < 1e-02))
testthat::expect_false(grepl('at\\(expt, \\"tarlee13\\"\\):units',
as.character(attr(R2.adj, which = "random"))[2])) #term still in formula
#No random terms and minus two single fixed terms using actual level from a compound term
R2.adj <- R2adj(asreml.obj,
include.which.fixed = ~ . - (at(expt, 'pnnue10'):colblocks +
at(expt, 'geranium13'):colblocks),
orthogonalize = "eigen")
testthat::expect_true(all(abs(R2.adj - 63.41818) < 1e-02))
testthat::expect_false(grepl('at\\(expt, \\"pnnue10\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_false(grepl('at\\(expt, \\"geranium13\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_true(grepl('at\\(expt, \\"tcnue10\\"\\):colblocks',
as.character(attr(R2.adj, which = "fixed"))[2]))
testthat::expect_true(grepl('colblocks:at\\(expt, \\"tarlee13\\"\\)',
as.character(attr(R2.adj, which = "fixed"))[2]))
#Test fa
asreml.obj <-asreml(fixed = GY.tha ~ + at(expt, c(1:5)):rep + at(expt, c(1)):vrow +
at(expt, c(2,3,6,7)):colblocks +
at(expt, c(1:5,7)):vcol + Condition*expt,
random = ~ fa(exptCond, k = 2):Genotype +
at(expt, c(1)):dev(vrow) + at(expt, c(2)):spl(vcol) +
at(expt, c(3,5,7)):dev(vcol) + at(expt, c(7)):units,
data=comb.dat, maxit = 100, workspace = "1Gb")
summary(asreml.obj)$varcomp
ranterms <- names(asreml.obj$G.param)
n <- nrow(comb.dat)
V.g <- matrix(0, nrow = n, ncol = n)
# for (term in ranterms[2:7])
# {
# cols <- grep(term, colnames(design), fixed = TRUE)
# print(length(cols))
# V.g <- V.g + asreml.obj$vparameters[term] * (asreml.obj$design[, cols] %*%
# t(as.matrix(asreml.obj$design[, cols])))
# }
# term <- ranterms[1]
# term <- "fa(exptCond, k = 2)"
# cols <- grep(term, colnames(asreml.obj$design), fixed = TRUE)[1:1364]
# vp <- asreml.obj$vparameters[names(asreml.obj$vparameters)[grep(term,
# names(asreml.obj$vparameters), fixed = TRUE)]]
# spec.var <- diag(vp[grepl("!var", names(vp), fixed = TRUE)])
# loads <- matrix(vp[grepl("!fa", names(vp), fixed = TRUE)], ncol = 2)
# Gfa <- loads %*% t(loads) + spec.var
# V.g <- V.g + (asreml.obj$design[, cols] %*% kronecker(Gfa, mat.I(62)) %*%
# t(as.matrix(asreml.obj$design[, cols])))
# V.g <- asreml.obj$sigma2 * (V.g + mat.I(n))
design <- asreml.obj$design
design <- replaceColnames(design)
for (term in ranterms[2:7])
{
cols <- grep(term, colnames(design), fixed = TRUE)
V.g <- V.g + asreml.obj$vparameters[term] * (design[, cols] %*% t(as.matrix(design[, cols])))
}
term <- ranterms[1]
cols <- grep(term, colnames(design), fixed = TRUE)[1:1364]
vp <- asreml.obj$vparameters[names(asreml.obj$vparameters)[grep(term,
names(asreml.obj$vparameters), fixed = TRUE)]]
spec.var <- diag(vp[grepl("!var", names(vp), fixed = TRUE)])
loads <- matrix(vp[grepl("!fa", names(vp), fixed = TRUE)], ncol = 2)
Gfa <- loads %*% t(loads) + spec.var
V.g <- V.g + (design[, cols] %*% kronecker(Gfa, mat.I(62)) %*%
t(as.matrix(design[, cols])))
V.g <- asreml.obj$sigma2 * (V.g + mat.I(n))
Vfa <- estimateV(asreml.obj)
testthat::expect_true(all(abs(Vfa - V.g) < 1e-06))
#Test rr
asreml.obj <-asreml(fixed = GY.tha ~ + at(expt, c(1:5)):rep + at(expt, c(1)):vrow +
at(expt, c(2,3,6,7)):colblocks +
at(expt, c(1:5,7)):vcol + Condition*expt,
random = ~ rr(exptCond, k = 2):Genotype +
at(expt, c(1)):dev(vrow) + at(expt, c(2)):spl(vcol) +
at(expt, c(3,5,7)):dev(vcol) + at(expt, c(7)):units,
data=comb.dat, maxit = 100, workspace = "1Gb")
summary(asreml.obj)$varcomp
ranterms <- names(asreml.obj$G.param)
n <- nrow(comb.dat)
V.g <- matrix(0, nrow = n, ncol = n)
design <- asreml.obj$design
design <- replaceColnames(design)
for (term in ranterms[2:7])
{
cols <- grep(term, colnames(design), fixed = TRUE)
V.g <- V.g + asreml.obj$vparameters[term] * (design[, cols] %*% t(as.matrix(design[, cols])))
}
term <- ranterms[1]
cols <- grep(term, colnames(design), fixed = TRUE)[1:1364]
vp <- asreml.obj$vparameters[names(asreml.obj$vparameters)[grep(term,
names(asreml.obj$vparameters), fixed = TRUE)]]
loads <- matrix(vp[grepl("!fa", names(vp), fixed = TRUE)], ncol = 2)
Gfa <- loads %*% t(loads)
V.g <- V.g + (design[, cols] %*% kronecker(Gfa, mat.I(62)) %*%
t(as.matrix(design[, cols])))
V.g <- asreml.obj$sigma2 * (V.g + mat.I(n))
Vrr <- estimateV(asreml.obj)
testthat::expect_true(all(abs(Vrr - V.g) < 1e-06))
asreml.options(design = FALSE)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.