Title: | Augments 'ASReml-R' in Fitting Mixed Models and Packages Generally in Exploring Prediction Differences |
---|---|
Description: | Assists in automating the selection of terms to include in mixed models when 'asreml' is used to fit the models. Procedures are available for choosing models that conform to the hierarchy or marginality principle, for fitting and choosing between two-dimensional spatial models using correlation, natural cubic smoothing spline and P-spline models. A history of the fitting of a sequence of models is kept in a data frame. Also used to compute functions and contrasts of, to investigate differences between and to plot predictions obtained using any model fitting function. The content falls into the following natural groupings: (i) Data, (ii) Model modification functions, (iii) Model selection and description functions, (iv) Model diagnostics and simulation functions, (v) Prediction production and presentation functions, (vi) Response transformation functions, (vii) Object manipulation functions, and (viii) Miscellaneous functions (for further details see 'asremlPlus-package' in help). The 'asreml' package provides a computationally efficient algorithm for fitting a wide range of linear mixed models using Residual Maximum Likelihood. It is a commercial package and a license for it can be purchased from 'VSNi' <https://vsni.co.uk/> as 'asreml-R', who will supply a zip file for local installation/updating (see <https://asreml.kb.vsni.co.uk/>). It is not needed for functions that are methods for 'alldiffs' and 'data.frame' objects. The package 'asremPlus' can also be installed from <http://chris.brien.name/rpackages/>. |
Authors: | Chris Brien [aut, cre] |
Maintainer: | Chris Brien <[email protected]> |
License: | MIT + file LICENSE |
Version: | 4.4.40 |
Built: | 2024-10-28 11:23:12 UTC |
Source: | CRAN |
Assists in automating the selection of terms to include in mixed models when 'asreml' is used to fit the models. Procedures are available for choosing models that conform to the hierarchy or marginality principle, for fitting and choosing between two-dimensional spatial models using correlation, natural cubic smoothing spline and P-spline models. A history of the fitting of a sequence of models is kept in a data frame. Also used to compute functions and contrasts of, to investigate differences between and to plot predictions obtained using any model fitting function. The content falls into the following natural groupings: (i) Data, (ii) Model modification functions, (iii) Model selection and description functions, (iv) Model diagnostics and simulation functions, (v) Prediction production and presentation functions, (vi) Response transformation functions, (vii) Object manipulation functions, and (viii) Miscellaneous functions (for further details see 'asremlPlus-package' in help). The 'asreml' package provides a computationally efficient algorithm for fitting a wide range of linear mixed models using Residual Maximum Likelihood. It is a commercial package and a license for it can be purchased from 'VSNi' <https://vsni.co.uk/> as 'asreml-R', who will supply a zip file for local installation/updating (see <https://asreml.kb.vsni.co.uk/>). It is not needed for functions that are methods for 'alldiffs' and 'data.frame' objects. The package 'asremPlus' can also be installed from <http://chris.brien.name/rpackages/>.
Version: 4.4.40
Date: 2024-10-27
Note that many of the function below are S3 methods so that the suffix can be omitted. Of course, whether or not the suffix is omitted, the object supplied to the first argument must be of the class specified by the suffix. For example getFormulae.asreml
is a getFormulae
method for an asreml.object
and so .asreml
can be omitted and the object supplied to the first argument must be of class asreml
.
(i) Data | |
Oats.dat
|
Data for an experiment to investigate nitrogen response of |
3 oats varieties. | |
Wheat.dat
|
Data for an experiment to investigate 25 varieties of |
wheat. | |
WaterRunoff.dat
|
Data for an experiment to investigate the quality of |
water runoff over time | |
(ii) Model modification | |
addSpatialModel.asrtests
|
Adds, to a supplied model, a spatial model that accounts for |
local spatial variation. | |
addSpatialModelOnIC.asrtests
|
Uses information criteria to decide whether to add a spatial |
model to account for local spatial variation. | |
changeTerms.asrtests
|
Adds and drops terms from one or both of the fixed or random |
model, replaces the residual (rcov) model with a new model | |
and changes bounds or initial values of terms. | |
iterate.asrtests
|
Subject the fitted asreml.obj stored in an asrtests.object |
to further iterations of the fitting process. | |
newfit.asreml
|
Refits an asreml model with changed arguments by extracting, |
modifying and evaluating its call - an alternate to |
|
update.asreml. | |
reparamSigDevn.asrtests
|
Reparamterizes each random (deviations) term |
involving 'devn.fac' to a fixed term and ensures | |
that the same term, with 'trend.num' replacing | |
'devn.fac', is included if any other term with | |
'trend.num' is included in 'terms'. | |
rmboundary.asrtests
|
Removes any boundary or singular variance components |
from the fit stored in 'asreml.obj' and records their | |
removal in an asrtests.object . |
|
setvarianceterms.call
|
Allows the setting of bounds and initial values |
for terms in the 'random' and 'residual' arguments of an | |
'asreml' call. | |
(iii) Model selection and description | |
addto.test.summary
|
Adds a row to a test.summary data.frame . |
changeModelOnIC.asrtests
|
Uses information criteria to decide whether to change an |
already fitted model. | |
chooseModel.asrtests
|
Determines and records the set of significant terms using an |
asrtests.object , taking into account the hierarchy |
|
or marginality relations of the terms.. | |
chooseModel.data.frame
|
Determines the set of significant terms from results stored |
in a data.frame , taking into account the marginality |
|
relations of terms and recording the tests used in a | |
data.frame . |
|
chooseSpatialModelOnIC.asrtests
|
Uses information criteria to choose the best fitting |
spatial model for accounting for local spatial variation. | |
getTestPvalue.asrtests
|
Gets the p-value for a test recorded in the test.summary |
data.frame of an asrtests.object . |
|
infoCriteria.asreml
|
Computes AIC and BIC for models. |
infoCriteria.list
|
Computes AIC and BIC for models. |
R2adj.asreml
|
Calculates the adjusted coefficient of determination for a |
specified combination of fixed and random terms. | |
recalcWaldTab.asrtests
|
Recalculates the denDF, F.inc and P values for a table |
of Wald test statistics obtained using 'wald.asreml'. | |
REMLRT.asreml
|
Performs a REML ratio test. |
bootREMLRT.asreml
|
Performs a REML ratio test using the parametric |
bootstrap. | |
testranfix.asrtests
|
Tests for a single fixed or random term in model |
fitted using 'asreml' and records the result in an | |
asrtests.object . |
|
testresidual.asrtests
|
Fits a new residual formula using 'asreml', tests |
whether the change is significant and records the | |
result in an asrtests.object . |
|
testswapran.asrtests
|
Tests, using a REMLRT, the significance of the difference |
between the current random model and one in which oldterms | |
are dropped and newterms are added. The result is recorded | |
in an asrtests.object . |
|
(iv) Model diagnostics and simulation | |
plotVariofaces
|
Plots empirical variogram faces, including envelopes, |
from supplied residuals as described by Stefanova, Smith | |
& Cullis (2009). | |
variofaces.asreml
|
Calculates and plots empirical variogram faces, including |
envelopes, as described by Stefanova, Smith & Cullis (2009). | |
estimateV.asreml
|
Forms the estimated variance, random or residual matrix for |
the observations from the variance parameter estimates. | |
simulate.asreml
|
Produce sets of simulated data from a multivariate normal |
distribution and save quantities related to the simulated data. | |
(v) Prediction production and presentation | |
addBacktransforms.alldiffs
|
Adds or recalculates the backtransforms component of an |
alldiffs.object . |
|
allDifferences.data.frame
|
Using supplied predictions and standard errors of pairwise |
differences or the variance matrix of predictions, forms | |
all pairwise differences between the set of predictions, and | |
p-values for the differences. | |
exploreLSDs
|
Explores the computed LSD values for pairwise differences |
between predictions. | |
linTransform.alldiffs
|
Calculates a linear transformation of the |
predictions stored in an alldiffs.object . |
|
pairdiffsTransform.alldiffs
|
Calculates the differences between nominated pairs of |
predictions stored in an alldiffs.object |
|
pickLSDstatistics
|
Pick LSDstatistics whose values minimize the number of |
errors in pairwise comparisons of predictions. | |
plotLSDerrors.data.frame
|
Plots a map of the supplied errors that occur in using the |
computed LSD values for pairwise differences between | |
predictions. | |
plotLSDerrors.alldiffs
|
Plots a map of the errors that occur in using the computed |
LSD values for pairwise differences between predictions. | |
plotLSDs.data.frame
|
Plots a heat map of computed LSD values for pairwise |
differences between predictions. | |
plotLSDs.alldiffs
|
Plots a heat map of computed LSD values for pairwise |
differences between predictions. | |
plotPredictions.data.frame
|
Plots the predictions for a term, possibly with |
error bars. | |
plotPvalues.alldiffs
|
Plots the p-values in the p.differences components |
of an alldiffs.object as a heat map. |
|
plotPvalues.data.frame
|
Plots the p-values in data.frame as a heat map. |
predictPlus.asreml
|
Forms the predictions and associated statistics for |
a term, using an asreml object and a wald.tab and | |
taking into account that a numeric vector | |
and a factor having parallel values may occur in the | |
model. It stores the results in an object of class | |
'alldifffs' and may print the results. It can be | |
when there are not parallel values. | |
predictPresent.asreml
|
Forms the predictions for each of one or more terms |
and presents them in tables and/or graphs. | |
ratioTransform.alldiffs
|
Calculates the ratios of nominated pairs of predictions |
stored in an alldiffs.object . |
|
recalcLSD.alldiffs
|
Adds or recalculates the LSD.frame that is a |
component of an alldiffs.object . |
|
redoErrorIntervals.alldiffs
|
Adds or replaces the error intervals stored in the |
prediction component of an alldiffs.object . |
|
renewClassify.alldiffs
|
Renews the components in an alldiffs.object |
according to a new classify. | |
sort.alldiffs
|
Sorts the components in an alldiffs.object |
according to the predicted values associated with a factor. | |
subset.alldiffs
|
Subsets the components in an alldiffs.object according |
to the supplied condition. | |
sort.predictions.frame
|
Sorts a predictions.frame according to the |
predicted values. associated with a factor. | |
(vi) Response transformation | |
angular
|
Applies the angular transformation to proportions. |
angular.mod
|
Applies the modified angular transformation to a |
vector of counts. | |
powerTransform
|
Performs a combination of a linear and a power |
transformation on a variable. The transformed | |
variable is stored in the 'data.frame data'. | |
(vii) Object manipulation | |
as.alldiffs
|
Forms an alldiffs.object from the supplied |
predictions, along with those statistics, associated with | |
the predictions and their pairwise differences, that have | |
been supplied. | |
asrtests
|
Pseudonym for as.asrtests . |
as.asrtests
|
Forms an asrtests.object that stores |
(i) a fitted asreml object, | |
(ii) a pseudo-anova table for the fixed terms and | |
(iii) a history of changes and hypothesis testing | |
used in obtaining the model. | |
as.predictions.frame
|
Forms a predictions.frame from a data.frame, ensuring |
that the correct columns are present. | |
convAsremlobj.asreml
|
Recreates an asreml object so that it is compatible with the |
currently loaded asreml version. |
|
convEffectNames2DataFrame.asreml
|
Converts the effects names for a term stored in the component of an |
asreml object into a data.frame . |
|
facCombine.alldiffs
|
Combines several factors into one in the components of |
an alldiffs.object . |
|
facRecast.alldiffs
|
Reorders and/or revises the factor levels using the order of |
old levels in levels.order and the new labels for the |
|
levels given in newlabels . |
|
facRename.alldiffs
|
Renames factor s in the prediction component |
of an alldiffs.object . |
|
getFormulae.asreml
|
Gets the formulae from an asreml object. |
is.alldiffs
|
A single-line function that tests whether an object is |
of class alldiffs. | |
is.asrtests
|
A single-line function that tests whether an object is |
of class asrtests. | |
is.predictions.frame
|
A single-line function that tests whether an object is |
of classes predictions.frame and data.frame . |
|
makeTPPSplineMats.data.frame
|
Make the spline basis matrices and data needed to fit |
Tensor Product P-Splines. | |
print.alldiffs
|
Prints the values in an alldiffs.object in a nice format. |
print.asrtests
|
Prints the values in an asrtests.object . |
print.LSDdata
|
Prints the components of a list containing data on the |
LSDs for all pairwise differences of predictions. | |
print.predictions.frame
|
Prints the values in a predictions.frame , with or without |
title and heading. | |
print.test.summary
|
Prints a data.frame containing a test.summary. |
print.wald.tab
|
Prints a data.frame containing a Wald or pseudoanova table. |
printFormulae.asreml
|
Prints the formulae from an asreml object. |
sort.alldiffs
|
Sorts the components of an alldiffs.object according to |
the predicted values associated with a factor. | |
subset.alldiffs
|
Subsets the components in an alldiffs.object according |
to the supplied condition. | |
subset.list
|
Forms a list that contains a subset of the components of |
the supplied list . |
|
validAlldiffs
|
Checks that an object is a valid alldiffs.object . |
validAsrtests
|
Checks that an object is a valid asrtests.object . |
validPredictionsFrame
|
Checks that an object is a valid predictions.frame . |
(viii) Miscellaneous | |
getASRemlVersionLoaded
|
Finds the version of asreml that is loaded and |
returns the initial characters in version. | |
isCompoundSymmetric
|
Tests whether an object of class matrix is |
compound symmetric | |
loadASRemlVersion
|
Ensures that a specific version of asreml is loaded. |
num.recode
|
Recodes the unique values of a vector using the values |
in a new vector. | |
permute.square
|
Permutes the rows and columns of a square matrix. |
permute.to.zero.lowertri
|
Permutes a square matrix until all the lower |
triangular elements are zero. | |
The functions whose names end in 'alldiffs" utilize an alldiffs.object
that stores:
(i) a predictions.frame
, being a data frame containing predicted values, variables indexing them and their standard errors and estimability status;
the lower and upper limits of error intervals will be included when these are requested,
(ii) optionally, square matrices containing all pairwise differences, the standard errors and p-values of the differences,
and a data.frame
containing LSD values and their summary statistics,
(iii) optionally, the variance matrix of the predictions, and
(iv) if the response was transformed for analysis, a data frame with backtransforms of the predicted values.
The functions whose names end in 'asrtests', which are most of the model functions, utilize an asrtests.object
that stores:
(i) the currently fitted model in asreml.obj
,
(ii) the table of test statistics for the fixed effects in wald.tab
, and
(iii) a data frame that contains a history of the changes made to the model in test.summary
.
Chris Brien [aut, cre] (<https://orcid.org/0000-0003-0581-1817>)
Maintainer: Chris Brien <[email protected]>
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/
asreml
## Not run: ## Analyse wheat dat using asreml and asremlPlus (see the WheatSpatial Vignette for details) ## Set up for analysis library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Add row and column covariates for the spatial modelling tmp.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) # Fit an initial model - Row and column random current.asr <- do.call(asreml, list(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, residual = ~ Row:Column, data = tmp.dat)) # Intialize a model sequence by loading the current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL, IClikelihood = "full", label = "Initial model") # Check for and remove any boundary terms and print a summary of the fit in the asrtests object current.asrt <- rmboundary(current.asrt) print(current.asrt) ## Compare a series of information criteria to select a linear mixed model for the data # Check the need for the term for within Column pairs (a post hoc factor) current.asrt <- changeModelOnIC(current.asrt, dropFixed = "WithinColPairs", label = "Try dropping withinColPairs", IClikelihood = "full") print(current.asrt) # Fit an ar1 model for local spatial variation spatial.ar1.asrt <- addSpatialModelOnIC(current.asrt, spatial.model = "corr", row.covar = "cRow", col.covar = "cColumn", row.factor = "Row", col.factor = "Column", IClikelihood = "full") spatial.ar1.asrt <- rmboundary(spatial.ar1.asrt) infoCriteria(list(nonspatial = current.asrt$asreml.obj, ar1 = spatial.ar1.asrt$asreml.obj)) print(spatial.ar1.asrt) # Choose a model for local spatial variation from several potential models suppressWarnings( spatial.asrts <- chooseSpatialModelOnIC(current.asrt, row.covar = "cRow", col.covar = "cColumn", row.factor = "Row", col.factor = "Column", dropRandom = "Row + Column", rotateX = TRUE, ngridangles = NULL, asreml.option = "grp", return.asrts = "all")) # Output the results print(spatial.asrts$spatial.IC) print(R2adj(spatial.asrts$asrts$TPNCSS$asreml.obj, include.which.random = ~ .)) print(spatial.asrts$best.spatial.mod) print(spatial.asrts$asrts$TPNCSS) printFormulae(spatial.asrts$asrts$TPNCSS$asreml.obj) ## Diagnosting checking using residual plots and variofaces # Get current fitted asreml object and update to include standardized residuals current.asr <- spatial.asrts$asrts$TPNCSS$asreml.obj current.asr <- update(current.asr, aom=TRUE) Wheat.dat$res <- residuals(current.asr, type = "stdCond") Wheat.dat$fit <- fitted(current.asr) # Do residuals-versus-fitted values plot with(Wheat.dat, plot(fit, res)) # Plot variofaces variofaces(current.asr, V=NULL, units="addtores", maxiter=50, update = FALSE, ncores = parallel::detectCores()) # Plot normal quantile plot ggplot(data = Wheat.dat, mapping = aes(sample = res)) + stat_qq_band(bandType = "ts") + stat_qq_line() + stat_qq_point() + labs(x = "Theoretical Quantiles", y = "Sample Quantiles", title = "Normal probability plot") + theme(plot.title = element_text(size = 12, face = "bold")) + theme_bw() ## Prediction production and presentation # Get Variety predictions and all pairwise prediction differences and p-values Var.diffs <- predictPlus(classify = "Variety", asreml.obj=current.asr, error.intervals="halfLeast", wald.tab=current.asrt$wald.tab, sortFactor = "Variety", tables = "predictions") # Plot the Variety predictions, with halfLSD intervals, and the p-values plotPredictions(Var.diffs$predictions, classify = "Variety", y = "predicted.value", error.intervals = "half") plotPvalues(Var.diffs) ## End(Not run)
## Not run: ## Analyse wheat dat using asreml and asremlPlus (see the WheatSpatial Vignette for details) ## Set up for analysis library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Add row and column covariates for the spatial modelling tmp.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) # Fit an initial model - Row and column random current.asr <- do.call(asreml, list(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, residual = ~ Row:Column, data = tmp.dat)) # Intialize a model sequence by loading the current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL, IClikelihood = "full", label = "Initial model") # Check for and remove any boundary terms and print a summary of the fit in the asrtests object current.asrt <- rmboundary(current.asrt) print(current.asrt) ## Compare a series of information criteria to select a linear mixed model for the data # Check the need for the term for within Column pairs (a post hoc factor) current.asrt <- changeModelOnIC(current.asrt, dropFixed = "WithinColPairs", label = "Try dropping withinColPairs", IClikelihood = "full") print(current.asrt) # Fit an ar1 model for local spatial variation spatial.ar1.asrt <- addSpatialModelOnIC(current.asrt, spatial.model = "corr", row.covar = "cRow", col.covar = "cColumn", row.factor = "Row", col.factor = "Column", IClikelihood = "full") spatial.ar1.asrt <- rmboundary(spatial.ar1.asrt) infoCriteria(list(nonspatial = current.asrt$asreml.obj, ar1 = spatial.ar1.asrt$asreml.obj)) print(spatial.ar1.asrt) # Choose a model for local spatial variation from several potential models suppressWarnings( spatial.asrts <- chooseSpatialModelOnIC(current.asrt, row.covar = "cRow", col.covar = "cColumn", row.factor = "Row", col.factor = "Column", dropRandom = "Row + Column", rotateX = TRUE, ngridangles = NULL, asreml.option = "grp", return.asrts = "all")) # Output the results print(spatial.asrts$spatial.IC) print(R2adj(spatial.asrts$asrts$TPNCSS$asreml.obj, include.which.random = ~ .)) print(spatial.asrts$best.spatial.mod) print(spatial.asrts$asrts$TPNCSS) printFormulae(spatial.asrts$asrts$TPNCSS$asreml.obj) ## Diagnosting checking using residual plots and variofaces # Get current fitted asreml object and update to include standardized residuals current.asr <- spatial.asrts$asrts$TPNCSS$asreml.obj current.asr <- update(current.asr, aom=TRUE) Wheat.dat$res <- residuals(current.asr, type = "stdCond") Wheat.dat$fit <- fitted(current.asr) # Do residuals-versus-fitted values plot with(Wheat.dat, plot(fit, res)) # Plot variofaces variofaces(current.asr, V=NULL, units="addtores", maxiter=50, update = FALSE, ncores = parallel::detectCores()) # Plot normal quantile plot ggplot(data = Wheat.dat, mapping = aes(sample = res)) + stat_qq_band(bandType = "ts") + stat_qq_line() + stat_qq_point() + labs(x = "Theoretical Quantiles", y = "Sample Quantiles", title = "Normal probability plot") + theme(plot.title = element_text(size = 12, face = "bold")) + theme_bw() ## Prediction production and presentation # Get Variety predictions and all pairwise prediction differences and p-values Var.diffs <- predictPlus(classify = "Variety", asreml.obj=current.asr, error.intervals="halfLeast", wald.tab=current.asrt$wald.tab, sortFactor = "Variety", tables = "predictions") # Plot the Variety predictions, with halfLSD intervals, and the p-values plotPredictions(Var.diffs$predictions, classify = "Variety", y = "predicted.value", error.intervals = "half") plotPvalues(Var.diffs) ## End(Not run)
alldiffs.object
.Given an alldiffs.object
, adds or recalculate its backtransforms
component.
The values of transform.power
, offset
, scale
and transform.function
from the backtransforms
component will be used, unless this component is NULL
when the values supplied in the call will be used.
## S3 method for class 'alldiffs' addBacktransforms(alldiffs.obj, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", ...)
## S3 method for class 'alldiffs' addBacktransforms(alldiffs.obj, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", ...)
alldiffs.obj |
An |
transform.power |
A |
offset |
A |
scale |
A |
transform.function |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
An alldiffs.object
with components
predictions
, vcov
, differences
, p.differences
,
sed
, LSD
and backtransforms
.
The backtransforms
component will have the attributes (i) LSDtype
,
LSDby
and LSDstatistic
added from the predictions
component and
(ii) transform.power
, offset
, scale
, and link
.
Chris Brien
asremlPlus-package
, as.alldiffs
, sort.alldiffs
,
subset.alldiffs
, print.alldiffs
, renewClassify.alldiffs
, redoErrorIntervals.alldiffs
,
plotPredictions.data.frame
, predictPlus.asreml
, predictPresent.asreml
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ##Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) && requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(log.Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=tmp) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Recalculate the back-transforms of the predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { TS.diffs <- addBacktransforms.alldiffs(TS.diffs, transform.power = 0) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ##Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) && requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(log.Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=tmp) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Recalculate the back-transforms of the predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { TS.diffs <- addBacktransforms.alldiffs(TS.diffs, transform.power = 0) }
Adds either a correlation, two-dimensional tensor-product natural cubic
smoothing spline (TPNCSS), or a two-dimensional tensor-product penalized P-spline
model (TPPS) to account for the local spatial variation exhibited by a response variable
measured on a potentially irregular grid of rows and columns of the units. The data may
be arranged in sections, for each of which there is a grid and for which the model is to
be fitted separately. Also, the rows and columns of a grid are not necessarily one
observational unit wide. For TPPS
models for which the order of differencing the
penalty matrix is two, the an optimal rotation of the null-space eigenvectors of the
penalty matrix can be investigated.
No hypothesis testing or comparison of information criteria is made. To use information
criteria to decide whether to change the model use chooseSpatialModelOnIC.asrtests
.
The model fit supplied in the asrtests.obj
should not include terms that will
be included in the local spatial model. All spatial model terms are fitted as fixed or
random. Consequently, the residual model does not have to be iid.
One or more rows is added for each section
to the test.summary
data.frame
. Convergence and the occurrence of fixed correlations in fitting the
model is checked and a note included in the action
if there was not.
All components of the asrtests.object
are updated for the new model.
## S3 method for class 'asrtests' addSpatialModel(asrtests.obj, spatial.model = "TPPS", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", ...)
## S3 method for class 'asrtests' addSpatialModel(asrtests.obj, spatial.model = "TPPS", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", ...)
asrtests.obj |
An |
spatial.model |
A single |
sections |
A single |
row.covar |
A single |
col.covar |
A single |
row.factor |
A single |
col.factor |
A single |
corr.funcs |
A single |
corr.orders |
A |
row.corrFitfirst |
A |
allow.corrsJointFit |
A |
nugget.variance |
A |
dropFixed |
A single An element that is The terms must match those in the |
dropRandom |
A single An element that is The terms must match those in the |
nsegs |
A pair of |
nestorder |
A |
degree |
A |
difforder |
A |
usRandLinCoeffs |
A |
rotateX |
A |
ngridangles |
A |
which.rotacriterion |
A single |
nrotacores |
A |
asreml.option |
A single |
tpps4mbf.obj |
An object made with |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
update |
If |
trace |
If |
maxit |
A |
IClikelihood |
A |
which.IC |
A |
... |
Further arguments passed to |
The model to which the spatial models is to be added is supplied in the asrtests.obj
. It should not include terms that will be included in the local spatial model. All spatial model terms are fitted as fixed or random. Consequently, the residual model does not have to be iid. The improvement in the fit resulting from the addition of a spatial model to the supplied model is evaluated. Note that the data must be in the order that corresponds to the residual
argument with a variable to the right of another variable changes levels in the data frame faster than those of the other variable e.g. Row:Column
implies that all levels for Column
in consecutive rows of the data.frame
with a single Row
level.
For the corr
spatial model, the default model is an autocorrelation model of order one (ar1
) for each dimension. However, any of the single dimension correlation/variance models from asreml
can be specified for each dimension, as can no correlation model for a dimension; the models for the two dimensions can differ. Using a forward selection procedure, a series of models are tried, without removing boundary or singular terms, beginning with the addition of row correlation and followed by the addition of column correlation or, if the row.corrFitfirst
is set to FALSE
, the reverse order. If the fitting of the first-fitted correlation did not result in a model change because the fitting did not converge or correlations were fixed, but the fit of the second correlation was successful, then adding the first correlation will be retried. If one of the metric correlation functions is specified (e.g. exp
), then the row.covar
or col.covar
will be used in the spatial model. However, because the correlations are fitted separately for the two dimensions, the row.factor
and col.factor
are needed for all models and is used for a dimension that does not involve a correlation/variance function for the fit being performed. Also, the correlation models are fitted as random
terms and so the correlation model will include a variance parameter for the grid even when ar1
is used to specify the correlation model, i.e. the model fitted is a variance model and there is no difference between ar1
and ar1v
in fitting the model. The variance parameter for this term represents the spatial variance and the fit necessarily includes a nugget term, this being the residual variance. If any correlation is retained in the model, for a section if sections
is not NULL
, then the need for a nugget term is assessed by fixing the corresponding residual variance to one, unless there are multiple residual variances and these are not related to the sections
. Once the fitting of the correlation model has been completed, the rmboundary
function will be executed with the checkboundaryonly
value supplied in the addSpatialModel.asrtests
call. Finally, checking for bound and singular random terms associated with the correlation model and residual terms will be carried out when there are correlation terms in the model and checkboundaryonly
has been set to FALSE
; as many as possible will be removed from the fitted model, in some cases by fixing variance terms to one.
The tensor-product natural-cubic-smoothing-spline (TPNCSS
) spatial model is as described by Verbyla et al. (2018), the tensor-product penalized-cubic-spline (TPPSC2
) model with second-order differencing of the penalty is similar to that described by Rodriguez-Alvarez et al. (2018), and the tensor-product, first-difference-penalty, linear spline (TPPSL1
) model is amongst those described by Piepho, Boer and Williams (2022). The fixed terms for the spline models are row.covar + col.covar + row.covar:col.covar
and the random terms are spl(row.covar) + spl(col.covar) + dev(row.covar) + dev(col.covar) + spl(row.covar):col.covar + row.covar:spl(col.covar) + spl(row.covar):spl(col.covar)
, except that spl(row.covar) + spl(col.covar)
is replaced with spl(row.covar):int(col.covar) + int(row.covar):spl(col.covar)
in the TPPSC2
model, where int(.)
indicates an intercept or constant value specific to its argument. For TPPSL1
models, the terms spl(row.covar):col.covar + row.covar:spl(col.covar)
are omitted, The supplied model should not include any of these terms. However, any fixed or random main-effect Row or Column term that has been included as an initial model for comparison with a spatial model can be removed prior to fitting the spatial model using dropFixed
or dropRandom
. For the P-spline models with second-order differencing, the model matrices used to fit the pairs of random terms (i) spl(row.covar):int(col.covar)
and spl(row.covar):col.covar
and (ii) int(row.covar):spl(col.covar)
and row.covar:spl(col.covar)
are transformed using the spectral decomposition of their penalty matrices. An unstructured variance model is tried for each of these pairs. For TPPSC2
, it is also possible to optimize the rotation of the null-space eigenvectors of the penalty matrix for each of these random-term pairs (for more information see Piepho, Boer and Williams, 2022). The optimization is achieved either using an optimizer or takes the form of a search over a grid of rotation angles for a reduced model; the fit of the full model with rotation using the optimal rotation angles will be returned.
The TPPCS
and TPP1LS
models are fitted using functions from the R
package TPSbits
authored by Sue Welham (2022). There are two methods for supplying the spline basis information produced by tpsmmb
to asreml
. The grp
method adds it to the data.frame
supplied in the data
argument of the asreml
call. The mbf
method creates smaller data.frames
with the spline basis information in the same environment as the internal function that calls the spline-fitting function. If it is desired to use in a later session, an asreml
function, or asrtests
function that calls asreml
, (e.g. predict.asreml
, predictPlus.asreml
, or changeTerms.asrtests
) on an asreml.object
created using mbf
terms, then the mbf
data.frames
will need to be recreated using makeTPPSplineMats.data.frame
in the new session, supplying, if there has been rotation of the penalty matrix eigenvectors, the theta
values that are returned as the attribute theta.opt
of the asreml.obj
.
All models utlize the function changeTerms.asrtests
to fit the spatial model. Arguments from tpsmmb
and changeTerms.asrtests
can be supplied in calls to addSpatialModel.asrtests
and will be passed on to the relevant function through the ellipses argument (...).
The data for experiment can be divided sections
and the same spatial model fitted separately to each. The fit over all of the sections is assessed. For more detail see sections
above.
Each combination of a row.coords and a col.coords does not have to specify a single observation; for example, to fit a local spatial model to the main units of a split-unit design, each combination would correspond to a main unit and all subunits of the main unit would have the same combination.
An asrtests.object
containing the components (i) asreml.obj
,
possibly with attribute theta.opt
,
(ii) wald.tab
, and (iii) test.summary
for the model that includes the
spatial model, unless the spatial model fails to be fitted when allow.unconverged
and/or allow.fixedcorrelation
is set to FALSE
. If the
asrtests.object
is the result of fitting a TPPCS
model with
an exploration of the rotation of the eigenvectors of the penalty matrix for the linear
components, then the asreml.obj
will have an attribute theta.opt
that contains
the optimal rotation angles of the eigenvectors.
Chris Brien
Piepho, H.-P., Boer, M. P., & Williams, E. R. (2022). Two-dimensional P-spline smoothing for spatial analysis of plant breeding trials. Biometrical Journal, 64, 835-857.
Rodriguez-Alvarez, M. X., Boer, M. P., van Eeuwijk, F. A., & Eilers, P. H. C. (2018). Correcting for spatial heterogeneity in plant breeding experiments with P-splines. Spatial Statistics, 23, 52-71.
Verbyla, A. P., De Faveri, J., Wilkie, J. D., & Lewis, T. (2018). Tensor Cubic Smoothing Splines in Designed Experiments Requiring Residual Modelling. Journal of Agricultural, Biological and Environmental Statistics, 23(4), 478-508.
Welham, S. J. (2022) TPSbits
: Creates Structures to Enable Fitting and Examination of 2D Tensor-Product Splines using ASReml-R. Version 1.0.0 https://mmade.org/tpsbits/
as.asrtests
,
makeTPPSplineMats.data.frame
,
addSpatialModelOnIC.asrtests
, chooseSpatialModelOnIC.asrtests
,
changeModelOnIC.asrtests
,
changeTerms.asrtests
, rmboundary.asrtests
,
testranfix.asrtests
,
testresidual.asrtests
,
newfit.asreml
, reparamSigDevn.asrtests
,
changeTerms.asrtests
,
infoCriteria.asreml
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) #Create an asrtests object with a P-spline spatial variation model spatial.asrt <- addSpatialModel(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") infoCriteria(current.asrt$asreml.obj) #Create an asrtests object with a P-spline spatial variation model #that includes rotation of the eigenvectors of the penalty matrix spatial.asrt <- addSpatialModel(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", rotateX = TRUE, which.rotacriterion = "dev", nrotacores = parallel::detectCores(), asreml.option = "mbf") infoCriteria(current.asrt$asreml.obj) ## End(Not run)
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) #Create an asrtests object with a P-spline spatial variation model spatial.asrt <- addSpatialModel(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") infoCriteria(current.asrt$asreml.obj) #Create an asrtests object with a P-spline spatial variation model #that includes rotation of the eigenvectors of the penalty matrix spatial.asrt <- addSpatialModel(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", rotateX = TRUE, which.rotacriterion = "dev", nrotacores = parallel::detectCores(), asreml.option = "mbf") infoCriteria(current.asrt$asreml.obj) ## End(Not run)
Adds either a correlation, two-dimensional tensor-product natural cubic
smoothing spline (TPNCSS), or a two-dimensional tensor-product penalized P-spline
model (TPPS) to account for the local spatial variation exhibited by a response variable
measured on a potentially irregular grid of rows and columns of the units. The data may
be arranged in sections for each of which there is a grid and for which the model is to
be fitted separately. Also, the rows and columns of a grid are not necessarily one
observational unit wide. The spatial model is only added if the information criterion of
the supplied model is decreased with the addition of the local spatial model. For
TPPS
models for which the order of differencing the penalty matrix is two, the
improvement in the fit from rotating the eigenvectors of the penalty matrix can be
investigated; if there is no improvement, the unrotated fit will be returned.
A row is added for each section
to the test.summary
data.frame
of the asrtests.object
stating whether or not the new model has been
swapped for a model in which the spatial model has been add to the supplied model.
Convergence and the occurrence of fixed correlations in fitting the
model is checked and a note included in the action
if there was not.
All components of the asrtests.object
are updated to exhibit the
differences between the supplied and the new model, if a spatial model is added.
## S3 method for class 'asrtests' addSpatialModelOnIC(asrtests.obj, spatial.model = "TPPS", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", ...)
## S3 method for class 'asrtests' addSpatialModelOnIC(asrtests.obj, spatial.model = "TPPS", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", ...)
asrtests.obj |
An |
spatial.model |
A single |
sections |
A single |
row.covar |
A single |
col.covar |
A single |
row.factor |
A single |
col.factor |
A single |
corr.funcs |
A single |
corr.orders |
A |
row.corrFitfirst |
A |
allow.corrsJointFit |
A |
nugget.variance |
A |
dropFixed |
A single An element that is The terms must match those in the |
dropRandom |
A single An element that is The terms must match those in the |
nsegs |
A pair of |
nestorder |
A |
degree |
A |
difforder |
A |
usRandLinCoeffs |
A |
rotateX |
A |
ngridangles |
A |
which.rotacriterion |
A single |
nrotacores |
A |
asreml.option |
A single |
tpps4mbf.obj |
An object made with |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
update |
If |
trace |
If |
which.IC |
A |
maxit |
A |
IClikelihood |
A |
... |
Further arguments passed to |
A fitted spatial model is only returned if it improves the fit over and above that of achieved with the model fit supplied in the asrtests.obj
. To fit the spatial model without any hypotheses testing or comparison of information criteria use addSpatialModel.asrtests
. The model fit supplied in the asrtests.obj
should not include terms that will be included in the local spatial model. All spatial model terms are fitted as fixed or random. Consequently, the residual model does not have to be iid. Note that the data must be in the order that corresponds to the residual
argument with a variable to the right of another variable changes levels in the data frame faster than those of the other variable e.g. Row:Column
implies that all levels for Column
in consecutive rows of the data.frame
with a single Row
level.
For the corr
spatial model, the default model is an autocorrelation model of order one (ar1
) for each dimension. However, any of the single dimension correlation/variance models from asreml
can be specified for each dimension, as can no correlation model for a dimension; the models for the two dimensions can differ. Using a forward selection procedure, a series of models are tried, without removing boundary or singular terms, beginning with the addition of row correlation and followed by the addition of column correlation or, if the row.corrFitfirst
is set to FALSE
, the reverse order. If the fitting of the first-fitted correlation did not result in a model change because the fitting did not converge or correlations were fixed, but the fit of the second correlation was successful, then adding the first correlation will be retried. If one of the metric correlation functions is specified (e.g. exp
), then the row.covar
or col.covar
will be used in the spatial model. However, because the correlations are fitted separately for the two dimensions, the row.factor
and col.factor
are needed for all models and is used for a dimension that does not involve a correlation/variance function for the fit being performed. Also, the correlation models are fitted as random
terms and so the correlation model will include a variance parameter for the grid even when ar1
is used to specify the correlation model, i.e. the model fitted is a variance model and there is no difference between ar1
and ar1v
in fitting the model. The variance parameter for this term represents the spatial variance and the fit necessarily includes a nugget term, this being the residual variance. If any correlation is retained in the model, for a section if sections
is not NULL
, then the need for a nuggest term is assessed by fixing the corresponding residual variance to one, unless there are multiple residual variances and these are not related to the sections
. Once the fitting of the correlation model has been completed, the rmboundary
function will be executed with the checkboundaryonly
value supplied in the addSpatialModelOnIC.asrtests
call. Finally, checking for bound and singular random terms associated with the correlation model and residual terms will be carried out when there are correlation terms in the model and checkboundaryonly
has been set to FALSE
; as many as possible will be removed from the fitted model, in some cases by fixing variance terms to one.
The tensor-product natural-cubic-smoothing-spline (TPNCSS
) spatial model is as described by Verbyla et al. (2018), the tensor-product penalized-cubic-spline (TPPSC2
) model with second-order differencing of the penalty is similar to that described by Rodriguez-Alvarez et al. (2018), and the tensor-product, first-difference-penalty, linear spline (TPPSL1
) model is amongst those described by Piepho, Boer and Williams (2022). The fixed terms for the spline models are row.covar + col.covar + row.covar:col.covar
and the random terms are spl(row.covar) + spl(col.covar) + dev(row.covar) + dev(col.covar) + spl(row.covar):col.covar + row.covar:spl(col.covar) + spl(row.covar):spl(col.covar)
, except that spl(row.covar) + spl(col.covar)
is replaced with spl(row.covar):int(col.covar) + int(row.covar):spl(col.covar)
in the TPPSC2
model, where int(.)
indicates an intercept or constant value specific to its argument. For TPPSL1
models, the terms spl(row.covar):col.covar + row.covar:spl(col.covar)
are omitted, The supplied model should not include any of these terms. However, any fixed or random main-effect Row or Column term that has been included as an initial model for comparison with a spatial model can be removed prior to fitting the spatial model using dropFixed
or dropRandom
. For the P-spline models with second-order differencing, the model matrices used to fit the pairs of random terms (i) spl(row.covar):int(col.covar)
and spl(row.covar):col.covar
and (ii) int(row.covar):spl(col.covar)
and row.covar:spl(col.covar)
are transformed using the spectral decomposition of their penalty matrices. An unstructured variance model is tried for each of these pairs and retained if it improves the fit. For TPPSC2
, it is also possible to optimize the rotation of the null-space eigenvectors of the penalty matrix for each of these random-term pairs (for more information see Piepho, Boer and Williams, 2022). The optimization is achieved either using an optimizer or takes the form of a search over a grid of rotation angles for a reduced model; the fit of the full model with rotation using the optimal rotation angles will only be returned if it improves on the fit of the full, unrotated model.
The TPPCS
and TPP1LS
models are fitted using functions from the R
package TPSbits
authored by Sue Welham (2022). There are two methods for supplying the spline basis information produced by tpsmmb
to asreml
. The grp
method adds it to the data.frame
supplied in the data
argument of the asreml
call. The mbf
method creates smaller data.frames
with the spline basis information in the same environment as the internal function that calls the spline-fitting function. If it is desired to use in a later session, an asreml
function, or asrtests
function that calls asreml
, (e.g. predict.asreml
, predictPlus.asreml
, or changeTerms.asrtests
) on an asreml.object
created using mbf
terms, then the mbf
data.frames
will need to be recreated using makeTPPSplineMats.data.frame
in the new session, supplying, if there has been rotation of the penalty matrix eigenvectors, the theta
values that are returned as the attribute theta.opt
of the asreml.obj
.
All models utlize the function changeModelOnIC.asrtests
to assess the model fit, the information criteria used in assessing the fit being calculated using infoCriteria
. Any bound
terms are removed from the model. Arguments from tpsmmb
and changeModelOnIC.asrtests
can be supplied in calls to addSpatialModelOnIC.asrtests
and will be passed on to the relevant function through the ellipses argument (...).
The data for experiment can be divided sections
and the same spatial model fitted separately to each. The fit over all of the sections is assessed. For more detail see sections
above.
Each combination of a row.coords and a col.coords does not have to specify a single observation; for example, to fit a local spatial model to the main units of a split-unit design, each combination would correspond to a main unit and all subunits of the main unit would have the same combination.
An asrtests.object
containing the components (i) asreml.obj
,
possibly with attribute theta.opt
,
(ii) wald.tab
, and (iii) test.summary
for the model whose fit has
the smallest information criterion between the supplied and spatial model. The values
of the degrees of freedom and the information criteria in the test.summary
are
differences between those of the changed model and those of the model supplied to
addSpatialModelOnIC
. If the
asrtests.object
is the result of fitting a TPPCS
model with
an exploration of the rotation of the eigenvectors of the penalty matrix for the linear
components, then the asreml.obj
will have an attribute theta.opt
that contains
the optimal rotation angles of the eigenvectors.
Chris Brien
Piepho, H.-P., Boer, M. P., & Williams, E. R. (2022). Two-dimensional P-spline smoothing for spatial analysis of plant breeding trials. Biometrical Journal, 64, 835-857.
Rodriguez-Alvarez, M. X., Boer, M. P., van Eeuwijk, F. A., & Eilers, P. H. C. (2018). Correcting for spatial heterogeneity in plant breeding experiments with P-splines. Spatial Statistics, 23, 52-71.
Verbyla, A. P., De Faveri, J., Wilkie, J. D., & Lewis, T. (2018). Tensor Cubic Smoothing Splines in Designed Experiments Requiring Residual Modelling. Journal of Agricultural, Biological and Environmental Statistics, 23(4), 478-508.
Welham, S. J. (2022) TPSbits
: Creates Structures to Enable Fitting and Examination of 2D Tensor-Product Splines using ASReml-R. Version 1.0.0 https://mmade.org/tpsbits/
as.asrtests
,
makeTPPSplineMats.data.frame
,
addSpatialModel.asrtests
, chooseSpatialModelOnIC.asrtests
,
changeModelOnIC.asrtests
,
changeTerms.asrtests
, rmboundary.asrtests
,
testranfix.asrtests
,
testresidual.asrtests
,
newfit.asreml
, reparamSigDevn.asrtests
,
changeTerms.asrtests
,
infoCriteria.asreml
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) current.asrt <- addSpatialModelOnIC(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") infoCriteria(current.asrt$asreml.obj) ## End(Not run)
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) current.asrt <- addSpatialModelOnIC(current.asrt, spatial.model = "TPPS", row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") infoCriteria(current.asrt$asreml.obj) ## End(Not run)
test.summary
data.frame
.A row that summarizes the result of a proposed change to a model is added to a
test.summary
data.frame
. Only the values of those arguments for which there
are columns in test.summary
will be included in the row.
addto.test.summary(test.summary, terms, DF = 1, denDF = NA, p = NA, AIC = NA, BIC = NA, action = "Boundary")
addto.test.summary(test.summary, terms, DF = 1, denDF = NA, p = NA, AIC = NA, BIC = NA, action = "Boundary")
test.summary |
A |
terms |
A |
DF |
A |
denDF |
A |
p |
A |
AIC |
A |
BIC |
A |
action |
A |
A data.frame
.
Chris Brien
asremlPlus-package
, asrtests.object
, print.test.summary
## Not run: data(Wheat.dat) ## Fit an autocorrelation model ar1.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) ar1.asrt <- as.asrtests(ar1.asr, NULL, NULL, label = "Autocorrelation model") ar1.asrt <- rmboundary.asrtests(ar1.asrt) ## Fit a tensor spline Wheat.dat <- within(Wheat.dat, { cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) }) ts.asr <- asreml(yield ~ Rep + cRow + cColumn + WithinColPairs + Variety, random = ~ spl(cRow) + spl(cColumn) + dev(cRow) + dev(cColumn) + spl(cRow):cColumn + cRow:spl(cColumn) + spl(cRow):spl(cColumn), residual = ~ Row:Column, data=Wheat.dat) ts.asrt <- as.asrtests(ts.asr, NULL, NULL, label = "Tensor spline model") ts.asrt <- rmboundary.asrtests(ts.asrt) ar1.ic <- infoCriteria(ar1.asrt$asreml.obj) ts.ic <- infoCriteria(ts.asrt$asreml.obj) if (ar1.ic$AIC < ts.ic$AIC) { ic.diff <- ar1.ic - ts.ic new.asrt <- ar1.asrt new.asrt$test.summary <- addto.test.summary(ar1.asrt$test.summary, terms = "Compare ar1 to ts", DF = ic.diff$varDF, AIC = ic.diff$AIC, BIC = ic.diff$BIC, action = "Chose ar1") } else { ic.diff <- ts.ic - ar1.ic new.asrt <- ts.asrt new.asrt$test.summary <- addto.test.summary(ts.asrt$test.summary, terms = "Compare ar1 to ts", DF = ic.diff$varDF, AIC = ic.diff$AIC, BIC = ic.diff$BIC, action = "Chose ts") } ## End(Not run)
## Not run: data(Wheat.dat) ## Fit an autocorrelation model ar1.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) ar1.asrt <- as.asrtests(ar1.asr, NULL, NULL, label = "Autocorrelation model") ar1.asrt <- rmboundary.asrtests(ar1.asrt) ## Fit a tensor spline Wheat.dat <- within(Wheat.dat, { cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) }) ts.asr <- asreml(yield ~ Rep + cRow + cColumn + WithinColPairs + Variety, random = ~ spl(cRow) + spl(cColumn) + dev(cRow) + dev(cColumn) + spl(cRow):cColumn + cRow:spl(cColumn) + spl(cRow):spl(cColumn), residual = ~ Row:Column, data=Wheat.dat) ts.asrt <- as.asrtests(ts.asr, NULL, NULL, label = "Tensor spline model") ts.asrt <- rmboundary.asrtests(ts.asrt) ar1.ic <- infoCriteria(ar1.asrt$asreml.obj) ts.ic <- infoCriteria(ts.asrt$asreml.obj) if (ar1.ic$AIC < ts.ic$AIC) { ic.diff <- ar1.ic - ts.ic new.asrt <- ar1.asrt new.asrt$test.summary <- addto.test.summary(ar1.asrt$test.summary, terms = "Compare ar1 to ts", DF = ic.diff$varDF, AIC = ic.diff$AIC, BIC = ic.diff$BIC, action = "Chose ar1") } else { ic.diff <- ts.ic - ar1.ic new.asrt <- ts.asrt new.asrt$test.summary <- addto.test.summary(ts.asrt$test.summary, terms = "Compare ar1 to ts", DF = ic.diff$varDF, AIC = ic.diff$AIC, BIC = ic.diff$BIC, action = "Chose ts") } ## End(Not run)
Uses supplied predictions and standard errors of pairwise differences,
or the variance matrix of predictions to form, in an
alldiffs.object
, for those components not already present,
(i) a table of all pairwise differences of the predictions,
(ii) the p-value of each pairwise difference, and
(iii) the minimum, mean, maximum and accuracy of LSD values.
Predictions that are aliased (or inestimable) are removed from the
predictions
component of the alldiffs.object
and
standard errors of differences involving them are removed from the sed
component.
If necessary, the order of the columns of the variables in the predictions
component are changed to be the initial columns of the predictions.frame
and to match their order in the classify
. Also, the rows of predictions
component are ordered so that they are in standard order for the variables in the
classify
. That is, the values of the last variable change with every row,
those of the second-last variable only change after all the values of the last
variable have been traversed; in general, the values of a variable are the same for
all the combinations of the values to the variables to its right in the
classify
. The sortFactor
or sortOrder
arguments can be used
to order of the values for the classify
variables, which is achieved using
sort.alldiffs
.
Each p-value is computed as the probability of a t-statistic as large as or larger
than the absolute value of the observed difference divided by its standard error. The
p-values are stored in the p.differences
component. The degrees of freedom of
the t-distribution is the degrees of freedom stored in the tdf
attribute of
the alldiffs.object
. This t-distribution is also used in calculating
the LSD statistics stored in the LSD
component of the alldiffs.object
.
## S3 method for class 'data.frame' allDifferences(predictions, classify, vcov = NULL, differences = NULL, p.differences = NULL, sed = NULL, LSD = NULL, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, backtransforms = NULL, response = NULL, response.title = NULL, term = NULL, tdf = NULL, x.num = NULL, x.fac = NULL, level.length = NA, pairwise = TRUE, alpha = 0.05, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", inestimable.rm = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
## S3 method for class 'data.frame' allDifferences(predictions, classify, vcov = NULL, differences = NULL, p.differences = NULL, sed = NULL, LSD = NULL, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, backtransforms = NULL, response = NULL, response.title = NULL, term = NULL, tdf = NULL, x.num = NULL, x.fac = NULL, level.length = NA, pairwise = TRUE, alpha = 0.05, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", inestimable.rm = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
predictions |
A |
classify |
A |
vcov |
A |
differences |
A |
p.differences |
A |
sed |
A |
LSD |
An |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
retain.zeroLSDs |
A |
zero.tolerance |
A |
backtransforms |
A |
response |
A |
response.title |
A |
term |
A |
tdf |
an |
x.num |
A |
x.fac |
A |
level.length |
The maximum number of characters from the levels of factors to use in the row and column labels of the tables of pairwise differences and their p-values and standard errors. |
pairwise |
A logical indicating whether all pairwise differences of the
|
alpha |
A |
transform.power |
A |
offset |
A |
scale |
A |
transform.function |
A |
inestimable.rm |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
... |
provision for passsing arguments to functions called internally - not used at present. |
An alldiffs.object
with components
predictions
, vcov
, differences
, p.differences
sed
, and LSD
.
The name of the response
, the response.title
,
the term
, the classify
, tdf
, alpha
, sortFactor
and the sortOrder
will be set as attributes to the object.
Note that the classify
in an alldiffs.object
is based on the
variables indexing the predictions, which may differ from the
classify
used to obtain the original predictions (for example,
when the alldiffs.object
s stores a linear transformation of predictions.
Also, see predictPlus.asreml
for more information.
Chris Brien
asremlPlus-package
, as.alldiffs
, as.predictions.frame
,
sort.alldiffs
, subset.alldiffs
, print.alldiffs
, renewClassify.alldiffs
,
redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, pickLSDstatistics.alldiffs
,
plotPredictions.data.frame
, predictPlus.asreml
, predictPresent.asreml
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Order the Varieties in decreasing order for the predictions values in the ## first N level Var.diffs <- allDifferences(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df, sortFactor = "Variety", decreasing = TRUE) print.alldiffs(Var.diffs, which="differences") ## Change the order of the factors in the alldiffs object and reorder components Var.reord.diffs <- allDifferences(predictions = Var.preds, classify = "Variety:Nitrogen", sed = Var.sed, vcov = Var.vcov, tdf = den.df) print.alldiffs(Var.reord.diffs, which="predictions") }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Order the Varieties in decreasing order for the predictions values in the ## first N level Var.diffs <- allDifferences(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df, sortFactor = "Variety", decreasing = TRUE) print.alldiffs(Var.diffs, which="differences") ## Change the order of the factors in the alldiffs object and reorder components Var.reord.diffs <- allDifferences(predictions = Var.preds, classify = "Variety:Nitrogen", sed = Var.sed, vcov = Var.vcov, tdf = den.df) print.alldiffs(Var.reord.diffs, which="predictions") }
An object of S3-class alldiffs
that stores the predictions for a model,
along with supplied statistics for all pairwise differences. While
alldiffs.object
can be constructed by defining a list
with
the appropriate components, it can be formed by passing the components to
as.alldiffs
, or from a predictions
data.frame
using
allDifferences.data.frame
.
as.alldiffs
is function that assembles an object of this class from
supplied components.
is.alldiffs
is the membership function for this class; it tests
that an object is of class alldiffs
.
validAlldiffs(object)
can be used to test the validity of an object
with this class.
allDifferences.data.frame
is the function that constructs an
object of this class by calculating components from statistics supplied via
its arguments and then using as.alldiffs
to make the object.
A list
of class alldiffs
containing the following components:
predictions
, vcov
, differences
,
p.differences
, sed
, LSD
and backtransforms
.
Except for predictions
, the components are optional and can be set
to NULL
.
An alldiffs.object
also has attributes response
,
response.title
, term
, classify
, tdf
, alpha
,
sortFactor
and sortOrder
, which may be set to NULL
.
The details of the components are as follows:
predictions
: A predictions.frame
, being a data.frame
beginning with the variables classifying the predictions, in the same order
as in the classify
, and also containing columns named
predicted.value
, standard.error
and est.status
;
each row contains a single predicted value. The number of rows should equal the
number of unique combinations of the classify
variables and will be in
standard order for the classify
variables. That is, the values of the
last variable change with every row, those of the second-last variable only
change after all the values of the last variable have been traversed;
in general, the values of a variable are the same for all the
combinations of the values to the variables to its right in the classify
.
The data.frame
may also include columns for the lower and upper
values of error intervals, either standard error, confidence or half-LSD
intervals. The names of these columns will consist of three parts
separated by full stops:
1) the first part will be lower
or upper
;
2) the second part will be one of Confidence
,
StandardError
or halfLeastSignificant
;
3) the third component will be limits
.
Note that the names standard.error
and
est.status
have been changed to std.error
and status
in the pvals
component produced by asreml-R4
; if the new names
are in the data.frame
supplied to predictions
, they will be
returned to the previous names.
differences
: A matrix
containing all pairwise differences between
the predictions; it should have the same number of rows and columns as there are
rows in predictions
.
p.differences
: A matrix
containing p-values for all pairwise differences
between the predictions; each p-value is computed as the probability of a t-statistic
as large as or larger than the observed difference divided by its standard error.
The degrees of freedom of the t distribution for computing it are computed as
the denominator degrees of freedom of the F value for the fixed term, if available;
otherwise, the degrees of freedom stored in the attribute tdf
are used;
the matrix should be of the same size as that for differences
.
sed
: A matrix
containing the standard errors of all pairwise differences
between the predictions; they are used in computing the p-values in p.differences
.
vcov
: A matrix
containing the variance matrix of the predictions; it is
used in computing the variance of linear transformations of the predictions.
LSD
: An LSD.frame
containing (i) c
, the number of pairwise
predictions comparisons for each LSD value and the mean, minimum, maximum and assigned LSD,
(ii) the column accuracyLSD
that gives a measure of the accuracy of the
assigned LSD. given the variation in LSD values, and (iii) the columns false.pos
and
false.neg
that contain the number of false positives and negatives if the
assignedLSD
value(s) is(are) used to determine the significance of the
pairwise predictions differences. The LSD values in the assignedLSD
column is used to determine the significance of pairwise differences that involve
predictions for the combination of levels given by a row name. The value in the
assignedLSD
column is specified using the LSDstatistic
argument.
backtransforms
: When the response values have been transformed for analysis,
a data.frame
containing the backtransformed values of the
predicted values is added to the alldiffs.object
. This data.frame
is consistent with the predictions
component, except
that the column named predicted.value
is replaced by one called
backtransformed.predictions
. Any error.interval
values will also
be the backtransformed values. Each row contains a single predicted value.
The details of the attributes
of an alldiffs.object
are:
response
: A character
specifying the response variable for the
predictions.
response.title
: A character
specifying the title for the response variable
for the predictions.
term
: A character
giving the variables that define the term
that was fitted using asreml
and that corresponds
to classify
. It is often the same as classify
.
classify
: A character
giving the variables that define the margins
of the multiway table used in the prediction. Multiway tables are
specified by forming an interaction type term from the
classifying variables, that is, separating the variable names
with the :
operator.
tdf
: An integer
specifying the degrees of freedom of the standard error. It is used as
the degrees of freedom for the t-distribution on which p-values and confidence
intervals are based.
alpha
: An integer
specifying the significance level. It is used as
the significance level calculating LSDs.
LSDtype
: If the LSD
component is not NULL
then LSDtype
is
added as an attribute. A character
nominating the type of grouping of seds to be used
in combining LSDs.
LSDby
: If the LSD
component is not NULL
then LSDby
is added
as an attribute. A character
vector
containing the names of the factors and numerics
within whose combinations the LSDs are to be summarized.
LSDstatistic
: If the LSD
component is not NULL
then LSDstatistic
is
added as an attribute. A character
nominating what statistic to use in summarizing a
set of LSDs.
LSDaccuracy
: If the LSD
component is not NULL
then LSDaccuracy
is
added as an attribute. A character
nominating the method of calculating a measure of
the accuracy of the LSDs stored in the assignedLSD
column of the LSD.frame
.
sortFactor
: factor
that indexes the set of predicted values that
determined the sorting of the components.
sortOrder
: A character
vector that is the same length as the number of levels for
sortFactor
in the predictions
component of the
alldiffs.object
. It specifies the order of the
levels in the reordered components of the alldiffs.object
.
The following creates a sortOrder
vector levs
for factor
f
based on the values in x
: levs <- levels(f)[order(x)]
.
See predictPlus.asreml
for more information.
Chris Brien
is.alldiffs
, as.alldiffs
, validAlldiffs
, allDifferences.data.frame
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(Var.diffs) validAlldiffs(Var.diffs) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(Var.diffs) validAlldiffs(Var.diffs) }
Applies the angular transformation to numeric values.
It is given by
angular(proportions, n)
angular(proportions, n)
proportions |
The proportions. |
n |
The divisor(s) for each proportion |
A numeric.
Chris Brien
n <-25 y <- rbinom(10, n, 0.5) y <- c(y,0,n) p <- y/n p.ang <- angular(p, n)
n <-25 y <- rbinom(10, n, 0.5) y <- c(y,0,n) p <- y/n p.ang <- angular(p, n)
Applies the angular transformation to a vector of counts. A
modified transformation is used that is appropriate when N < 50 and the
proportion is not between 0.3 and 0.7. The transformation is given by
.
angular.mod(count, n)
angular.mod(count, n)
count |
The numeric vector of counts. |
n |
The number(s) of observations from which the count(s) were obtained. |
A numeric vector.
Chris Brien
n <-25 y <- rbinom(10, n, 0.5) y <- c(y,0,n) p.ang.mod <- angular.mod(y, n)
n <-25 y <- rbinom(10, n, 0.5) y <- c(y,0,n) p.ang.mod <- angular.mod(y, n)
alldiffs.object
from the supplied predictions, along with those statistics,
associated with the predictions and their pairwise differences, that have been supplied.Creates an alldiffs.object
that consists of a list
containing the following components: predictions
, vcov
, differences
,
p.differences
, sed
, LSD
and backtransforms
.
Predictions must be supplied to the function while the others will be set
only if they are supplied; those not supplied are set to NULL
.
It also has attributes response
, response.title
, term
,
classify
, tdf
, tdf
, alpha
, sortFactor
and sortOrder
.
which will be set to the values supplied or NULL
if none are supplied.
as.alldiffs(predictions, vcov = NULL, differences = NULL, p.differences = NULL, sed = NULL, LSD = NULL, backtransforms = NULL, response = NULL, response.title = NULL, term = NULL, classify = NULL, tdf = NULL, alpha = 0.05, sortFactor = NULL, sortOrder = NULL)
as.alldiffs(predictions, vcov = NULL, differences = NULL, p.differences = NULL, sed = NULL, LSD = NULL, backtransforms = NULL, response = NULL, response.title = NULL, term = NULL, classify = NULL, tdf = NULL, alpha = 0.05, sortFactor = NULL, sortOrder = NULL)
predictions |
A |
differences |
A |
p.differences |
A |
sed |
A |
vcov |
A |
LSD |
An |
backtransforms |
A |
response |
A |
response.title |
A |
term |
A |
classify |
A character string giving the variables that define the margins
of the multiway table used in the prediction. Multiway tables are
specified by forming an interaction type term from the
classifying variables, that is, separating the variable names
with the |
tdf |
an |
alpha |
A |
sortFactor |
A |
sortOrder |
A The following creates a |
An S3-class alldiffs.object
. Also, see predictPlus.asreml
for
more information.
Chris Brien
asremlPlus-package
, alldiffs.object
, is.alldiffs
, as.alldiffs
,
print.alldiffs
, sort.alldiffs
, subset.alldiffs
, allDifferences.data.frame
, renewClassify.alldiffs
, redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, predictPlus.asreml
, plotPredictions.data.frame
, predictPresent.asreml
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(Var.diffs) validAlldiffs(Var.diffs) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- Var.pred$pvals Var.sed <- Var.pred$sed Var.vcov <- NULL ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("Var.preds")) { ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(Var.diffs) validAlldiffs(Var.diffs) }
An asrtests.object
that is a list
consisting of
the components asreml.obj
, wald.tab
and test.summary
.
A call to as.asrtests
with test.summary = NULL
re-initializes the
test.summary
data.frame
.
If there is no wald.tab
, wald.asreml
is called. In all cases,
recalcWaldTab
is called and any changes made as specified by the
recalcWaldTab
arguments supplied via ...
.
The label
argument can be used to include an entry in test.summary
for the starting model. If a label
is included, (i) the information criteria
calculated using the asreml.obj
will be added to the test.summary
, if
IClikelihood
is not set to none
and (ii) the number of variance
parameters is included in the denDF column, if IClikelihood
is set to none
.
as.asrtests(asreml.obj, wald.tab = NULL, test.summary = NULL, denDF = "numeric", label = NULL, IClikelihood = "none", bound.exclusions = c("F","B","S","C"), ...)
as.asrtests(asreml.obj, wald.tab = NULL, test.summary = NULL, denDF = "numeric", label = NULL, IClikelihood = "none", bound.exclusions = c("F","B","S","C"), ...)
asreml.obj |
an |
wald.tab |
A |
test.summary |
A |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
label |
A |
IClikelihood |
A |
bound.exclusions |
A |
... |
further arguments passed to |
An object of S3-class asrtests
.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
asremlPlus-package
, is.alldiffs
, as.alldiffs
,
recalcWaldTab
, testranfix.asrtests
, chooseModel.asrtests
,
rmboundary.asrtests
, reparamSigDevn.asrtests
## Not run: data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # Check for and remove any boundary terms current.asrt <- rmboundary(current.asrt) ## End(Not run)
## Not run: data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # Check for and remove any boundary terms current.asrt <- rmboundary(current.asrt) ## End(Not run)
predictions.frame
from a data.frame
, ensuring that the correct
columns are present.Creates a predictions.frame
from a data.frame
by adding the
class
predictions.frame
to it, and renaming the columns containing
the predictions
, se
, est.status
and error.intervals
.
as.predictions.frame(data, classify = NULL, predictions = NULL, se = NULL, est.status = NULL, interval.type = NULL, interval.names = NULL)
as.predictions.frame(data, classify = NULL, predictions = NULL, se = NULL, est.status = NULL, interval.type = NULL, interval.names = NULL)
data |
A |
classify |
A |
predictions |
A |
se |
A |
est.status |
A |
interval.type |
A |
interval.names |
A |
An S3-class predictions.frame
.
Chris Brien
asremlPlus-package
, predictions.frame
,
is.predictions.frame
, predictions.frame
, validPredictionsFrame
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions #Form predictions.frame changing asreml-R4 names to the standard names, if these are present Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } ## Check the class and validity of the alldiffs object if (exists("Var.preds")) { is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions #Form predictions.frame changing asreml-R4 names to the standard names, if these are present Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } ## Check the class and validity of the alldiffs object if (exists("Var.preds")) { is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
These functions have been renamed and deprecated in asremlPlus
:
addrm.terms.asreml and addrm.terms.asrtests -> changeTerms.asrtests
,
alldiffs -> as.alldiffs
,
asrtests-> as.asrtests
,
choose.model.asreml and choose.model.asrtests -> chooseModel.asrtests
,
facRecode and facRecode.alldiffs -> facRecast.alldiffs
,
info.crit and info.crit.asreml -> infoCriteria.asreml
,
newrcov.asrtests -> changeTerms.asrtests
,
plotvariofaces.asreml -> plotVariofaces.data.frame
,
power.transform -> powerTransform
,
predictiondiffs.asreml -> allDifferences.data.frame
,
predictionplot.asreml -> plotPredictions.data.frame
,
predictparallel.asreml -> predictPlus.asreml
,
pred.present.asreml -> predictPresent.asreml
,
recalc.wald.tab.asreml and recalc.wald.tab.asrtests -> recalcWaldTab.asrtests
,
reorderClassify and reorderClassify.alldiffs -> renewClassify.alldiffs
,
reml.lrt and reml.lrt.asreml -> REMLRT.asreml
,
rmboundary.asreml -> rmboundary.asrtests
,
setvarianceterms.asreml -> setvarianceterms.call
,
sig.devn.reparam.asreml and sig.devn.reparam.asrtests -> reparamSigDevn.asrtests
,
testranfix.asreml -> testranfix.asrtests
,
testrcov.asreml and testrcov.asrtests -> testresidual.asrtests
,
testswapran.asreml -> testswapran.asrtests
addrm.terms.asreml(...) addrm.terms.asrtests(...) alldiffs(...) asrtests(...) choose.model.asreml(...) choose.model.asrtests(...) facRecode(...) facRecode.alldiffs(...) info.crit(...) info.crit.asreml(...) newrcov.asrtests(...) plotvariofaces.asreml(...) power.transform(...) predictiondiffs.asreml(...) predictionplot.asreml(...) predictparallel.asreml(...) pred.present.asreml(...) recalc.wald.tab.asreml(...) recalc.wald.tab.asrtests(...) reml.lrt(...) reml.lrt.asreml(...) ## S3 method for class 'alldiffs' reorderClassify(...) ## S3 method for class 'asreml' rmboundary(...) setvarianceterms.asreml(...) sig.devn.reparam.asreml(...) sig.devn.reparam.asrtests(...) testranfix.asreml(...) testrcov.asreml(...) testrcov.asrtests(...) ## S3 method for class 'asreml' testswapran(...)
addrm.terms.asreml(...) addrm.terms.asrtests(...) alldiffs(...) asrtests(...) choose.model.asreml(...) choose.model.asrtests(...) facRecode(...) facRecode.alldiffs(...) info.crit(...) info.crit.asreml(...) newrcov.asrtests(...) plotvariofaces.asreml(...) power.transform(...) predictiondiffs.asreml(...) predictionplot.asreml(...) predictparallel.asreml(...) pred.present.asreml(...) recalc.wald.tab.asreml(...) recalc.wald.tab.asrtests(...) reml.lrt(...) reml.lrt.asreml(...) ## S3 method for class 'alldiffs' reorderClassify(...) ## S3 method for class 'asreml' rmboundary(...) setvarianceterms.asreml(...) sig.devn.reparam.asreml(...) sig.devn.reparam.asrtests(...) testranfix.asreml(...) testrcov.asreml(...) testrcov.asrtests(...) ## S3 method for class 'asreml' testswapran(...)
... |
absorbs arguments passed from the old functions of the style foo.bar(). |
Chris Brien
The intermittent, randomly-presented, startup tips.
Need help? The manual is a vignette and is in the vignettes subdirectory of the package's install directory.
Find out what has changed in asremlPlus: enter news(package = 'asremlPlus').
Need help getting started? Enter vignette(package = 'asremlPlus').
To avoid start-up message that ASReml-R is needed, load asreml before asremlPlus.
The methods for alldiffs and data.frame do not require asreml
Use suppressPackageStartupMessages() to eliminate all package startup messages.
To see all the intermittent, randomly-presented, startup tips enter ?asremlPlusTips.
To install the latest version: go to http://chris.brien.name/rpackages.
For versions between CRAN releases (and more) go to http://chris.brien.name/rpackages.
Chris Brien
An object of S3-class asrtests
that contains information derived from the fits of
a mixed model using asreml
.
as.asrtests
is function that makes an object of this class.
is.list
is the membership function for this class; it tests
that an object is of class list
.
validAsrtests
can be used to test the validity of an
asrtests.object
.
A list
that contains three components:
asreml.obj
: an object of class asreml
that contains
the fit of a model;
wald.tab
: A data.frame
containing a pseudo-anova
table for the fixed terms produced by wald.asreml
. It has
rownames
that correspond to the fixed terms that were
fitted and four columns. If denominator degrees of freedom were
calculated then the columns are DF
, denDF
,
F.inc
, Pr
; otherwise the columns are Df
,
Sum of Sq
, Wald statistic
, and Pr(Chisq)
.
test.summary
: A data.frame
with columns terms
,
DF
, denDF
, p
, AIC
, BIC
and
action
, each row of which summarizes the results of
proposed changes to the fitted model.
Possible codes for action
are:
Dropped
, Retained
, Swapped
, Unswapped
,
Unchanged
, Significant
, Nonsignificant
,
Absent
, Added
, Removed
and Boundary
.
If the either of the models did not converge, unconverged
will be added to the code. Unchanged
is used when
allow.unconverged
is FALSE
.
Note that the logical asreml.obj$converge
also
reflects whether there is convergence.
A row is added to the test.summary
for each term that is
dropped, added or tested or a note that several terms have been
added or removed. When values for the AIC and BIC are included
in the row, then the DF are the number of fixed parameters in the
model and denDF are the numbers of variance parameters.
When changeModelOnIC
adds a row then the values of the
degrees of freedom and information criteria are differences
between those for the model that is supplied and the model
changed by changeModelOnIC
.
Chris Brien
as.asrtests
, as.asrtests
, validAsrtests
Extracts the REML log likelihood for two asreml
objects
and forms the observed REML ratio statistic. It assumes that the second
asreml
object is the result of fitting a model that is a reduced
version of the model for the first object and is considered to the null model.
Using the mean
and V
, nboot
bootstrap samples of simulated
response values are generated in parallel; that is, ncores
cores are used
and each is used to generate and analyse a sample. The full and reduced models
are fitted to the data and if either analysis fails to converge another sample
is generated and analysed using the current core, with a maximum of
max.retries
attempts to obtain a sample that converges for both analysis.
Thus the maximum number of data sets that will be generated is
nboot
* max.retries
. If a bootstrap sample converges for both analyses,
the REML ratio test statistic is formed for it. The p-value is then calculated
as where
is the number
of simulated ratio test statistics greater than the observed test statistic and
is the number of bootstrap samples that were returned.
The function checks that the models do not differ in either their fixed
or sparse models. It also check the difference in the number of variance
parameters between the two fits to the models, taking into account the
bound.exclusions
.
## S3 method for class 'asreml' bootREMLRT(h0.asreml.obj, h1.asreml.obj, nboot = 100, max.retries = 5, seed = NULL, means=NULL, V = NULL, extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), tolerance = 1E-10, update = TRUE, trace = FALSE, ncores = 2, ...)
## S3 method for class 'asreml' bootREMLRT(h0.asreml.obj, h1.asreml.obj, nboot = 100, max.retries = 5, seed = NULL, means=NULL, V = NULL, extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), tolerance = 1E-10, update = TRUE, trace = FALSE, ncores = 2, ...)
h0.asreml.obj |
|
h1.asreml.obj |
|
nboot |
The number of bootstrap samples to be generated. |
max.retries |
The maximum number of attempts to generate a sample whose analyses converge for both models. |
seed |
A single value, interpreted as an integer, that specifies the
starting value of the random number generator. The "L'Ecuyer-CMRG" random
generator is used and |
means |
The |
V |
The fitted variance |
extra.matrix |
A |
ignore.terms |
A |
fixed.spline.terms |
A |
bound.exclusions |
A |
tolerance |
The value such that eigenvalues less than it are considered to be zero. |
update |
If |
trace |
If |
ncores |
A |
... |
Other arguments that are passed down to the function asreml. Changes to the models are not allowed. Other changes are dangerous and generally should be avoided. |
A list
with the following components:
REMLRT: the observed REML ratio statistic.
p: the bootstrap p-value for the observed test statistic.
DF: the calculated difference in DF for the variance parameters in the two models.
totalunconverged: the total number of unconverged analyses over the simulations.
REMLRT.sim: a numeric
containing the values of the ratio statistics
for the simulated data. It has an attribute called na.action
that
can be retrieved using attr(REMLRT.sim, which = "na.action")
; it
contains a list of the simulation numbers that were abandoned because
max.retries
failed to converge for both models.
nunconverged: the number of unconverged analyses for each bootstrap sample, the
maximum being max.retries
.
A bootstrap sample is generated using a multivariate normal distribution with expected value as
specified by means
and variance matrix given by V
. Each simulated sample
is analysed according to the reduced model and, provided this analysis converges,
according to the full.model. If one of these analyses fails to converge, it is
abandoned and another sample is generated for this simulation. As many as
max.retries
attempts are made to generate a data set for which both analyses
converge. If data set that converges for both analyses is not generated for a
simulation, NA
is returned for that bootstrap sample. Hence, the maximum number
of data sets that will be generated is nboot
* max.retries
and less than
nboot
samples will be generated if a data set that converges for both analyses
is not obtained within max.retries
attempts.
If a bootstrap sample converges for both analyses, the REML ratio test statistic is calculated
as .
The DF
is calculated from the information in full.asreml.obj
and
reduced.asreml.obj
. The degrees of freedom are computed as the difference
between the two models in the number of variance parameters whose estimates do
not have a code for bound
specified in bound.exclusions
.
If ASReml-R version 4 is being used then the codes specified in
bound.exclusions
are not restricted to a subset of the default codes, but
a warning is issued if a code other than these is specified.
For ASReml-R version 3, only a subset of the default codes are allowed:
F
(Fixed
), B
(Boundary
), C
(Constrained
)
and S
(Singular
).
Chris Brien
REMLRT.asreml
, infoCriteria.asreml
, newfit.asreml
,
testranfix.asrtests
## Not run: bootREMLRT(ICV.max, ICV.red, ncores = parallel::detectCores()) ## End(Not run)
## Not run: bootREMLRT(ICV.max, ICV.red, ncores = parallel::detectCores()) ## End(Not run)
Uses information criteria to decide whether to change the fitted model
stored in the supplied asrtests.object
according to the specified
modifications. The function changeTerms
is
used to change the model. Thus, the model can be modified using a
combination of adding and removing sets of terms from one or both of the fixed
or random models, replacing the residual model and changing the bounds and/or initial
values of some terms. The model will be unchanged
if terms specified in dropFixed
or dropRandom
are not in the fitted
model.
A row is added to the test.summary
data.frame
of the
asrtests.object
using the supplied label
and stating
whether or not the new model has been swapped for the supplied model.
Convergence in fitting the model is checked and a note included in the
action
if there was not. All components of the
asrtests.object
are updated to exhibit the differences
between the supplied and new models.
To obtain a list of the information criteria for a set of models use
changeTerms.asrtests
with IClikelihood
set to
REML
or full
, or use infoCriteria.asreml
.
## S3 method for class 'asrtests' changeModelOnIC(asrtests.obj, dropFixed = NULL, addFixed = NULL, dropRandom = NULL, addRandom = NULL, newResidual = NULL, label = "Changed terms", allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, trace = FALSE, update = TRUE, denDF = "numeric", set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, which.IC = "AIC", IClikelihood = "REML", fixedDF = NULL, varDF = NULL, bound.exclusions = c("F","B","S","C"), ...)
## S3 method for class 'asrtests' changeModelOnIC(asrtests.obj, dropFixed = NULL, addFixed = NULL, dropRandom = NULL, addRandom = NULL, newResidual = NULL, label = "Changed terms", allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, trace = FALSE, update = TRUE, denDF = "numeric", set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, which.IC = "AIC", IClikelihood = "REML", fixedDF = NULL, varDF = NULL, bound.exclusions = c("F","B","S","C"), ...)
asrtests.obj |
An |
dropFixed |
A single |
addFixed |
A single |
dropRandom |
A single |
addRandom |
A single |
newResidual |
A single |
label |
A |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
set.terms |
A |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
which.IC |
A |
IClikelihood |
A |
fixedDF |
A |
varDF |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
bound.exclusions |
A |
... |
Further arguments passed to |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
. The values of the degrees of
freedom and the information criteria are differences between those of the changed
model and those of the model supplied to changeModelOnIC
.
Chris Brien
as.asrtests
, rmboundary.asrtests
,
testranfix.asrtests
, testresidual.asrtests
, newfit.asreml
, reparamSigDevn.asrtests
,
chooseModel.asrtests
, changeTerms.asrtests
,
infoCriteria.asreml
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Maximal model") current.asrt <- rmboundary(current.asrt) # Drop both Row and Column terms current.asrt <- changeModelOnIC(current.asrt, dropRandom = "Row + Column", checkboundaryonly = TRUE, which.IC = "AIC", IClikelihood = "full") current.asrt <- iterate(current.asrt) # Add and drop both fixed and random terms current.asrt <- changeModelOnIC(current.asrt, addFixed = "vRow", dropFixed = "WithinColPairs", addRandom = "spl(vRow)", dropRandom = "units", checkboundaryonly = TRUE, which.IC = "AIC", IClikelihood = "full") # Replace residual with model without Row autocorrelation current.asrt <- changeModelOnIC(current.asrt, newResidual = "Row:ar1(Column)", label="Row autocorrelation", IClikelihood = "full") ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Maximal model") current.asrt <- rmboundary(current.asrt) # Drop both Row and Column terms current.asrt <- changeModelOnIC(current.asrt, dropRandom = "Row + Column", checkboundaryonly = TRUE, which.IC = "AIC", IClikelihood = "full") current.asrt <- iterate(current.asrt) # Add and drop both fixed and random terms current.asrt <- changeModelOnIC(current.asrt, addFixed = "vRow", dropFixed = "WithinColPairs", addRandom = "spl(vRow)", dropRandom = "units", checkboundaryonly = TRUE, which.IC = "AIC", IClikelihood = "full") # Replace residual with model without Row autocorrelation current.asrt <- changeModelOnIC(current.asrt, newResidual = "Row:ar1(Column)", label="Row autocorrelation", IClikelihood = "full") ## End(Not run)
The specified terms are simply added or dropped, without testing, from either the fixed or random model and/or the residual (rcov) model replaced. Also, the bounds and/or initial values of some terms can be changed. No hypothesis testing is performed, but a check is made for boundary or singular terms.
A row is added to the test.summary
data.frame
of the
asrtests.object
using the supplied label
and stating
which models have been changed. Information criteria can be included in the
row of the test.summary
. Convergence in fitting the model is checked
and a note included in the action if there was not. All components of
the asrtests.object
are updated.
To only change the terms based on a comparison of information
criteria use changeModelOnIC.asrtests
.
## S3 method for class 'asrtests' changeTerms(asrtests.obj, dropFixed = NULL, addFixed = NULL, dropRandom = NULL, addRandom = NULL, newResidual = NULL, label = "Changed terms", allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, trace = FALSE, update = TRUE, denDF = "numeric", set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, IClikelihood = "none", bound.exclusions = c("F","B","S","C"), ...)
## S3 method for class 'asrtests' changeTerms(asrtests.obj, dropFixed = NULL, addFixed = NULL, dropRandom = NULL, addRandom = NULL, newResidual = NULL, label = "Changed terms", allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, trace = FALSE, update = TRUE, denDF = "numeric", set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, IClikelihood = "none", bound.exclusions = c("F","B","S","C"), ...)
asrtests.obj |
An |
dropFixed |
A single |
addFixed |
A single |
dropRandom |
A single |
addRandom |
A single |
newResidual |
A single |
label |
A |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
set.terms |
A |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
IClikelihood |
A |
bound.exclusions |
A |
... |
Further arguments passed to |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
as.asrtests
, rmboundary.asrtests
,
testranfix.asrtests
, testresidual.asrtests
, newfit.asreml
, reparamSigDevn.asrtests
,
chooseModel.asrtests
, changeModelOnIC.asrtests
, infoCriteria.asreml
## Not run: terms <- "(Date/(Sources * (Type + Species)))" current.asrt <- changeTerms(current.asrt, addFixed = terms) current.asrt <- changeTerms(current.asrt, dropFixed = "A + B", denDF = "algebraic") data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Add and drop both fixed and random terms current.asrt <- changeTerms(current.asrt, addFixed = "vRow", dropFixed = "WithinColPairs", addRandom = "spl(vRow)", dropRandom = "units", checkboundaryonly = TRUE) # Replace residual with model without Row autocorrelation current.asrt <- changeTerms(current.asrt, newResidual = "Row:ar1(Column)", label="Row autocorrelation") ## End(Not run)
## Not run: terms <- "(Date/(Sources * (Type + Species)))" current.asrt <- changeTerms(current.asrt, addFixed = terms) current.asrt <- changeTerms(current.asrt, dropFixed = "A + B", denDF = "algebraic") data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Add and drop both fixed and random terms current.asrt <- changeTerms(current.asrt, addFixed = "vRow", dropFixed = "WithinColPairs", addRandom = "spl(vRow)", dropRandom = "units", checkboundaryonly = TRUE) # Replace residual with model without Row autocorrelation current.asrt <- changeTerms(current.asrt, newResidual = "Row:ar1(Column)", label="Row autocorrelation") ## End(Not run)
The data collected after imaging had been completed on the 1056 plants in the experiment reported by Atieno et al. (2017). The design employed for the experiment was a split-plot design in which two consecutive carts formed a main plot. The split-plot design assigned 245 genotypes to main plots, the genotypes being unequally replicated 2 or 3 times. Treatments (non-saline, saline) were randomized to the two subplots (carts) within each main plot.
The columns in the data.frame
are: Smarthouse, Lane, Position, Zone, Mainplot, Subplot, Replicate, xLane, xPosition, Genotypes, Treatments, Biomass, PlantHeight, SenescenceRank, TotalPods, FilledPods, EmptyPods, SeedNo, TotalSeedWt, SeedWt100.
The columns Smarthouse, Lane and Position uniquely identify the rows of observations. Zones are groups of 4 Lanes, Mainplots are the 44 pairs of consecutive Subplots within each Zone, and a Subplot is a cart containing a single plant. The columns xLane and xPosition are numeric covariates for location within a Smarthouse. Genotypes and Treatments indicate the genotype and treatment that each plant was allocated. The response variables are Biomass, PlantHeight, SenescenceRank, TotalPods, FilledPods, EmptyPods, SeedNo, TotalSeedWt and SeedWt100.
data(ChickpeaEnd.dat)
data(ChickpeaEnd.dat)
A data.frames
with 1056 rows by 20 columns.
Atieno, J., Li, Y., Langridge, P., Dowling, K., Brien, C., Berger, B., Varshney, R. K., and Sutton, T. (2017). Exploring genetic variation for salinity tolerance in chickpea using image-based phenotyping. Scientific Reports, 7, 1300. doi:10.1038/s41598-017-01211-7
data.frame
, taking into account the
marginality relations of terms.Using p-values from hypothesis tests, determines the set of significant
terms, taking into account the hierarchy or marginality of terms.
In particular, a term will not be tested if it is marginal to (or nested in) one
that is significant.
For example, if A:B is significant, then neither A nor B will be tested.
The tests conducted in choosing selected model are listed in
a summary data.frame
.
chooseModel(object, ...)
chooseModel(object, ...)
object |
an object using which p-values can be obtained for use in model selection. |
... |
further arguments passed to or from other methods. |
chooseModel
is the generic function for the chooseModel
method.
Use methods("chooseModel") to get all the methods for the chooseModel generic.
chooseModel.asrtests
is a method for an asrtests.object
. It uses
testranfix.asrtests
to conduct tests to determine the p-values used
in the model selection.
chooseModel.data.frame
is a method for a data.frame
. It uses
the p-values stored in the data.frame
in the model selection.
Chris Brien
chooseModel.asrtests
, chooseModel.asrtests
,
changeModelOnIC.asrtests
, testranfix.asrtests
asrtests.object
,
taking into account the hierarchy or marginality relations of the terms.Performs a series of hypothesis tests on a set of fixed and/or random terms taking
into account the marginality of terms. In particular, a term will not be tested if it is
marginal to (or nested in) one that is significant. For example, if A:B is significant, then
neither A nor B will be tested. For a random term, the term is removed from
the model fit, any boundary terms are removed using rmboundary.asrtests
and a REML likelihood ratio test is performed using REMLRT.asreml
.
If it is not significant and drop.ran.ns
is TRUE, the term is permanently removed
from the model. Note that if boundary terms are removed, the reduced model may not
be nested in the full model in which case the test is not valid. For fixed terms,
the Wald tests are performed and the p-value for the term obtained. If it is not
significant and drop.fix.ns
is TRUE, the term is permanently removed
from the model. A row that records the outcome of a test is added to
test.summary
for each term that is tested.
## S3 method for class 'asrtests' chooseModel(object, terms.marginality=NULL, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, drop.ran.ns=TRUE, positive.zero = FALSE, bound.test.parameters = "none", drop.fix.ns=FALSE, denDF = "numeric", dDF.na = "none", dDF.values = NULL, trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, IClikelihood = "none", ...)
## S3 method for class 'asrtests' chooseModel(object, terms.marginality=NULL, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, drop.ran.ns=TRUE, positive.zero = FALSE, bound.test.parameters = "none", drop.fix.ns=FALSE, denDF = "numeric", dDF.na = "none", dDF.values = NULL, trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, IClikelihood = "none", ...)
object |
an |
terms.marginality |
A square matrix of ones and zeros with row and column names
being the names of the terms to be tested.
The names of fixed terms must match those in the |
alpha |
The significance level for the test. |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
drop.ran.ns |
A logical indicating whether to drop nonsignificant random terms from the model. |
positive.zero |
Indicates whether the hypothesized values for the
variance components being tested are on the boundary
of the parameter space. For example, this is true
for positively-constrained variance components that,
under the reduced model, are zero. This argument does
not need to be set if |
bound.test.parameters |
Indicates whether for the variance components
being tested, at least some of the hypothesized values
are on the boundary of the parameter space.
The possibilities are |
drop.fix.ns |
A logical indicating whether to drop a fixed term from the model when it is nonsignificant |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
dDF.na |
The method to use to obtain substitute denominator degrees of freedom.
when the numeric or algebraic methods produce an |
dDF.values |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
set.terms |
A character vector specifying the terms that are to have
bounds and/or initial values set prior to fitting.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
IClikelihood |
A |
... |
further arguments passed to |
A list containing:
asrtests.obj
: an asrtests.object
containing the
components (i) asreml.obj
, (ii) wald.tab
, and
(iii) test.summary
.;
sig.tests
: a character vector
whose elements are the
significant terms amongst those tested.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
chooseModel
, chooseModel.data.frame
,
as.asrtests
, testranfix.asrtests
, testresidual.asrtests
, REMLRT.asreml
,
rmboundary.asrtests
, newfit.asreml
, changeModelOnIC.asrtests
, changeTerms.asrtests
,
reparamSigDevn.asrtests
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(log.Turbidity ~ Benches + (Sources * (Type + Species)) * Date, random = ~Benches:MainPlots:SubPlots:spl(xDay), data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) terms.treat <- c("Sources", "Type", "Species", "Sources:Type", "Sources:Species") terms <- sapply(terms.treat, FUN=function(term){paste("Date:",term,sep="")}, simplify=TRUE) terms <- c("Date", terms) terms <- unname(terms) marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,0,1,0, 1,1,1,1,1,1), nrow=6) rownames(marginality) <- terms colnames(marginality) <- terms choose <- chooseModel(current.asrt, marginality) current.asrt <- choose$asrtests.obj sig.terms <- choose$sig.terms ## End(Not run)
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(log.Turbidity ~ Benches + (Sources * (Type + Species)) * Date, random = ~Benches:MainPlots:SubPlots:spl(xDay), data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) terms.treat <- c("Sources", "Type", "Species", "Sources:Type", "Sources:Species") terms <- sapply(terms.treat, FUN=function(term){paste("Date:",term,sep="")}, simplify=TRUE) terms <- c("Date", terms) terms <- unname(terms) marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,0,1,0, 1,1,1,1,1,1), nrow=6) rownames(marginality) <- terms colnames(marginality) <- terms choose <- chooseModel(current.asrt, marginality) current.asrt <- choose$asrtests.obj sig.terms <- choose$sig.terms ## End(Not run)
data.frame
,
taking into account the marginality relations of terms and recording the tests used
in a data.frame
.Uses the p.values
from a set of hypothesis tests that are stored in
the supplied data.frame
to choose a model to describe the effects of the
terms corresponding to the p-values, taking into account the hierarchy or marginality
of terms. In particular, a term will not be tested if it is marginal to (or nested in)
one that is significant. For example, if A:B is significant, then neither A nor B will
be tested. The tests used in choosing the selected model are listed in the
data.frame
choose.summary
.
No change is made to the p.values
, the DF
and denDF
being for
information only.
## S3 method for class 'data.frame' chooseModel(object, terms=NULL, p.values = "Pr", DF = "Df", denDF = "denDF", omit.DF = FALSE, terms.marginality=NULL, alpha = 0.05, ...)
## S3 method for class 'data.frame' chooseModel(object, terms=NULL, p.values = "Pr", DF = "Df", denDF = "denDF", omit.DF = FALSE, terms.marginality=NULL, alpha = 0.05, ...)
object |
a |
terms |
A |
p.values |
A |
DF |
Can be a |
denDF |
Can be a |
omit.DF |
A |
terms.marginality |
A square matrix of ones and zeros with row and column names
being the names of the those terms in the |
alpha |
The significance level for the hypothesis testing. |
... |
Provision for passing arguments to functions called internally - not used at present. |
A list containing:
choose.summary
: a data.frame
summarizing
the tests carried out in choosing the significant terms;
provided omit.DF =
FALSE
, it has the same columns as a
test.summary
from an asrtests.object
sig.tests
: a character vector
whose elements are the
significant terms amongst those tested.
Chris Brien
chooseModel
, chooseModel.asrtests
data("Ladybird.dat") ## Use asreml to get the table of p-values ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) fixed.tab <- current.asrt$wald.tab col.p <- "Pr" df = "Df" den.df = "denDF" ## End(Not run) ## Use lmeTest to get the table of p-values if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) fixed.tab <- anova(m1.lmer, type = "II") col.p <- "Pr(>F)" df = "NumDF" den.df = "DenDF" } ## Select a model using the table of p-values obtained with either asreml or lmerTest if (exists("fixed.tab")) { term.marg <- dae::marginality(dae::pstructure(~ Host*Cadavers*Ladybird, data = Ladybird.dat)) chosen <- chooseModel(fixed.tab, p.values = col.p, DF = df, denDF = den.df, terms.marginality = term.marg) }
data("Ladybird.dat") ## Use asreml to get the table of p-values ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) fixed.tab <- current.asrt$wald.tab col.p <- "Pr" df = "Df" den.df = "denDF" ## End(Not run) ## Use lmeTest to get the table of p-values if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) fixed.tab <- anova(m1.lmer, type = "II") col.p <- "Pr(>F)" df = "NumDF" den.df = "DenDF" } ## Select a model using the table of p-values obtained with either asreml or lmerTest if (exists("fixed.tab")) { term.marg <- dae::marginality(dae::pstructure(~ Host*Cadavers*Ladybird, data = Ladybird.dat)) chosen <- chooseModel(fixed.tab, p.values = col.p, DF = df, denDF = den.df, terms.marginality = term.marg) }
For a response variable measured on a potentially irregular grid of rows and
columns of the units, uses information criteria (IC) to decide whether the fit and
parsimony of the model fitted to a set of data can be improved by adding, to the fitted
model stored in the supplied asrtests.object
, one of the following spatial
models to account for the local spatial variation:
(i) a two-dimensional first-order autocorrelation model, (ii) a two-dimensional
tensor-product natural cubic smoothing spline model (TPNCSS), (iii) a two-dimensional
tensor-product penalized P-spline model with second-difference penalties (TPPSC2) model,
or (iv) a two-dimensional tensor-product penalized linear spline model with
first-difference penalties (TPPSL1). The models from which to select can be reduced
to a subset of these four models. For each model, a term from the spatial model is
only added to the supplied model if the IC of the supplied model is decreased with
the addition of that term. If no model improves the IC when a local spatial variation
model is added, then the supplied, nonspatial model will be returned. The data can be
arranged in sections, for each of which there is a grid and for which the model is to
be fitted separately. Also, the rows and columns of a grid are not necessarily one
observational unit wide. For TPPSC2
models, the improvement in the fit from
rotating the eigenvectors of the penalty matrix can be investigated; if there is no
improvement, the unrotated fit will be returned.
One or more rows is added to the test.summary
data.frame
of the
asrtests.object
, for each section
and each spatial model,
stating whether or not the new model has been swapped for a model in which the
spatial model has been added to the supplied model. Convergence in fitting the
model is checked and a note included in the action
if there was not.
All components of the asrtests.object
are updated to exhibit the
differences between the supplied and any new model.
## S3 method for class 'asrtests' chooseSpatialModelOnIC(asrtests.obj, trySpatial = "all", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", return.asrts = "best", ...)
## S3 method for class 'asrtests' chooseSpatialModelOnIC(asrtests.obj, trySpatial = "all", sections = NULL, row.covar = "cRow", col.covar = "cCol", row.factor = "Row", col.factor = "Col", corr.funcs = c("ar1", "ar1"), corr.orders = c(0, 0), row.corrFitfirst = TRUE, allow.corrsJointFit = TRUE, nugget.variance = TRUE, dropFixed = NULL, dropRandom = NULL, nsegs = NULL, nestorder = c(1,1), usRandLinCoeffs = TRUE, rotateX = FALSE, ngridangles = NULL, which.rotacriterion = "AIC", nrotacores = 1, asreml.option = "grp", tpps4mbf.obj = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, update = TRUE, trace = FALSE, maxit = 30, IClikelihood = "full", which.IC = "AIC", return.asrts = "best", ...)
asrtests.obj |
An |
trySpatial |
A |
sections |
A single |
row.covar |
A single |
col.covar |
A single |
row.factor |
A single |
col.factor |
A single |
corr.funcs |
A single |
corr.orders |
A |
row.corrFitfirst |
A |
allow.corrsJointFit |
A |
nugget.variance |
A |
dropFixed |
A single An element that is The terms must match those in the |
dropRandom |
A single An element that is The terms must match those in the |
nsegs |
A pair of |
nestorder |
A |
usRandLinCoeffs |
A |
rotateX |
A |
ngridangles |
A |
which.rotacriterion |
A single |
nrotacores |
A |
asreml.option |
A single |
tpps4mbf.obj |
An object made with |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
update |
If |
trace |
If |
which.IC |
A |
maxit |
A |
IClikelihood |
A |
return.asrts |
A |
... |
Further arguments passed to |
For each spatial model that is to be fitted, a fitted spatial model is only returned if it improves the fit over and above that achieved with the model fit supplied in the asrtests.obj
, because terms in the spatial model are not added unless model fit is improved by their addition as measured by an IC. If return.asrts
is all
, then this applies to each spatial model specified by trySpatial
. To force a spatial model to be fitted use addSpatialModel.asrtests
. The model fit supplied in the asrtests.obj
should not include terms that will be included in any local spatial model. All spatial model terms are fitted as fixed or random. Consequently, the residual model does not have to be iid. The improvement in the fit resulting from the addition of a spatial model to the supplied model is evaluated. Note that the data must be in the order that corresponds to the residual
argument with a variable to the right of another variable changing levels in the data frame faster than those of the preceding variables e.g. Row:Column
implies that all levels for Column
are in consecutive rows of the data.frame
that have a single Row
level.
For the corr
spatial model, the default model is an autocorrelation model of order one (ar1
) for each dimension. However, any of the single dimension correlation/variance models from asreml
can be specified for each dimension, as can no correlation model for a dimension; the models for the two dimensions can differ. Using a forward selection procedure, a series of models are tried, without removing boundary or singular terms, beginning with the addition of row correlation and followed by the addition of column correlation or, if the row.corrFitfirst
is set to FALSE
, the reverse order. If the fitting of the first-fitted correlation did not result in a model change because the fitting did not converge or correlations were fixed, but the fit of the second correlation was successful, then adding the first correlation will be retried. If one of the metric correlation functions is specified (e.g. exp
), then the row.covar
or col.covar
will be used in the spatial model. However, because the correlations are fitted separately for the two dimensions, the row.factor
and col.factor
are needed for all models and are used for any dimension that does not involve a correlation/variance function for the fit being performed. Also, the correlation models are fitted as random
terms and so the correlation model will include a variance parameter for the grid even when ar1
is used to specify the correlation model, i.e. the model fitted is a variance model and there is no difference between ar1
and ar1v
in fitting the model. The variance parameter for this term represents the spatial variance and the fit necessarily includes a nugget term, this being the residual variance. If any correlation is retained in the model, for a section if sections
is not NULL
, then the need for a nuggest term is assessed by fixing the corresponding residual variance to one, unless there are multiple residual variances and these are not related to the sections
. Once the fitting of the correlation model has been completed, the rmboundary
function will be executed with the checkboundaryonly
value supplied in the chooseSpatialModelOnIC.asrtests
call. Finally, checking for bound and singular random terms associated with the correlation model and residual terms will be carried out when there are correlation terms in the model and checkboundaryonly
has been set to FALSE
; as many as possible will be removed from the fitted model, in some cases by fixing variance terms to one.
The tensor-product natural-cubic-smoothing-spline (TPNCSS
) spatial model is as described by Verbyla et al. (2018), the tensor-product penalized-cubic-spline (TPPSC2
) model with second-order differencing of the penalty is similar to that described by Rodriguez-Alvarez et al. (2018), and the tensor-product, first-difference-penalty, linear spline (TPPSL1
) model is amongst those described by Piepho, Boer and Williams (2022). The fixed terms for the spline models are row.covar + col.covar + row.covar:col.covar
and the random terms are spl(row.covar) + spl(col.covar) + dev(row.covar) + dev(col.covar) + spl(row.covar):col.covar + row.covar:spl(col.covar) + spl(row.covar):spl(col.covar)
, except that spl(row.covar) + spl(col.covar)
is replaced with spl(row.covar):int(col.covar) + int(row.covar):spl(col.covar)
in the TPPSC2
model, where int(.)
indicates an intercept or constant value specific to its argument. For TPPSL1
models, the terms spl(row.covar):col.covar + row.covar:spl(col.covar)
are omitted, The supplied model should not include any of these terms. However, any fixed or random main-effect Row or Column term that has been included as an initial model for comparison with a spatial model can be removed prior to fitting the spatial model using dropFixed
or dropRandom
. For the P-spline models with second-order differencing, the model matrices used to fit the pairs of random terms (i) spl(row.covar):int(col.covar)
and spl(row.covar):col.covar
and (ii) int(row.covar):spl(col.covar)
and row.covar:spl(col.covar)
are transformed using the spectral decomposition of their penalty matrices. An unstructured variance model is tried for each of these pairs and retained if it improves the fit. For TPPSC2
, it is also possible to optimize the rotation of the null-space eigenvectors of the penalty matrix for each of these random-term pairs (for more information see Piepho, Boer and Williams, 2022). The optimization is achieved either using an optimizer or takes the form of a search over a grid of rotation angles for a reduced model; the fit of the full model with rotation using the optimal rotation angles will only be returned if it improves on the fit of the full, unrotated model.
The TPPSC2
and TPPSL1
models are fitted using functions from the R
package TPSbits
authored by Sue Welham (2022). There are two methods for supplying the spline basis information produced by tpsmmb
to asreml
. The grp
method adds it to the data.frame
supplied in the data
argument of the asreml
call. The mbf
method creates smaller data.frames
with the spline basis information in the same environment as the internal function that calls the spline-fitting function. If it is desired to use in a later session, an asreml
function, or asrtests
function that calls asreml
, (e.g. predict.asreml
, predictPlus.asreml
, or changeTerms.asrtests
) on an asreml.object
created using mbf
terms, then the mbf
data.frames
will need to be recreated using makeTPPSplineMats.data.frame
in the new session, supplying, if there has been rotation of the penalty matrix eigenvectors, the theta
values that are returned as the attribute theta.opt
of the asreml.obj
.
All models utlize the function changeModelOnIC.asrtests
to assess the model fit, the information criteria used in assessing the fit being calculated using infoCriteria
. Arguments from tpsmmb
and changeModelOnIC.asrtests
can be supplied in calls to chooseSpatialModelOnIC.asrtests
and will be passed on to the relevant function though the ellipses argument (...).
The data for experiment can be divided into sections
and an attempt to fit the same spatial model to each is made. The fit may differ for each of the sections
, but the fit over all of the sections
is assessed. For more detail see sections
above.
Each combination of a row.coords and a col.coords does not have to specify a single observation; for example, to fit a local spatial model to the main units of a split-unit design, each combination would correspond to a main unit and all subunits of the main unit would have the same combination.
A list
containing four components: (i) asrts
, (ii) spatial.IC
,
(iii) best.spatial.mod
, and (iv) best.spatial.IC
.
The component asrts
itself holds a list
of one or more
asrtests.object
s, either the best overall out of the supplied model and
the spatial models, or, for each spatial model, the best out of the supplied model
and that spatial model. Each asrtests.object
contains the components:
(i) asreml.obj
, (ii) wald.tab
, and (iii) test.summary
. If the
asrtests.object
is the result of fitting a TPPSC2
model with
an exploration of the rotation of the eigenvectors of the penalty matrix for the linear
components, then the asreml.obj
will have an attribute theta.opt
that contains
the optimal rotation angles of the eigenvectors.
The spatial.IC
component holds a data.frame
with summary of the
values of the information criteria for the supplied model and those resulting from
adding the spatial models to the supplied model. In the case of a spatial correlation model,
the information criteria for the selected spatial correlation model is returned.
If a spatial model could not be fitted, then all returned values will be NA
).
The best.spatial.mod
component is a character giving the name of the best spatial
model, and best.spatial.AIC
gives the value of its AIC
.
Chris Brien
Piepho, H.-P., Boer, M. P., & Williams, E. R. (2022). Two-dimensional P-spline smoothing for spatial analysis of plant breeding trials. Biometrical Journal, 64, 835-857.
Rodriguez-Alvarez, M. X., Boer, M. P., van Eeuwijk, F. A., & Eilers, P. H. C. (2018). Correcting for spatial heterogeneity in plant breeding experiments with P-splines. Spatial Statistics, 23, 52-71.
Verbyla, A. P., De Faveri, J., Wilkie, J. D., & Lewis, T. (2018). Tensor Cubic Smoothing Splines in Designed Experiments Requiring Residual Modelling. Journal of Agricultural, Biological and Environmental Statistics, 23(4), 478-508.
Welham, S. J. (2022) TPSbits
: Creates Structures to Enable Fitting and Examination of 2D Tensor-Product Splines using ASReml-R. Version 1.0.0 https://mmade.org/tpsbits/
as.asrtests
,
makeTPPSplineMats.data.frame
,
addSpatialModelOnIC.asrtests
, addSpatialModel.asrtests
,
changeModelOnIC.asrtests
,
changeTerms.asrtests
, rmboundary.asrtests
,
testranfix.asrtests
,
testresidual.asrtests
,
newfit.asreml
, reparamSigDevn.asrtests
,
changeTerms.asrtests
,
infoCriteria.asreml
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) # Choose the best of four models for the local spatial variation current.asrt <- chooseSpatialModelOnIC(current.asrt, row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") ## End(Not run)
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, data=Wheat.dat) #Create an asrtests object, removing boundary terms current.asrt <- as.asrtests(current.asr, NULL, NULL, label = "Random Row and Column effects") current.asrt <- rmboundary(current.asrt) # Choose the best of four models for the local spatial variation current.asrt <- chooseSpatialModelOnIC(current.asrt, row.covar = "cRow", col.covar = "cColumn", dropRowterm = "Row", dropColterm = "Column", asreml.option = "grp") ## End(Not run)
asreml
object so that it is compatible with the currently loaded asreml
version.Recreate an existing asreml
object so that it is compatible with the currently loaded asreml
version. It involves refitting the model stored in the asreml
object.
## S3 method for class 'asreml' convAsremlobj(asreml.obj, ...)
## S3 method for class 'asreml' convAsremlobj(asreml.obj, ...)
asreml.obj |
An |
... |
Provision for passing arguments to functions called internally - not used at present. |
An asreml
object.
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
newfit.asreml
, update.asreml
## Not run: m1.asr <- convAsremlobj(m1.asr) ## End(Not run)
## Not run: m1.asr <- convAsremlobj(m1.asr) ## End(Not run)
asreml
object into a data.frame
.Converts the effects names for a term stored in the component of an asreml
object into
a data.frame
that has a column for each factor and variable in the term.
It facilitates adding the effects to the data.frame
supplied to asreml
for an analysis. This function can only be used with asreml
v4.2 or later.
## S3 method for class 'asreml' convEffectNames2DataFrame(asreml.obj, term, use = "design.matrix", sep = ":", ...)
## S3 method for class 'asreml' convEffectNames2DataFrame(asreml.obj, term, use = "design.matrix", sep = ":", ...)
asreml.obj |
An object resulting from the fitting of
a model using |
term |
A |
use |
A |
sep |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
A data.frame
with columns for the factors and variables in term
.
It includes the attribute effect.names
that contains the extracted effects names
for the term
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
## Not run: G.dat <- convEffectNames2DataFrame(m1.asr, term = "Row:Column", use = "G.aom") G.dat <- lapply(c("at(Smarthouse, 'SW'):Lane:Position", "at(Smarthouse, 'SE'):Lane:Position"), function(term, asreml.obj) tmp <- convEffectNames2DataFrame.asreml(asreml.obj, term = term), asreml.obj = m1.asr) G.dat <- do.call(rbind, G.dat) ## End(Not run)
## Not run: G.dat <- convEffectNames2DataFrame(m1.asr, term = "Row:Column", use = "G.aom") G.dat <- lapply(c("at(Smarthouse, 'SW'):Lane:Position", "at(Smarthouse, 'SE'):Lane:Position"), function(term, asreml.obj) tmp <- convEffectNames2DataFrame.asreml(asreml.obj, term = term), asreml.obj = m1.asr) G.dat <- do.call(rbind, G.dat) ## End(Not run)
Forms the estimated variance (V), random (G) or (R) matrix
for the observations, a square symmetric matrix of order equal to the number of
observations. The estimates of the variance parameters and the information about
the random
and residual
models for which they were estimated are
obtained from the asreml
object.
This function is not available in ASReml-R version 3.
## S3 method for class 'asreml' estimateV(asreml.obj, which.matrix = "V", extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), ...)
## S3 method for class 'asreml' estimateV(asreml.obj, which.matrix = "V", extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), ...)
asreml.obj |
An |
which.matrix |
A |
extra.matrix |
A |
ignore.terms |
A |
fixed.spline.terms |
A |
bound.exclusions |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
The information about the variance parameters in the fitted mixed model are obtained
from the G.param
and R.param
components of the asreml
object. The
function can deal with the following variance functions in either the random
or
residual
models: id
, diag
, us
, ar1
, ar2
,
ar3
, sar
,sar2
, ma1
, ma2
, arma
, exp
,
gau
, cor
, corb
and corg
. All of these functions,
except us
, can be combined with either v
or h
. It will also cope
with the following functions in the random
model: at
, str
,
spl
, dev
, grp
, fa
and rr
. Additionally, it can deal
with the function dsum
in the residual
model. For further information see
the ASReml-R User Guide Version 4 (Butler et al., 2023).
A matrix
containing the estimated variance matrix. It has an attribute
missing.termmatrix
(use attr(x, which = "missing.termmatrix")
to access the
atrribute). It will be NULL
, unless the design matrix could not be obtained for
one or more model terms. If is is not NULL
, it will be a list of terms that could
not be produced for inclusion in the variance matrix estimate, and NA
will be
returned for the estimated variance matrix.
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
asreml
, simulate.asreml
, variofaces.asreml
.
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Form variance matrix based on estimated variance parameters V <- estimateV(current.asr) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Form variance matrix based on estimated variance parameters V <- estimateV(current.asr) ## End(Not run)
Given an alldiffs.object
with an sed
component, the LSDs are
calculated for all pairwise comparisons of predictions. It then calculates
(i) a table of frequencies of the LSD values, (ii) the distinct values of the LSDs
after rounding, (iii) various statistics from the LSD values, (iv) a measure of
the accuracy of each of the LSD statistics, (v) the numbers of false positives and
false negatives for each of the LSD statistics if pairwise comparisons are based
on the LSD statistic, (vi) the accuracy of each statistic in
representing the LSD values for each prediction and (vii) a matrix containing
the LSD values for comparing each pair of predictions. Histograms of the
frequencies can also be produced.
## S3 method for class 'alldiffs' exploreLSDs(alldiffs.obj, LSDtype = "overall", LSDby = NULL, LSDaccuracy = "maxAbsDeviation", alpha = 0.05, digits = 3, retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, plotHistogram = FALSE, ...)
## S3 method for class 'alldiffs' exploreLSDs(alldiffs.obj, LSDtype = "overall", LSDby = NULL, LSDaccuracy = "maxAbsDeviation", alpha = 0.05, digits = 3, retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, plotHistogram = FALSE, ...)
alldiffs.obj |
An |
LSDtype |
A See |
LSDby |
A |
LSDaccuracy |
A |
alpha |
A |
digits |
A |
retain.zeroLSDs |
A |
zero.tolerance |
A |
plotHistogram |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
The false positives and negatives are computed by comparing, for each pair of predictions
within each levels-combination of the LSDby
variables, the
significance of the pair difference determined using (i) the true LSD that is computed from the
standard error of differences for the pair and (ii) the approximate LSD that is a statistic
computed from the true LSDs for all pairwise difference within each levels-combination of the
LSDby
variables. The number of false positives is the number of pairwise differences for
which a difference is declared significant using the approximate LSD, but not using the true LSD.
The number of false negatives is the number of pairwise differences for which a difference is
declared nonsignificant using the approximate LSD, but significant using the true LSD.
The LSD accuracy for a set of LSDs is a function of the deviations of those LSDs and an LSD statistic calculated from them; the accuracy is expressed as a proportion of the value of the LSD statistic.
A list
with components
frequencies
, distinct.vals
, statistics
, accuracy
, per.pred.accuracy
and LSD
:
frequencies
is a data.frame
with the frequency distribution of the LSD
values;
distinct.vals
is a list
, each component of which contains the distinct values
of the LSDs after rounding;
statistics
is a data.frame
with the minimum, quantile10,
quantile25, mean, median, quantile75, quantile90, and maximum of the LSD values;
accuracy
is a data.frame
with the accuracies of the minimum, quantile10,
quantile25, mean, median, quantile75, quantile90, and maximum of the LSD values with respect
to the values from which these statistics are calculated;
false.pos
is a data.frame
with the numbers of false positives for the
pairwise comparisons within each levels-combination of the LSDby
variables when each of
the minimum, quantile10, quantile25, mean, median, quantile75, quantile90, and maximum of
the LSD values is used as an approximate LSD in determining the significance of the pairwise
differences;
false.neg
is a data.frame
with the numbers of false negatives for the
pairwise comparisons within each levels-combination of the LSDby
variables when each of
the minimum, quantile10, quantile25, mean, median, quantile75, quantile90, and maximum of
the LSD values is used as an approximate LSD in determining the significance of the pairwise
differences;
per.pred.accuracy
is a data.frame
with the accuracies of the
minimum, quantile10, quantile25, mean, median, quantile75, quantile90, and maximum of the LSD
values for a set of predictions when these statistics are used to represent the LSDs for the
comparisons amongst the set of predictions;
LSD
is a square matrix
containing the LSD values for
all pairwise comparisons of the predictions contained in the supplied alldiffs.obj
.
In the statistics
, accuracy
, false.pos
and false.neg
data.frame
s,
c
is the number of pairwise comparisons on which the values in the same row are based.
The accuracy measure is specified by the LSDaccuracy
argument.
Chris Brien
asremlPlus-package
, plotLSDs.data.frame
, plotLSDs.alldiffs
, plotLSDerrors.alldiffs
, plotLSDerrors.data.frame
, recalcLSD.alldiffs
, pickLSDstatistics.alldiffs
, redoErrorIntervals.alldiffs
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Explore the LSD values for predictions obtained using asreml or lmerTest LSDstat <- exploreLSDs(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Explore the LSD values for predictions obtained using asreml or lmerTest LSDstat <- exploreLSDs(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") }
alldiffs.object
Combines several factors
, in the prediction
component
of object
, into one whose levels
are the combinations of the
used levels
of the individual factors
. The matching
changes are made to the other components and the attributes of the
alldiffs.object
. If any of the factors to be combined are in
LSDby
, they are removed from the LSDby
, unless the factors to
be combined are exactly those in the LSDby
.
The levels of the factors
are combined using fac.combine
from the dae
package.
## S3 method for class 'alldiffs' facCombine(object, factors, order="standard", combine.levels=TRUE, sep="_", level.length = NA, ...)
## S3 method for class 'alldiffs' facCombine(object, factors, order="standard", combine.levels=TRUE, sep="_", level.length = NA, ...)
object |
An |
factors |
A |
order |
Either |
combine.levels |
A |
sep |
A |
level.length |
The maximum number of characters from the levels of factors to use in the row and column labels of the tables of pairwise differences and their p-values and standard errors. |
... |
Further arguments passed to |
A modified alldiffs.object
.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.alldiffs
, renewClassify.alldiffs
; fac.combine
in package dae.
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- as.alldiffs(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Combine Cadavers and Ladybird HCL.diffs <- facCombine(HCL.diffs, factors = c("Cadavers","Ladybird")) ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- as.alldiffs(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Combine Cadavers and Ladybird HCL.diffs <- facCombine(HCL.diffs, factors = c("Cadavers","Ladybird")) ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
levels.order
and the new labels for the levels given in newlabels
. The values in levels.order
must be unique.Reorders and revises the levels and labels of a factor
, in the prediction
component of an alldiffs.object
. The values in the
levels.order
vector should be the same as the levels in the existing factor
,
but the order can be changed. To revise the levels, specify the new levels in the
newlabels
vector and these will replace the corresponding value in the
levels.order
vector. The matching
changes are made to the other components and attributes of the alldiffs.object
.
## S3 method for class 'alldiffs' facRecast(object, factor, levels.order = NULL, newlabels = NULL, ...)
## S3 method for class 'alldiffs' facRecast(object, factor, levels.order = NULL, newlabels = NULL, ...)
object |
An |
factor |
A |
levels.order |
A |
newlabels |
A |
... |
Further arguments passed to the |
A modified alldiffs.object
.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.alldiffs
, facCombine.alldiffs
, facRename.alldiffs
,
renewClassify.alldiffs
;
fac.recast
in package dae.
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- allDifferences(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Recast the Ladybird and Host factors HCL.diffs <- facRecast(HCL.diffs, factor = "Ladybird", newlabels = c("none", "present")) HCL.diffs <- facRecast(HCL.diffs, factor = "Ladybird", levels.order = c("present", "none"), newlabels = c("yes","no")) HCL.diffs <- facRecast.alldiffs(HCL.diffs, factor = "Host", levels.order = c("trefoil", "bean")) ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- allDifferences(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Recast the Ladybird and Host factors HCL.diffs <- facRecast(HCL.diffs, factor = "Ladybird", newlabels = c("none", "present")) HCL.diffs <- facRecast(HCL.diffs, factor = "Ladybird", levels.order = c("present", "none"), newlabels = c("yes","no")) HCL.diffs <- facRecast.alldiffs(HCL.diffs, factor = "Host", levels.order = c("trefoil", "bean")) ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
factor
s in the prediction
component of an
alldiffs.object
.Renames factor
s in the prediction
component of an
alldiffs.object
. These changes are propagated to the other
components and attributes of the alldiffs.object
.
## S3 method for class 'alldiffs' facRename(object, factor.names, newnames, ...)
## S3 method for class 'alldiffs' facRename(object, factor.names, newnames, ...)
object |
An |
factor.names |
A |
newnames |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
A modified alldiffs.object
.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.alldiffs
, facCombine.alldiffs
, facRecast.alldiffs
,
renewClassify.alldiffs
;
fac.recast
in package dae.
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- allDifferences(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Rename Cadavers HCL.diffs <- facRename(HCL.diffs, factor.names = "Cadavers", newnames = "Cadaver.nos") ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
data("Ladybird.dat") ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(logitP ~ Host*Cadavers*Ladybird, random = ~ Run, data = Ladybird.dat) current.asrt <- as.asrtests(m1.asr) HCL.pred <- asreml::predict.asreml(m1.asr, classify="Host:Cadavers:Ladybird", sed=TRUE) HCL.preds <- HCL.pred$pvals HCL.sed <- HCL.pred$sed HCL.vcov <- NULL wald.tab <- current.asrt$wald.tab den.df <- wald.tab[match("Host:Cadavers:Ladybird", rownames(wald.tab)), "denDF"] ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) HCL.vcov <- vcov(HCL.emm) HCL.sed <- NULL } ## Use the predictions obtained with either asreml or lmerTest if (exists("HCL.preds")) { ## Form an all.diffs object HCL.diffs <- allDifferences(predictions = HCL.preds, classify = "Host:Cadavers:Ladybird", sed = HCL.sed, vcov = HCL.vcov, tdf = den.df) ## Check the class and validity of the alldiffs object is.alldiffs(HCL.diffs) validAlldiffs(HCL.diffs) ## Rename Cadavers HCL.diffs <- facRename(HCL.diffs, factor.names = "Cadavers", newnames = "Cadaver.nos") ## Check the validity of HCL.diffs validAlldiffs(HCL.diffs) }
Checks that asreml
is loaded and, if it is, returns the first nchar
characters of the version that is loaded.
getASRemlVersionLoaded(nchar = NULL, notloaded.fault = FALSE)
getASRemlVersionLoaded(nchar = NULL, notloaded.fault = FALSE)
nchar |
The number of characters in the asreml version to get. |
notloaded.fault |
A |
A character, being the first nchar
characters of the version of asreml
that is loaded.
Chris Brien
## Not run: getASRemlVersionLoaded() ## End(Not run)
## Not run: getASRemlVersionLoaded() ## End(Not run)
Gets the formula
e nominated in the which
argument from the call
stored in an asreml
object.
## S3 method for class 'asreml' getFormulae(asreml.obj, which = c("fixed", "random", "residual"), expanded = FALSE, envir = parent.frame(), ...)
## S3 method for class 'asreml' getFormulae(asreml.obj, which = c("fixed", "random", "residual"), expanded = FALSE, envir = parent.frame(), ...)
asreml.obj |
An object resulting from the fitting of
a model using |
which |
A |
expanded |
A |
envir |
The environment in which the |
... |
Arguments passed on to |
A list
containing a component with each of the extracted
formula
(e), the name of a component being the formula
that it contains.
Chris Brien
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) getFormulae(current.asr) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) getFormulae(current.asr) ## End(Not run)
asrtests.object
Matches the label
in the term
column of the test.summary
data.frame
in the supplied asrtests.object
and extracts the line for it. It only matches
the last occurrence of label
.
## S3 method for class 'asrtests' getTestEntry(asrtests.obj, label, ...)
## S3 method for class 'asrtests' getTestEntry(asrtests.obj, label, ...)
asrtests.obj |
An |
label |
A |
... |
provision for passing arguments to functions called internally - not used at present. |
A one-line data.frame
containing the entry.
Chris Brien
getTestPvalue.asrtests
, as.asrtests
, testranfix.asrtests
,
testswapran.asrtests
, testresidual.asrtests
, changeModelOnIC.asrtests
, changeTerms.asrtests
,
chooseModel.asrtests
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) getTestEntry(current.asrt, label = "units") ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) getTestEntry(current.asrt, label = "units") ## End(Not run)
asrtests.object
Matches the label
in the term
column of the test.summary
data.frame
in the supplied asrtests.object
and extracts its p-value. It only matches
the last occurrence of label
.
## S3 method for class 'asrtests' getTestPvalue(asrtests.obj, label, ...)
## S3 method for class 'asrtests' getTestPvalue(asrtests.obj, label, ...)
asrtests.obj |
An |
label |
A |
... |
provision for passing arguments to functions called internally - not used at present. |
An numeric
containing the p-value. It can be NA
, for example when a p-value could not be calculated.
Chris Brien
getTestEntry.asrtests
, as.asrtests
, testranfix.asrtests
,
testswapran.asrtests
, testresidual.asrtests
, changeTerms.asrtests
, chooseModel.asrtests
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) getTestPvalue(current.asrt, label = "units") ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) getTestPvalue(current.asrt, label = "units") ## End(Not run)
Computes Akiake and Bayesian (Schwarz) Information Criteria for models.
Either the Restricted Maximum likelihood (REML
) or the full likelihood
(full
) can be used. The full likelihood, evaluated using REML estimates
is used when it is desired to compare models that differ in their fixed models.
## S3 method for class 'asreml' infoCriteria(object, DF = NULL, bound.exclusions = c("F","B","S","C"), IClikelihood = "REML", fixedDF = NULL, varDF = NULL, ...) ## S3 method for class 'list' infoCriteria(object, bound.exclusions = c("F","B","S","C"), IClikelihood = "REML", fixedDF = NULL, varDF = NULL, ...)
## S3 method for class 'asreml' infoCriteria(object, DF = NULL, bound.exclusions = c("F","B","S","C"), IClikelihood = "REML", fixedDF = NULL, varDF = NULL, ...) ## S3 method for class 'list' infoCriteria(object, bound.exclusions = c("F","B","S","C"), IClikelihood = "REML", fixedDF = NULL, varDF = NULL, ...)
object |
An |
DF |
A |
bound.exclusions |
A |
IClikelihood |
A |
fixedDF |
A |
varDF |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
The variance degrees of freedom (varDF) are the number of number of variance parameters that
have been estimated, excluding those whose estimates have a code for bound
specified in bound.exclusions
. If varDF
is not NULL
, the supplied value
is used. Otherwise varDF
is determined from the information in object
,
i.e. if object
is an asreml
object then from it, or if object
is a
list
then from each asreml
object in the list
.
Similarly, the fixed degrees of freedom (fixedDF) are the number of number of fixed parameters
that have been estimated, any coefficients that have the value NA
being excluded.
If fixedDF
is not NULL
, the supplied value is used. Otherwise fixedDF
is determined from the information in object
.
If ASReml-R version 4 is being used then the codes specified in bound.exclusions
are
not restricted to a subset of the default codes, but a warning is issued if a code other
than these is specified.
For ASReml-R version 3, only a subset of the default codes are allowed:
F
(Fixed
), B
(Boundary
), C
(Constrained
) and
S
(Singular
).
The calculation of the information criteria is an adaptation of the code supplied in File S1
of Verbyla (2019). The log-likelihood is calculated as
loglik = log(REML) - log(|C|)/2
,
where C is the inverse coefficient matrix; the term involving C is omitted for REML
.
The AIC is calculated as - 2 * loglik + 2 * (varDF + fixedDF)
and the BIC as - 2 * loglik + (fixedDF + varDF) * log(n - r + fixedDF)
,
where n
is the number of observations and r
is the rank of the fixed effects
design matrix. For REML
, fixedDF = 0
.
A data.frame
containing the numbers of estimated fixed (fixedDF) and variance (varDF)
parameters, the number of bound parameters (NBound), AIC, BIC and the value of the
log-likelihood (loglik). All elements of the data.frame
will be set to NA
for the invalid combinations of family and dispersion as noted in the IClikelihood
argument.
If object
is a list
and its components are named, then those names will be used to
set the rownames
of the data.frame
.
Chris Brien
Verbyla, A. P. (2019). A note on model selection using information criteria for general linear models estimated using REML. Australian & New Zealand Journal of Statistics, 61, 39–50. doi:10.1111/anzs.12254.
REMLRT.asreml
, changeTerms.asrtests
, changeModelOnIC.asrtests
## Not run: data(Wheat.dat) ## Fit several models to the wheat data and calculate their ICs # Fit initial model m.max <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) infoCriteria(m.max.asr, IClikelihood = "full") #Drop term for within Column pairs m1 <- asreml(yield ~ Rep + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) #Drop nugget term m2 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) #Drop Row autocorrelation m3 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ Row:ar1(Column), data=Wheat.dat) #Drop Col autocorrelation m4 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):Column, data=Wheat.dat) mods.asr <- list(m.max, m1, m2, m3, m4) infoCriteria(mods.asr, IClikelihood = "full") ## End(Not run)
## Not run: data(Wheat.dat) ## Fit several models to the wheat data and calculate their ICs # Fit initial model m.max <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) infoCriteria(m.max.asr, IClikelihood = "full") #Drop term for within Column pairs m1 <- asreml(yield ~ Rep + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) #Drop nugget term m2 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) #Drop Row autocorrelation m3 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ Row:ar1(Column), data=Wheat.dat) #Drop Col autocorrelation m4 <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):Column, data=Wheat.dat) mods.asr <- list(m.max, m1, m2, m3, m4) infoCriteria(mods.asr, IClikelihood = "full") ## End(Not run)
A single-line function
that tests whether an object is of class
alldiffs
.
is.alldiffs(object)
is.alldiffs(object)
object |
An |
A logical
.
Chris Brien
asremlPlus-package
, alldiffs.object
, is.alldiffs
, as.alldiffs
data(Oats.dat) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## check the class of Var.diffs is.alldiffs(Var.diffs) }
data(Oats.dat) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## check the class of Var.diffs is.alldiffs(Var.diffs) }
A single-line function
that tests whether an object is of class
asrtests
.
is.asrtests(object)
is.asrtests(object)
object |
An |
A logical
.
Chris Brien
asremlPlus-package
, asrtests.object
, is.asrtests
, as.asrtests
## Not run: library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # check the class of current.asrt is.asrtests(current.asrt) ## End(Not run)
## Not run: library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # check the class of current.asrt is.asrtests(current.asrt) ## End(Not run)
A single-line function
that tests whether an object is of class
predictions.frame
.
is.predictions.frame(object)
is.predictions.frame(object)
object |
An |
A logical
.
Chris Brien
asremlPlus-package
, predictions.frame
, validPredictionsFrame
, as.predictions.frame
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the alldiffs object is.predictions.frame(Var.preds) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the alldiffs object is.predictions.frame(Var.preds) }
Tests whether an object of class matrix
is compound symmetric by checking whether all diagonal elements are equal and all off-diagonal elements are equal.
## S3 method for class 'matrix' isCompoundSymmetric(object, tol = 100 * .Machine$double.eps, ...)
## S3 method for class 'matrix' isCompoundSymmetric(object, tol = 100 * .Machine$double.eps, ...)
object |
An |
tol |
a |
... |
Provision for passing arguments to functions called internally - not used at present. |
A logical
.
Chris Brien
data(Oats.dat) ## Not run: ## Use asreml to get the variance matrix of a set of predictions m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", vcov = TRUE) est.status = "status") isCompoundSymmetrix(Var.pred$vcov) ## End(Not run) ## Use lmerTest and emmmeans to get the variance matrix of a set of predictions if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.vcov <- vcov(Var.emm) } if (exists("Var.vcov")) { ## Check the variance matrix of the predictions is compound symmetric isCompoundSymmetric(Var.vcov) }
data(Oats.dat) ## Not run: ## Use asreml to get the variance matrix of a set of predictions m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", vcov = TRUE) est.status = "status") isCompoundSymmetrix(Var.pred$vcov) ## End(Not run) ## Use lmerTest and emmmeans to get the variance matrix of a set of predictions if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.vcov <- vcov(Var.emm) } if (exists("Var.vcov")) { ## Check the variance matrix of the predictions is compound symmetric isCompoundSymmetric(Var.vcov) }
asreml.obj
stored in an asrtests.object
to further iterations of the fitting process.In an effort to improve convergence, subject the fitted asreml.obj
stored
in an asrtests.object
to further iterations of the fitting process;
the model specification is not changed. While no change is made to the
test.summary
, the wald.tab
is updated.
## S3 method for class 'asrtests' iterate(asrtests.obj, denDF="numeric", trace = FALSE, ...)
## S3 method for class 'asrtests' iterate(asrtests.obj, denDF="numeric", trace = FALSE, ...)
asrtests.obj |
an |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
... |
further arguments passed to |
An object of S3-class asrtests
.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
as.asrtests
, asrtests.object
, newfit.asreml
## Not run: current.asrt <- iterate(current.asrt) ## End(Not run)
## Not run: current.asrt <- iterate(current.asrt) ## End(Not run)
Welham et al. (2015, Example 8.2) describe a three-factor factorial experiment to investigate whether ladybirds transfer fungus to live aphids on plants. The three factors are Host plant (beans, trefoil), infected Cadavers (5, 10, 20), and Ladybird (-, +). A generalized randomized complete-block design is used to assign the three factors to 2 Runs, each of which involves 36 containers with a plant and live aphids. The response to be analyzed is the logit of the proportion of live aphids that were infected.
The columns in the data frame are: ID, Run, Plant, Host, Ladybird, Cadavers, Live, Infected, logitP, Prop. The column ID numbers the observations. Live, Infected, logitP, Prop are response variables.
data(Ladybird.dat)
data(Ladybird.dat)
A data.frame containing 72 observations of 10 variables.
Chris Brien
Welham, S. J., Gezan, S. A., Clark, S. J., & Mead, A. (2015). Statistical Methods in Biology: Design and Analysis of Experiments and Regression. Boca Raton: Chapman and Hall/CRC..
alldiffs.object
.Effects the linear transformation of the predictions in the
supplied alldiffs.object
, the transformation being specified
by a matrix
or a formula
. The values of
the transformed values are stored in an alldiffs.object
.
A matrix
might be a contrast matrix
or
a matrix
of weights for the levels of a
factor
used to obtain the weighted average over
the levels of that factor
. A formula
gives
rise to a projection matrix
that linearly transforms
the predictions so that they conform to the model specified by the
formula
, this model being a submodel of that inherent
in the classify
.
If pairwise = TRUE
, all pairwise differences between the
linear transforms of the predictions
, their standard errors,
p-values and LSD statistics are computed as using
allDifferences.data.frame
.
This adds them to the alldiffs.object
as additional
list
components named differences
, sed
,
p.differences
and LSD
.
If a transformation has been applied (any one of
transform.power
is not one, scale
is not one and
offset
is nonzero), the backtransforms of the transformed
values and of the lower and upper limits of their error.intervals
are added to a data.frame
that is consistent with a
predictions.frame
. If transform.power
is other than
one, the standard.error
column of the data.frame
is set to NA
. This data.frame
is added to the
alldiffs.object
as a list
component called
backtransforms
.
The printing of the components produced is controlled by the
tables
argument. The order of plotting the levels of
one of the factors indexing the predictions can be modified
and is achieved using sort.alldiffs
.
## S3 method for class 'alldiffs' linTransform(alldiffs.obj, classify = NULL, term = NULL, linear.transformation = NULL, EGLS.linTransform = TRUE, Vmatrix = FALSE, error.intervals = "Confidence", avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", zero.tolerance = .Machine$double.eps ^ 0.5, response = NULL, response.title = NULL, x.num = NULL, x.fac = NULL, tables = "all", level.length = NA, pairwise = TRUE, alpha = 0.05, inestimable.rm = TRUE, ...)
## S3 method for class 'alldiffs' linTransform(alldiffs.obj, classify = NULL, term = NULL, linear.transformation = NULL, EGLS.linTransform = TRUE, Vmatrix = FALSE, error.intervals = "Confidence", avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", zero.tolerance = .Machine$double.eps ^ 0.5, response = NULL, response.title = NULL, x.num = NULL, x.fac = NULL, tables = "all", level.length = NA, pairwise = TRUE, alpha = 0.05, inestimable.rm = TRUE, ...)
alldiffs.obj |
An |
classify |
A |
term |
A |
linear.transformation |
A If a In either case, as well as the values of the linear combinations, their standard errors, pairwise differences and associated statistics are returned. |
EGLS.linTransform |
A |
Vmatrix |
A |
error.intervals |
A |
avsed.tolerance |
A
|
accuracy.threshold |
A |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
zero.tolerance |
A |
response |
A |
response.title |
A |
x.num |
A |
x.fac |
A |
tables |
A |
level.length |
The maximum number of characters from the levels of factors to use in the row and column labels of the tables of pairwise differences and their p-values and standard errors. |
pairwise |
A |
alpha |
A |
inestimable.rm |
A |
... |
further arguments passed to |
For a matrix , vector of
predictions
and variance matrix of the predictions
, the linear transformed predictions are given
by
with variance matrix
.
The last matrix is used to compute the variance of pairwise
differences between the transformed values.
If linear.transformation
is a matrix
, say, then the
linear-transformation
matrix
, , is just the supplied
matrix
.
If linear.transformation
is a formula
and EGLS.linTransform
is TRUE
, then a matrix is obtained that is the design matrix
for all of the terms in the
formula
. Using , the
linear-transformation
matrix
, , is formed as
.
On the other hand, for linear.transformation
a formula
and EGLS.linTransform
set to FALSE
, is
formed as the sum of the orthogonal projection matrices obtained using
pstructure.formula
from the package dae
; grandMean
is set to TRUE
and orthogonalize
to "eigenmethods"
.
A alldiffs.object
with the linear transformation of the predictions
and their standard errors and all pairwise differences between the linear
transforms of their predictions, their standard errors and p-values
and LSD statistics.
If the supplied alldiffs.object
contained a backtransforms
component, then the returned alldiffs.object
will contain
a backtransforms
component with the backtransformed linear transformation
of the predictions. The backtransformation will, after backtransforming for any
power transformation, subtract the offset
and then divide by the scale
.
If error.intervals
is not "none"
, then the
predictions
component and, if present, the
backtransforms
component will contain columns for the lower
and upper values of the limits for the interval. The names of these
columns will consist of three parts separated by full stops:
1) the first part will be lower
or upper
;
2) the second part will be one of Confidence
,
StandardError
or halfLeastSignificant
;
3) the third component will be limits
.
The name of the response
, the response.title
,
the term
, the classify
, tdf
, alpha
, sortFactor
and the sortOrder
will be set as attributes to the object.
Also, if error.intervals
is "halfLeastSignificant"
, then those of
LSDtype
, LSDby
and LSDstatistic
that are not NULL
will be added as attributes of the object and of the predictions frame
;
additionally, LSDvalues
will be added as attribute of the
predictions frame
, LSDvalues
being the LSD values used in
calculating the error.intervals
.
Chris Brien
linTransform
, predictPlus.asreml
, as.alldiffs
,
print.alldiffs
, sort.alldiffs
, subset.alldiffs
, allDifferences.data.frame
,
redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, pickLSDstatistics.alldiffs
,
predictPresent.asreml
, plotPredictions.data.frame
,
as.Date
, predict.asreml
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) #Get additive predictions directly using predictPlus diffs.sub <- predictPlus.asreml(classify = "Sources:Species", Vmatrix = TRUE, linear.transformation = ~ Sources + Species, asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * Species) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) SS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) SS.preds <- summary(SS.emm) den.df <- min(SS.preds$df, na.rm = TRUE) ## Modify SS.preds to be compatible with a predictions.frame SS.preds <- as.predictions.frame(SS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity SS.vcov <- vcov(SS.emm) SS.diffs <- allDifferences(predictions = SS.preds, classify = "Sources:Species", vcov = SS.vcov, tdf = den.df) validAlldiffs(SS.diffs) #Get additive predictions diffs.sub <- linTransform(SS.diffs, classify = "Sources:Species", linear.transformation = ~ Sources + Species, Vmatrix = TRUE, tables = "none") } ##Calculate contrasts from prediction obtained using asreml or lmerTest if (exists("diffs.sub")) { #Contrast matrix for differences between each species and non-planted for the last source L <- cbind(matrix(rep(0,7*32), nrow = 7, ncol = 32), diag(1, nrow = 7), matrix(rep(-1, 7), ncol = 1)) rownames(L) <- as.character(diffs.sub$predictions$Species[33:39]) diffs.L <- linTransform(diffs.sub, classify = "Sources:Species", linear.transformation = L, tables = "predictions") }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) #Get additive predictions directly using predictPlus diffs.sub <- predictPlus.asreml(classify = "Sources:Species", Vmatrix = TRUE, linear.transformation = ~ Sources + Species, asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * Species) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) SS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) SS.preds <- summary(SS.emm) den.df <- min(SS.preds$df, na.rm = TRUE) ## Modify SS.preds to be compatible with a predictions.frame SS.preds <- as.predictions.frame(SS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity SS.vcov <- vcov(SS.emm) SS.diffs <- allDifferences(predictions = SS.preds, classify = "Sources:Species", vcov = SS.vcov, tdf = den.df) validAlldiffs(SS.diffs) #Get additive predictions diffs.sub <- linTransform(SS.diffs, classify = "Sources:Species", linear.transformation = ~ Sources + Species, Vmatrix = TRUE, tables = "none") } ##Calculate contrasts from prediction obtained using asreml or lmerTest if (exists("diffs.sub")) { #Contrast matrix for differences between each species and non-planted for the last source L <- cbind(matrix(rep(0,7*32), nrow = 7, ncol = 32), diag(1, nrow = 7), matrix(rep(-1, 7), ncol = 1)) rownames(L) <- as.character(diffs.sub$predictions$Species[33:39]) diffs.L <- linTransform(diffs.sub, classify = "Sources:Species", linear.transformation = L, tables = "predictions") }
asreml
is loaded.Loads the specified version of asreml
, provided that it is not already loaded. If the version of asreml
is not the required version, then the loaded version is unloaded first.
loadASRemlVersion(version = 4, ...)
loadASRemlVersion(version = 4, ...)
version |
The |
... |
Other library/require arguments that are needed to load the specified |
A character, being all characters in the version of asreml that is loaded on exit from the function.
Chris Brien
## Not run: loadASRemlVersion(3, lib.loc = "D:\Analyses\R asreml3") ## End(Not run)
## Not run: loadASRemlVersion(3, lib.loc = "D:\Analyses\R asreml3") ## End(Not run)
A data.frame
that stores
Least Significant differences (LSDs) for predictions
for a fitted model.
A data.frame
that can be a component of an alldiffs.object
and that
contains LSD values and statistics to be used in determining the significance of the
pairwise differences. In particular, they are used in calculating
halfLeastSignificant
limits to be included in a predictions.frame
.
Exactly what an LSD.frame
contains is
determined by the following arguments to functions that return an
alldiffs.object
: LSDtype
, LSDby
, LSDstatistic
,
LSDaccuracy
and LSDsupplied
. The rownames
of the LSD.frame
indicate, for each of its rows, for what group of predictions the entries in the row were calculated,
this being controlled by the LSDtype
and LSDby
arguments. The values for
all of the LSD arguments are stored as attributes to the alldiffs.object
and the
predictions
and, if present backtransforms
, components of the
alldiffs.object
.
An LSD.frame
always has the eight columns c
, minimumLSD
, meanLSD
,
maximumLSD
, assignedLSD
, accuracyLSD
, falsePos
and
falseNeg
.
c
: This gives the number of pairwise comparison of predictions for the combinations of
the factor levels given by the row name. If the row name is overall
then it is for
all predictions.
minimumLSD, meanLSD, maximumLSD
: These are computed for either overall
,
factor.combinations
, per.prediction
or supplied
LSD values, as specified by the
LSDtype
argument. The meanLSD
is calculated using the square root of the mean of
the variances of set of pairwise differences appropriate to the specific LSDtype
argument.
For overall
, the mean, minimum and maximum of the LSDs for all pairwise
comparisons are computed.
If factor.combinations
was specified for
LSDtype
when the LSDs were being calculated, then the LSD.frame
contains a row for each combination of the values of the factors
and
numerics
specified by LSDby
. The values in a row are calculated
from the LSD values for the pairwise differences for each combination of the
factors
and numerics
values, unless there is only one
prediction for a combination, when notional LSDs are calculated that are based on the
standard error of the prediction multiplied by the square root of two.
For per.prediction
, the minimum, mean and maximum LSD, based, for each prediction,
on the LSD values for all pairwise differences involving that prediction are computed.
For supplied
, the LSD.frame
is set up based on the setting of LSDby
:
a single row with name overall
if LSDby
is NULL
or, if LSDby
is a vector of factor
and numeric
names, rows for each observed
combinations of the values of the named factors
and numerics
.
The LSDsupplied
argument is used to provide the values to be stored in the column
assignedLSD
.
assignedLSD
: The assignedLSD
column contains the values that are assigned for
use in calculating halfLeastSignificant
error.intervals
. Its contents are
determined by LSDstatistic
and LSDsupplied
arguments. The
LSDsupplied
argument allows the direct specification of values to be placed
in the assignedLSD
column of the LSD.frame
. The default is to use the
values in the meanLSD
column.
LSDaccuracy
: The LSDaccuracy
gives an indication of the proportion that the
correct LSD for a single predicted.value
might deviate from its assignedLSD
value.
The contents of the accuracyLSD
column is controlled by the LSDaccuracy
argument.
falsePos
and falseNeg
: These columns contain the number of false positives
and negatives if the assignedLSD
value(s) is(are) used to determine the significance
of the pairwise predictions differences. Each LSD value in the assignedLSD
column is used to determine the significance of pairwise differences that involve
predictions for the combination of values given by the row name for the LSD value.
See recalcLSD.alldiffs
for more information.
Chris Brien
recalcLSD.alldiffs
, redoErrorIntervals.alldiffs
,
predictPresent.asreml
, predictPlus.asreml
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", wald.tab = current.asrt$wald.tab, tables = "none") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL #Set up an alldiffs object, which includes overall LSDs Var.diffs <- allDifferences(predictions = Var.preds, classify = "Variety:Nitrogen", sed = Var.sed, vcov = Var.vcov, tdf = 45) } if (exists("Var.diffs")) { ## Use recalcLSD to get LSDs for within Variety differences Var.LSD.diffs <- recalcLSD(Var.diffs, LSDtype = "factor.combinations", LSDby = "Variety") print(Var.LSD.diffs$LSD) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", wald.tab = current.asrt$wald.tab, tables = "none") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL #Set up an alldiffs object, which includes overall LSDs Var.diffs <- allDifferences(predictions = Var.preds, classify = "Variety:Nitrogen", sed = Var.sed, vcov = Var.vcov, tdf = 45) } if (exists("Var.diffs")) { ## Use recalcLSD to get LSDs for within Variety differences Var.LSD.diffs <- recalcLSD(Var.diffs, LSDtype = "factor.combinations", LSDby = "Variety") print(Var.LSD.diffs$LSD) }
Prepares the fixed and random P-spline basis matrices, and associated
information, that are needed for fitting of Tensor Product P-splines (TPPS)
as described by Rodriguez-Alvarez et al. (2018). This function is called
internally by addSpatialModelOnIC.asrtests
,
addSpatialModelOnIC.asrtests
and
chooseSpatialModelOnIC.asrtests
when fitting TPPS
models
for local spatial variation. There are two methods available, controlled by
asreml.option
for creating and storing the basis functions.
This function is most likely to be called directly when mbf
has been used
in creating an asreml.object
and it is desired to use the object in a
session subsequent to the session in which the object was created.
## S3 method for class 'data.frame' makeTPPSplineMats(data, sections = NULL, row.covar, col.covar, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), rotateX = FALSE, theta = c(0,0), asreml.option = "grp", mbf.env = sys.frame(), ...)
## S3 method for class 'data.frame' makeTPPSplineMats(data, sections = NULL, row.covar, col.covar, nsegs = NULL, nestorder = c(1,1), degree = c(3,3), difforder = c(2,2), rotateX = FALSE, theta = c(0,0), asreml.option = "grp", mbf.env = sys.frame(), ...)
data |
An |
sections |
A single |
row.covar |
A single |
col.covar |
A single |
nsegs |
A pair of |
nestorder |
A |
degree |
A |
difforder |
A |
rotateX |
A |
theta |
A |
asreml.option |
A single |
mbf.env |
A |
... |
Further arguments passed to |
The objects are formed using the function tpsmmb
from the R
package TPSbits
authored by Sue Welham (2022). This function has been extended to allow for sections
(see below)
and to allow rotation of the penalty matrix for the linear component of the interaction terms in
TPPCS
models (for more information about rotation see Piepho, Boer and Williams, 2022).
Each combination of a row.covar
and a col.covar
does not have to specify a
single observation; for example, to fit a local spatial variation model to the main units
of a split-unit design, each combination would correspond to a main unit and all subunits
of the main unit would have the same combination.
The data for experiment can be divided sections
and the spline bases and associated
data will be produced for each section. If there is more than one sections
, then a
list
is returned that has a component for each section. The component for
a section contains:
A list
of length equal to the number of sections is produced. Each of
these components is a list
with 8 or 9 components. The component
named data.plus
, being the input data.frame
to which has been added
the columns required to fit the TPPS
model (the data.frame
stored
in the data
component holds only the covariates from data
).
List of length 8 or 9 (according to the asreml.option
).
data
= the input data frame augmented with structures required
to fit tensor product splines in asreml-R
. This data frame can be used
to fit the TPS model.
Added columns:
TP.col
, TP.row
= column and row coordinates
TP.CxR
= combined index for use with smooth x smooth term
TP.C.n
for n=1:diff.c = X parts of column spline for use
in random model (where diff.c is the order of column differencing)
TP.R.n
for n=1:diff.r = X parts of row spline for use in
random model (where diff.r is the order of row differencing)
TP.CR.n
for n=1:(diff.c*diff.r) = interaction between the
two X parts for use in fixed model. The first variate is
a constant term which should be omitted from the model when the constant
(1) is present. If all elements are included in the model then the
constant term should be omitted,eg.
y ~ -1 + TP.CR.1 + TP.CR.2 + TP.CR.3 + TP.CR.4 + other terms...
when asreml="grp"
or "sepgrp"
, the spline basis
functions are also added into the data frame. Column numbers for each
term are given in the grp
list structure.
mbflist
= list that can be used in call to asreml (so long as Z
matrix data frames extracted with right names, eg BcZ<stub>.df)
BcZ.df
= mbf data frame mapping onto smooth part of column
spline, last column (labelled TP.col
) gives column index
BrZ.df
= mbf data frame mapping onto smooth part of row spline,
last column (labelled TP.row
) gives row index
BcrZ.df
= mbf data frame mapping onto smooth x smooth term, last
column (labelled TP.CxR
) maps onto col x row combined index
dim
= list structure, holding dimension values relating to the
model:
"diff.c"
= order of differencing used in column dimension
"nbc"
= number of random basis functions in column dimension
"nbcn"
= number of nested random basis functions in column dimension
used in smooth x smooth term
"diff.r"
= order of differencing used in column dimension
"nbr"
= number of random basis functions in column dimension
"nbrn"
= number of nested random basis functions in column dimension
used in smooth x smooth term
trace
= list of trace values for ZGZ' for the random TPspline
terms, where Z is the design matrix and G is the known diagonal variance
matrix derived from eigenvalues. This can be used to rescale the spline
design matrix (or equivalently variance components).
grp
= list structure, only added for setting asreml="grp"
.
For asreml="grp"
, provides column indexes for each of the 5
random components of the 2D splines in data.plus
. Dimensions of
the components can be derived from the values in the dim
item.
data.plus
= the input data.frame
to which has been
added the columns required to fit tensor product splines in asreml-R
.
This data.frame
can be used to fit the TPS model.
FOr multiple sections
, this data.frame
will occur
in the component for each section. If asreml.option
is set to
mbf
, then this component will have the attribute
mbf.env
that specifies the environment to which the data.frames
containing the spline bases have been assigned.
Chris Brien
Piepho, H-P, Boer, M. P. & Williams, E. R. (2022) Two-dimensional P-spline smoothing for spatial analysis of plant breeding trials. Biometrical Journal, 64, 835-857.)
Rodriguez-Alvarez, M. X., Boer, M. P., van Eeuwijk, F. A., & Eilers, P. H. C. (2018). Correcting for spatial heterogeneity in plant breeding experiments with P-splines. Spatial Statistics, 23, 52-71.
Welham, S. J. (2022) TPSbits
: Creates Structures to Enable Fitting and Examination of 2D Tensor-Product Splines using ASReml-R. Version 1.0.0 https://mmade.org/tpsbits/
addSpatialModel.asrtests
, addSpatialModelOnIC.asrtests
, chooseSpatialModelOnIC.asrtests
, tpsmmb
from TPSbits
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Set up the matrices tps.XZmat <- makeTPPSplineMats(wheat.dat, row.covar = "cRow", col.covar = "cColumn") ## End(Not run)
## Not run: data(Wheat.dat) #Add row and column covariates Wheat.dat <- within(Wheat.dat, { cColumn <- dae::as.numfac(Column) cColumn <- cColumn - mean(unique(cColumn)) cRow <- dae::as.numfac(Row) cRow <- cRow - mean(unique(cRow)) }) #Set up the matrices tps.XZmat <- makeTPPSplineMats(wheat.dat, row.covar = "cRow", col.covar = "cColumn") ## End(Not run)
asreml
model with changed arguments by extracting, modifying
and evaluating its call
- an alternate to update.asreml.Extracts the call from the asreml.obj
and evaluates that call,
replacing supplied asreml
arguments with changed values.
If update
is TRUE
and set.terms
is NULL
,
the call is evaluated using the variance parameter estimates
from the call
stored in asreml.obj
; if some
variance terms in the newly fitted model are singular (S) or
bound (B), a refit of the model will be tried in which the
variance parameter estimates in asreml.obj
are not used
and will become the fitted model if its boundary terms are a
subset of those in the fitted model stored in asreml.obj
.
If update
is FALSE
or set.terms
is not
NULL
, the previous values of the variance parameters
are not used as initial values for fitting the new model;
G.param
and R.param
are set to NULL
or
to values as specified for set.terms
. The ...
argument can be used to pass G.param
and/or
R.param
, provided update
is FALSE
and
set.terms
is NULL
.
## S3 method for class 'asreml' newfit(asreml.obj, fixed., random., sparse., residual., rcov., update = TRUE, trace = FALSE, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, keep.order = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'asreml' newfit(asreml.obj, fixed., random., sparse., residual., rcov., update = TRUE, trace = FALSE, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, keep.order = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
asreml.obj |
A valid |
fixed. |
A character or formula specifying changes to the fixed
formula. This is a two-sided formula
where "." is substituted for existing components in the
fixed component of |
random. |
A character or formula specifying changes to the random
formula. This is a one-sided formula
where "." is substituted for existing components in the
random component of |
sparse. |
A character or formula specifying changes to the sparse
formula. This is a one-sided formula
where "." is substituted for existing components in the
sparse component of |
residual. |
A character or formula specifying changes to the error
formula, used when version 4 or later of ASReml-R is loaded.
This is a one-sided formula
where "." is substituted for existing components in the
residual component of |
rcov. |
A character or formula specifying changes to the error
formula, used when version 3 of ASReml-R is loaded.
This is a one-sided formula
where "." is substituted for existing components in the
residual component of |
update |
A logical indicating whether to use the variance parameter
estimates in fitting a new model using |
trace |
A |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
keep.order |
A logical value indicating whether the terms should keep
their positions. If |
set.terms |
A character vector specifying the terms that are to have
bounds and/or initial values set prior to fitting.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
additional arguments to the call, or arguments with changed values. |
An asreml
object.
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
convAsremlobj.asreml
, update.asreml
, setvarianceterms.call
## Not run: m2.asreml <- newfit(m1.asreml, random. = "~ . - Blocks:Plots", maxiter=75) ## End(Not run)
## Not run: m2.asreml <- newfit(m1.asreml, random. = "~ . - Blocks:Plots", maxiter=75) ## End(Not run)
Recodes the unique values of a variate using the value in position
i of the new.values
vector to replace the ith
sorted unique
values of x. The new levels do
not have to be unique.
num.recode(x, new.values)
num.recode(x, new.values)
x |
The |
new.values |
A |
A vector
.
Chris Brien
dae::fac.recast
.
## set up a factor with labels x <- rep(c(-42, -14, 14, 42), 4) ## recode x b <- num.recode(x, c(0, 28, 56, 84))
## set up a factor with labels x <- rep(c(-42, -14, 14, 42), 4) ## recode x b <- num.recode(x, c(0, 28, 56, 84))
Yates (1937) describes a split-plot experiment that investigates the effects of three varieties of oats and four levels of Nitrogen fertilizer. The varieties are assigned to the main plots using a randomized complete block design with 6 blocks and the nitrogen levels are randomly assigned to the subplots in each main plot.
The columns in the data frame are: Blocks, Wplots, Subplots, Variety, Nitrogen, xNitrogen, Yield. The column xNitrogen is a numeric version of the factor Nitrogen. The response variable is Yield.
data(Oats.dat)
data(Oats.dat)
A data.frame containing 72 observations of 7 variables.
Chris Brien
Yates, F. (1937). The Design and Analysis of Factorial Experiments. Imperial Bureau of Soil Science, Technical Communication, 35, 1-95.
alldiffs.object
.Predictions of differences and their error intervals are formed for two levels of
a factor, the pairs.factor
. For each pair of a level of the
pairs.factor
in numerator.levels
with a level in
denominator.levels
, an alldiffs.object
is formed that
contains the differences between predictions with this pair of levels for all of
the combinations of the levels of the other factors in the classify
of the
alldiffs.object
. These prediction differences are obtained using
linTransform
by forming a suitable contrast matrix to specify
the linear.transformation
. This function has the advantage that the
factors indexing the differences are included in the components of the
alldiffs.object
s.
If pairwise = TRUE
, all pairwise differences between the
linear transforms of the predictions
, their standard errors,
p-values and LSD statistics are computed as using
allDifferences.data.frame
.
This adds them to the alldiffs.object
as additional
list
components named differences
, sed
,
p.differences
and LSD
.
The printing of the components produced is controlled by the
tables
argument. The order of plotting the levels of
one of the factors indexing the predictions can be modified
and is achieved using sort.alldiffs
.
## S3 method for class 'alldiffs' pairdiffsTransform(alldiffs.obj, pairs.factor, first.levels, second.levels, Vmatrix = FALSE, error.intervals = "Confidence", avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", response = NULL, response.title = NULL, tables = "all", pairwise = TRUE, alpha = 0.05, ...)
## S3 method for class 'alldiffs' pairdiffsTransform(alldiffs.obj, pairs.factor, first.levels, second.levels, Vmatrix = FALSE, error.intervals = "Confidence", avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", response = NULL, response.title = NULL, tables = "all", pairwise = TRUE, alpha = 0.05, ...)
alldiffs.obj |
An |
pairs.factor |
A |
first.levels |
A |
second.levels |
A |
Vmatrix |
A |
error.intervals |
A |
avsed.tolerance |
A
|
accuracy.threshold |
A |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
response |
A |
response.title |
A |
tables |
A |
pairwise |
A |
alpha |
A |
... |
further arguments passed to |
A list
of alldiffs.object
s with a component for each combination
of a first.levels
with a second.levels
. The name of a component will be
a level from first.levels
combined with a level from second.levels
,
separated by a comma. If the predictions
in the supplied alldiffs.object
are based on a response
that was transformed, each alldiffs.object
in the list
will include a backtransforms
component that contains
a column labelled backtransformed.predictions
, along with the backtransforms of
the nominated error.intervals
. The predictions
and backtransforms
components in an alldiffs.object
will be indexed by the variables in the
classify
of alldiffs.obj
, except that the pairs.factor
is omitted.
If the transformation was the logarithmic transformation, these
backtransformed.predictions
are predicted ratios of the untransformed response
.
If sortFactor
attribute is set and is not the
ratio.factor
, the predictions and, if present, their backtransforms will be sorted using
the sortOrder
attribute of the alldiffs.object
,
and both sortFactor
and sortOrder
will be set as attributes to the object.
Chris Brien
linTransform
, ratioTransform
, predictPlus.asreml
,
as.alldiffs
, print.alldiffs
, sort.alldiffs
, subset.alldiffs
,
allDifferences.data.frame
, redoErrorIntervals.alldiffs
,
recalcLSD.alldiffs
, pickLSDstatistics.alldiffs
, predictPresent.asreml
,
plotPredictions.data.frame
, as.Date
, predict.asreml
#### Form the differences for log(RGR) for Salinity load(system.file("extdata", "testDiffs.rda", package = "asremlPlus", mustWork = TRUE)) #### For the ratios for Cl per WU Temperature - use backtransforms of log-predictions Preds.ratio.ClUp <- pairdiffsTransform(diffs.ClUp, pairs.factor = "Temperature", first.levels = "Hot", second.levels = "Cool", error.intervals = "halfLeast", tables = "backtransforms") #Backtransforms are ratios #### Form the differences for Nitrogen compared to no Nitrogen data("Oats.dat") ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) wald.tab <- current.asrt$wald.tab Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", pairwise = TRUE, Vmatrix = TRUE, error.intervals = "halfLeast", LSDtype = "factor", LSDby = "Variety", wald.tab = wald.tab) ## End(Not run) ## Use lme4 and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) ## Set up a wald.tab int <- as.data.frame(rbind(rep(NA,4))) rownames(int) <- "(Intercept)" wald.tab <- anova(m1.lmer, ddf = "Kenward", type = 1)[,3:6] names(wald.tab) <- names(int) <- c("Df", "denDF", "F.inc", "Pr") wald.tab <- rbind(int, wald.tab) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] #Create alldiffs object Var.diffs <- as.alldiffs(predictions = Var.preds, sed = Var.sed, vcov = Var.vcov, classify = "Nitrogen:Variety", response = "Yield", tdf = den.df) } if (exists("Var.diffs")) Preds.diffs.OatsN <- pairdiffsTransform(alldiffs.obj = Var.diffs, pairs.factor = "Nitrogen", first.levels = c("0.2","0.4","0.6"), second.levels = "0", error.intervals = "halfLeast", tables = "none")
#### Form the differences for log(RGR) for Salinity load(system.file("extdata", "testDiffs.rda", package = "asremlPlus", mustWork = TRUE)) #### For the ratios for Cl per WU Temperature - use backtransforms of log-predictions Preds.ratio.ClUp <- pairdiffsTransform(diffs.ClUp, pairs.factor = "Temperature", first.levels = "Hot", second.levels = "Cool", error.intervals = "halfLeast", tables = "backtransforms") #Backtransforms are ratios #### Form the differences for Nitrogen compared to no Nitrogen data("Oats.dat") ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) wald.tab <- current.asrt$wald.tab Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", pairwise = TRUE, Vmatrix = TRUE, error.intervals = "halfLeast", LSDtype = "factor", LSDby = "Variety", wald.tab = wald.tab) ## End(Not run) ## Use lme4 and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) ## Set up a wald.tab int <- as.data.frame(rbind(rep(NA,4))) rownames(int) <- "(Intercept)" wald.tab <- anova(m1.lmer, ddf = "Kenward", type = 1)[,3:6] names(wald.tab) <- names(int) <- c("Df", "denDF", "F.inc", "Pr") wald.tab <- rbind(int, wald.tab) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] #Create alldiffs object Var.diffs <- as.alldiffs(predictions = Var.preds, sed = Var.sed, vcov = Var.vcov, classify = "Nitrogen:Variety", response = "Yield", tdf = den.df) } if (exists("Var.diffs")) Preds.diffs.OatsN <- pairdiffsTransform(alldiffs.obj = Var.diffs, pairs.factor = "Nitrogen", first.levels = c("0.2","0.4","0.6"), second.levels = "0", error.intervals = "halfLeast", tables = "none")
Permutes the rows and columns of a square matrix.
permute.square(x, permutation)
permute.square(x, permutation)
x |
A square matrix. |
permutation |
A vector specifying the new order of rows and columns. |
A square matrix
.
Chris Brien
terms.marginality <- matrix(c(1,0,0,0,0, 0,1,0,0,0, 0,1,1,0,0, 1,1,1,1,0, 1,1,1,1,1), nrow=5) permtn <- c(1,3,2,4,5) terms.marginality <- permute.square(terms.marginality, permtn)
terms.marginality <- matrix(c(1,0,0,0,0, 0,1,0,0,0, 0,1,1,0,0, 1,1,1,1,0, 1,1,1,1,1), nrow=5) permtn <- c(1,3,2,4,5) terms.marginality <- permute.square(terms.marginality, permtn)
Permutes a square matrix until all the lower triangular elements are zero.
permute.to.zero.lowertri(x)
permute.to.zero.lowertri(x)
x |
A square matrix of order n with at least n*(n-1)/2 zero elements. |
A square matrix
.
Chris Brien
terms.marginality <- matrix(c(1,0,0,0,0, 0,1,0,0,0, 0,1,1,0,0, 1,1,1,1,0, 1,1,1,1,1), nrow=5) terms.marginality <- permute.to.zero.lowertri(terms.marginality)
terms.marginality <- matrix(c(1,0,0,0,0, 0,1,0,0,0, 0,1,1,0,0, 1,1,1,1,0, 1,1,1,1,1), nrow=5) terms.marginality <- permute.to.zero.lowertri(terms.marginality)
Given an alldiffs.object
with an sed
component,
exploreLSDs.alldiffs
is used to calculate the LSD values for each set of
prediction comparisons specified by LSDtype
and LSDby
using each of the
statistics minimum
, q10
, q25
, mean
, median
, q75
,
q90
and maximum
. Then the numbers of false positives and
false negatives resulting from employing each of the calculated LSDs is obtained. For
each set of comparisons, the LSD value(s) with the lowest number of false positives are
identified and, from these, the smallest value with the lowest number of false negatives.
That is, a conservative approach is taken to picking LSD values by putting the priority on
avoiding false positives. Before using the LSDstatistics that this function suggests, the number
of false positives and negatives generated by them should be checked. For example, it may be
that there are too many false negatives and a better balance between the numbers of false
positives and negatives can be identified using exploreLSDs.alldiffs
,
## S3 method for class 'alldiffs' pickLSDstatistics(alldiffs.obj, LSDtype = "overall", LSDby = NULL, alpha = 0.05, digits = 3, false.pos.wt = NULL, retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, ...)
## S3 method for class 'alldiffs' pickLSDstatistics(alldiffs.obj, LSDtype = "overall", LSDby = NULL, alpha = 0.05, digits = 3, false.pos.wt = NULL, retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, ...)
alldiffs.obj |
An |
LSDtype |
A See |
LSDby |
A |
alpha |
A |
digits |
A |
false.pos.wt |
When it is not If, amongst the LSD statistices, the least number of false negatives that occurs is m,
then for a particular statistic with p the number of false positives, n the number
of false negatives and w the value of |
retain.zeroLSDs |
A |
zero.tolerance |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
A character
of length one for LSDby
set to overall
or of length equal to the
number of observed combinations of the values of the factors
and numerics
in LSDby
. Each element of the returned character
is one of minimum
,
q10
, q25
, mean
, median
, q75
, q90
or maximum
,
reflecting the value(s) of the LSD from amongst those calculated that minimizes the number of false
positives; if there is more than one such value, then the element will be correspond to the value
of the LSD from amongst those with the minimum number of false positives that minimizes
the number of false negatives.
Chris Brien
asremlPlus-package
, exploreLSDs.alldiffs
plotLSDs.data.frame
,
plotLSDs.alldiffs
, plotLSDerrors.alldiffs
, plotLSDerrors.data.frame
, recalcLSD.alldiffs
, redoErrorIntervals.alldiffs
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Pick the LSD values for predictions obtained using asreml or lmerTest LSDstat <- pickLSDstatistics(TS.diffs) TS.diffs <- redoErrorIntervals(TS.diffs, LSDstatistic = LSDstat) TS.diffs$LSD LSDstat <- pickLSDstatistics(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") TS.diffs <- redoErrorIntervals(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources", LSDstatistic = LSDstat) TS.diffs$LSD }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Pick the LSD values for predictions obtained using asreml or lmerTest LSDstat <- pickLSDstatistics(TS.diffs) TS.diffs <- redoErrorIntervals(TS.diffs, LSDstatistic = LSDstat) TS.diffs$LSD LSDstat <- pickLSDstatistics(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") TS.diffs <- redoErrorIntervals(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources", LSDstatistic = LSDstat) TS.diffs$LSD }
Produces a plot of the errors that occur in using the computed LSD values for
pairwise differences predictions by comparing the result obtained from using the
LSDs stored in the assignedLSD
column of the LSD
component of
the alldiffs.object
with those computed from the sed
component using the t
-value for the df
stored in the tdf
attribute of the alldiffs.object
.
The sed
component is generally a matrix whose rows and columns
are labelled by the levels of one or more factors, the set of labels being
the same for rows and columns. The sections
argument allows multiple
plots to be produced, one for each combination of the levels of the factors
listed in sections
. Otherwise, a single plot is produced for all
observed combinations of the levels of the factors in the classify
attribute for the alldiffs.object
. The plots are produced using
plotLSDerrors.data.frame
. The order of plotting the levels of
one of the factors indexing the predictions can be modified using
sort.alldiffs
.
plotLSDerrors(object, ...) ## S3 method for class 'alldiffs' plotLSDerrors(object, alpha = 0.05, useIntervals = FALSE, sections = NULL, gridspacing = 0, factors.per.grid = 0, triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = c("white","blue","red","grey"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
plotLSDerrors(object, ...) ## S3 method for class 'alldiffs' plotLSDerrors(object, alpha = 0.05, useIntervals = FALSE, sections = NULL, gridspacing = 0, factors.per.grid = 0, triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = c("white","blue","red","grey"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
object |
An |
alpha |
A |
useIntervals |
A |
sections |
A |
gridspacing |
A |
factors.per.grid |
A |
triangles |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
sep |
A |
colours |
A vector of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
... |
Provision for passsing arguments to functions called internally - not used at present. |
A list
with components named LSDresults
and plots
.
The LSDresults
component contains the data.frame
with the columns Rows
,
Columns
, LSDresults
, sections1
and sections2
. This data.frame
is formed using the LSD
and sed
components of object
and is used
by plotLSDerrors.data.frame
in producng the plots. The plots
component contains a list of ggplot
objects, one for each plot produced.
Multiple plots are stored in the plots
component if the sections
argument
is set and the plots are are named for the levels combinations of the sections.
Chris Brien
plotLSDerrors.alldiffs
, plotLSDerrors.data.frame
,
plotLSDs.data.frame
, exploreLSDs
, sort.alldiffs
, subset.alldiffs
,
ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotLSDerrors(TS.diffs, gridspacing = rep(c(3,4), c(4,2))) plotLSDerrors(TS.diffs, sections = "Sources", axis.labels = TRUE) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotLSDerrors(TS.diffs, gridspacing = rep(c(3,4), c(4,2))) plotLSDerrors(TS.diffs, sections = "Sources", axis.labels = TRUE) }
Produces a plot of the errors that have been supplied in a data.frame
.
The data.frame
includes two factors whose levels specify,
for each LSD result, which combinations of factor levels are being compared. The function
plotLSDerrors.alldiffs
produces such data.frame
s.
## S3 method for class 'data.frame' plotLSDerrors(object, LSDresults = "LSDresults", x, y, alpha = 0.05, triangles = "both", gridspacing = 0, title = NULL, axis.labels = NULL, axis.text.size = 12, colours = c("white","blue","red","grey"), ggplotFuncs = NULL, printPlot = TRUE, ...)
## S3 method for class 'data.frame' plotLSDerrors(object, LSDresults = "LSDresults", x, y, alpha = 0.05, triangles = "both", gridspacing = 0, title = NULL, axis.labels = NULL, axis.text.size = 12, colours = c("white","blue","red","grey"), ggplotFuncs = NULL, printPlot = TRUE, ...)
object |
A |
LSDresults |
A |
x |
A |
y |
A |
alpha |
A |
triangles |
A |
gridspacing |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
colours |
A vector of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
An object of class "ggplot
", which can be plotted using print
or otherwise manipulated.
Chris Brien
plotLSDs.data.frame
, plotLSDs.alldiffs
,
exploreLSDs
, ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { LSDresults <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(LSDresults) <- c("Rows","Columns","LSDresults") plotLSDerrors(LSDresults, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2))) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { LSDresults <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(LSDresults) <- c("Rows","Columns","LSDresults") plotLSDerrors(LSDresults, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2))) }
Produces a heat-map plot of the computed LSD values for pairwise differences between
predictions by multiplying the values stored in the sed
component of an
alldiffs
object by the t
-value for the df
stored in the
tdf
attribute of the object.
This component is generally a matrix whose rows and columns
are labelled by the levels of one or more factors, the set of labels being
the same for rows and columns. The sections
argument allows multiple
plots to be produced, one for each combination of the levels of the factors
listed in sections
. Otherwise, a single plot is produced for all
observed combinations of the levels of the factors in the classify
attribute for the alldiffs.object
. The plots are produced using
plotLSDs.data.frame
. The order of plotting the levels of
one of the factors indexing the predictions can be modified using
sort.alldiffs
.
plotLSDs(object, ...) ## S3 method for class 'alldiffs' plotLSDs(object, alpha = 0.05, sections = NULL, gridspacing = 0, factors.per.grid = 0, triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
plotLSDs(object, ...) ## S3 method for class 'alldiffs' plotLSDs(object, alpha = 0.05, sections = NULL, gridspacing = 0, factors.per.grid = 0, triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
object |
An |
alpha |
A |
sections |
A |
gridspacing |
A |
factors.per.grid |
A |
triangles |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
sep |
A |
colours |
A vector of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
... |
Provision for passsing arguments to functions called internally - not used at present. |
A list
with components named LSDs
and plots
.
The LSDs
component contains the data.frame
with the columns Rows
,
Columns
, LSDs
, sections1
and sections2
. This data.frame
is
formed using the sed
component of object
and is used by
plotLSDs.data.frame
in producng the plot. The plots
component contains a list of ggplot
objects, one for each plot produced.
Multiple plots are stored in the plots
component if the sections
argument
is set and the plots are are named for the levels combinations of the sections.
Chris Brien
plotLSDs.data.frame
, exploreLSDs
, sort.alldiffs
, subset.alldiffs
,
ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotLSDs(TS.diffs, gridspacing = rep(c(3,4), c(4,2))) plotLSDs(TS.diffs, sections = "Sources", axis.labels = TRUE) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotLSDs(TS.diffs, gridspacing = rep(c(3,4), c(4,2))) plotLSDs(TS.diffs, sections = "Sources", axis.labels = TRUE) }
Produces a heat-map plot of the computed LSD values for pairwise differences between
predictions that are stored in a data.frame
. The data.frame
includes
two factors whose levels specify, for each LSD value, which combinations of factor
levels are being compared.
## S3 method for class 'data.frame' plotLSDs(object, LSD = "LSDs", x, y, alpha = 0.05, triangles = "both", gridspacing = 0, title = NULL, axis.labels = NULL, axis.text.size = 12, colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, ...)
## S3 method for class 'data.frame' plotLSDs(object, LSD = "LSDs", x, y, alpha = 0.05, triangles = "both", gridspacing = 0, title = NULL, axis.labels = NULL, axis.text.size = 12, colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, ...)
object |
A |
LSD |
A |
x |
A |
y |
A |
alpha |
A |
triangles |
A |
gridspacing |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
colours |
A vector of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
An object of class "ggplot
", which can be plotted using print
or otherwise manipulated.
Chris Brien
plotLSDs.alldiffs
, plotLSDerrors.alldiffs
, plotLSDerrors.data.frame
, exploreLSDs
, ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { LSD <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(LSD) <- c("Rows","Columns","LSDs") plotLSDs(LSD, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2))) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot LSD values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { LSD <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(LSD) <- c("Rows","Columns","LSDs") plotLSDs(LSD, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2))) }
This function plots the predictions y
that are based on
classify
and stored in the data.frame
data
. The package
ggplot2
is used to produce the plots. Line plots are
produced when variables involving x.num
or x.fac
are
involved in classify
for the predictions; otherwise, bar
charts are produced. Further, for line charts, the argument panels
determines whether a single plot or multiple plots in a single window
are produced; for bar charts, the argument panels
is
ignored.
## S3 method for class 'data.frame' plotPredictions(data, classify, y, x.num = NULL, x.fac = NULL, nonx.fac.order = NULL, colour.scheme = "colour", panels = "multiple", graphics.device = NULL, error.intervals = "Confidence", interval.annotate = TRUE, titles = NULL, y.title = NULL, filestem = NULL, printPlot = TRUE, ggplotFuncs = NULL, ...)
## S3 method for class 'data.frame' plotPredictions(data, classify, y, x.num = NULL, x.fac = NULL, nonx.fac.order = NULL, colour.scheme = "colour", panels = "multiple", graphics.device = NULL, error.intervals = "Confidence", interval.annotate = TRUE, titles = NULL, y.title = NULL, filestem = NULL, printPlot = TRUE, ggplotFuncs = NULL, ...)
data |
A If |
classify |
A character string giving the combinations of the independent
variables on which the predictions are based. It is
an interaction type term formed from the independent variables,
that is, separating the variable names with the |
y |
A character string giving the name of the variable that is to be plotted on the Y axis. |
x.num |
A |
x.fac |
A character string giving the name of the factor that corresponds to
|
nonx.fac.order |
A character vector giving the order in which factors other
than |
colour.scheme |
A character string specifying the colour scheme for the plots.
The default is |
panels |
Possible values are |
graphics.device |
A |
error.intervals |
A character string indicating the type of error interval, if any,
to plot in order to indicate uncertainty in the results.
Possible values are |
interval.annotate |
A |
titles |
A |
y.title |
The title to be displayed on the y axis of any plot. |
filestem |
A character sting giving the beginning of the name of the file in which to
save the plot. If |
printPlot |
A |
ggplotFuncs |
A |
... |
further arguments passed to |
An object of class ggplot
, which can be plotted using print
or otherwise manipulated.
Chris Brien
allDifferences.data.frame
, predictPresent.asreml
,
redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, ggplot
, Devices
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:xDay + Species:xDay + Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #### Get the observed combinations of the factors and variables in classify class.facs <- c("Species","Date","xDay") levs <- as.data.frame(table(WaterRunoff.dat[class.facs])) levs <- as.list(levs[levs$Freq != 0, class.facs]) levs$xDay <- as.numfac(levs$xDay) predictions <- predict(current.asr, classify="Species:Date:xDay", parallel = TRUE, levels = levs, present = c("Type","Species","Sources")) #### for asreml-R3 predictions <- predictions$predictions$pvals predictions <- predictions[predictions$est.status == "Estimable",] #### for asreml-R4 predictions <- predictions$pvals predictions <- predictions[predictions$status == "Estimable",] #### end plotPredictions(classify="Species:Date:xDay", y = "predicted.value", data = predictions, x.num = "xDay", x.fac = "Date", x.title = "Days since first observation", y.title = "Predicted log(Turbidity)", present = c("Type","Species","Sources"), error.intervals = "none", ggplotFuncs = list(ggtitle("Transformed turbidity over time"))) diffs <- predictPlus(classify="Species:Date:xDay", present=c("Type","Species","Sources"), asreml.obj = current.asr, tables = "none", x.num = "xDay", x.fac = "Date", parallel = TRUE, levels = levs, x.plot.values=c(0,28,56,84), wald.tab = current.asrt$wald.tab) x.title <- "Days since first observation" names(x.title) <- "xDay" plotPredictions(classify="Species:Date:xDay", y = "predicted.value", data = diffs$predictions, x.num = "xDay", x.fac = "Date", titles = x.title, y.title = "Predicted log(Turbidity)") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { data(Ladybird.dat) m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Plot the predictions plotPredictions(HCL.preds, y = "predicted.value", "Host:Cadavers:Ladybird") }
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:xDay + Species:xDay + Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #### Get the observed combinations of the factors and variables in classify class.facs <- c("Species","Date","xDay") levs <- as.data.frame(table(WaterRunoff.dat[class.facs])) levs <- as.list(levs[levs$Freq != 0, class.facs]) levs$xDay <- as.numfac(levs$xDay) predictions <- predict(current.asr, classify="Species:Date:xDay", parallel = TRUE, levels = levs, present = c("Type","Species","Sources")) #### for asreml-R3 predictions <- predictions$predictions$pvals predictions <- predictions[predictions$est.status == "Estimable",] #### for asreml-R4 predictions <- predictions$pvals predictions <- predictions[predictions$status == "Estimable",] #### end plotPredictions(classify="Species:Date:xDay", y = "predicted.value", data = predictions, x.num = "xDay", x.fac = "Date", x.title = "Days since first observation", y.title = "Predicted log(Turbidity)", present = c("Type","Species","Sources"), error.intervals = "none", ggplotFuncs = list(ggtitle("Transformed turbidity over time"))) diffs <- predictPlus(classify="Species:Date:xDay", present=c("Type","Species","Sources"), asreml.obj = current.asr, tables = "none", x.num = "xDay", x.fac = "Date", parallel = TRUE, levels = levs, x.plot.values=c(0,28,56,84), wald.tab = current.asrt$wald.tab) x.title <- "Days since first observation" names(x.title) <- "xDay" plotPredictions(classify="Species:Date:xDay", y = "predicted.value", data = diffs$predictions, x.num = "xDay", x.fac = "Date", titles = x.title, y.title = "Predicted log(Turbidity)") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { data(Ladybird.dat) m1.lmer <- lmerTest::lmer(logitP ~ Host*Cadavers*Ladybird + (1|Run), data=Ladybird.dat) HCL.emm <- emmeans::emmeans(m1.lmer, specs = ~ Host:Cadavers:Ladybird) HCL.preds <- summary(HCL.emm) den.df <- min(HCL.preds$df) ## Modify HCL.preds to be compatible with a predictions.frame HCL.preds <- as.predictions.frame(HCL.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Plot the predictions plotPredictions(HCL.preds, y = "predicted.value", "Host:Cadavers:Ladybird") }
Produces a heat-map plot of the p-values for pairwise differences between
predictions that is stored in the p.differences
component of an
all.diffs
object. This is generally a matrix whose rows and columns
are labelled by the levels of one or more factors, the set of labels being
the same for rows and columns. The sections
argument allows multiple
plots to be produced, one for each combination of the levels of the factors
listed in sections
. Otherwise, a single plot is produced for all
observed combinations of the levels of the factors in the classify
for the alldiffs.object
. The plots are produced using
plotPvalues.data.frame
. The order of plotting the levels of
one of the factors indexing the predictions can be modified using
sort.alldiffs
.
plotPvalues(object, ...) ## S3 method for class 'alldiffs' plotPvalues(object, sections = NULL, gridspacing = 0, factors.per.grid = 0, show.sig = FALSE, alpha = 0.10, sig.size = 3, sig.colour = "black", sig.face = "plain", sig.family = "", triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
plotPvalues(object, ...) ## S3 method for class 'alldiffs' plotPvalues(object, sections = NULL, gridspacing = 0, factors.per.grid = 0, show.sig = FALSE, alpha = 0.10, sig.size = 3, sig.colour = "black", sig.face = "plain", sig.family = "", triangles = "both", title = NULL, axis.labels = TRUE, axis.text.size = 12, sep=",", colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
object |
An |
sections |
A |
gridspacing |
A |
factors.per.grid |
A |
show.sig |
A |
alpha |
A |
sig.size |
A |
sig.colour |
A |
sig.face |
A |
sig.family |
A |
triangles |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
sep |
A |
colours |
A vector of of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
... |
Provision for passsing arguments to functions called internally - not used at present. |
A list
with components named pvalues
and plots
.
The pvalues
component contains the data.frame
with the columns Rows
,
Columns
, p
, sections1
and sections2
. This data.frame
is
formed using the sed
component of object
and is used by
plotPvalues.data.frame
in producng the plot. The plots
component contains a list of ggplot
objects, one for each plot produced.
Multiple plots are stored in the plots
component if the sections
argument
is set and the plots are are named for the levels combinations of the sections.
Chris Brien
plotPvalues.data.frame
, allDifferences.data.frame
,
sort.alldiffs
, subset.alldiffs
, ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotPvalues(TS.diffs, gridspacing = rep(c(3,4), c(4,2)), show.sig = TRUE) plotPvalues(TS.diffs, sections = "Sources", show.sig = TRUE, axis.labels = TRUE) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18" & Benches != "3") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { plotPvalues(TS.diffs, gridspacing = rep(c(3,4), c(4,2)), show.sig = TRUE) plotPvalues(TS.diffs, sections = "Sources", show.sig = TRUE, axis.labels = TRUE) }
Produces a heat-map plot of the p-values for pairwise differences between
predictions that is in a data.frame
. The data.frame
includes
two factors whose levels specify, for each p-value, which factor levels are
being compared.
## S3 method for class 'data.frame' plotPvalues(object, p = "p", x, y, gridspacing = 0, show.sig = FALSE, alpha = 0.10, sig.size = 3, sig.colour = "black", sig.face = "plain", sig.family = "", triangles = "both", title = NULL, axis.labels = NULL, axis.text.size = 12, colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, ...)
## S3 method for class 'data.frame' plotPvalues(object, p = "p", x, y, gridspacing = 0, show.sig = FALSE, alpha = 0.10, sig.size = 3, sig.colour = "black", sig.face = "plain", sig.family = "", triangles = "both", title = NULL, axis.labels = NULL, axis.text.size = 12, colours = RColorBrewer::brewer.pal(3, "Set2"), ggplotFuncs = NULL, printPlot = TRUE, ...)
object |
A |
p |
A |
x |
A |
y |
A |
gridspacing |
A |
show.sig |
A |
alpha |
A |
sig.size |
A |
sig.colour |
A |
sig.face |
A |
sig.family |
A |
triangles |
A |
title |
A |
axis.labels |
A |
axis.text.size |
A |
colours |
A vector of of colours to be passed to the |
ggplotFuncs |
A |
printPlot |
A |
... |
Provision for passsing arguments to functions called internally - not used at present. |
An object of class "ggplot
", which can be plotted using print
or otherwise manipulated.
Chris Brien
plotPvalues.alldiffs
, allDifferences.data.frame
, ggplot
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) SS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { p <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(p) <- c("Rows","Columns","p") plotPvalues(p, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2)), show.sig = TRUE) }
##Subset WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp)) current.asrt <- as.asrtests(current.asr, NULL, NULL) SS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { p <- within(reshape2::melt(TS.diffs$p.differences), { Var1 <- factor(Var1, levels=dimnames(TS.diffs$p.differences)[[1]]) Var2 <- factor(Var2, levels=levels(Var1)) }) names(p) <- c("Rows","Columns","p") plotPvalues(p, x = "Rows", y = "Columns", gridspacing = rep(c(3,4), c(4,2)), show.sig = TRUE) }
Produces a plot for each face of an empirical 2D
variogram
based on supplied residuals from both an observed data set
and simulated data sets. Those from simulated data sets are used to
produce confidence envelopes If the data consists of sections, such as separate
experiments, the two variogram faces are produced for each section. This
function is less efficient in storage terms than variofaces.asreml
,
because here the residuals from all simulated data sets must be saved, in
addition to the values for the variogram faces; in
variofaces.asreml
, the residuals for each simulated data set are
discarded after the variogram has been calculated. On the other hand, the
present function is more flexible, because there is no restriction on how the
residuals are obtained.
## S3 method for class 'data.frame' plotVariofaces(data, residuals, restype="Residuals", ...)
## S3 method for class 'data.frame' plotVariofaces(data, residuals, restype="Residuals", ...)
data |
A |
residuals |
A |
restype |
A |
... |
Other arguments that are passed down to the function |
For each set of residuals, asreml.variogram
is used to obtain the empirical
variogram, from which the values for its faces are obtained. Plots are produced for
each face and include the observed residuals and the 2.5%, 50% & 97.5% quantiles.
A list
with the following components:
face1: a data.frame
containing the variogram values on
which the plot for the first dimension is based.
face2: a data.frame
containing the variogram values on
which the plot for the second dimension is based.
Chris Brien
Stefanova, K. T., Smith, A. B. & Cullis, B. R. (2009) Enhanced diagnostics for the spatial analysis of field trials. Journal of Agricultural, Biological, and Environmental Statistics, 14, 392–410.
asremlPlus-package
, asreml
, asreml.variogram
,
variofaces.asreml
, simulate.asreml
.
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce variogram faces plot (Stefanaova et al, 2009) resid <- simulate(current.asr, V=V, which="residuals") resid$residuals <- cbind(resid$observed[c("Row","Column")], resid$residuals) plotVariofaces(data=resid$observed[c("Row","Column","residuals")], residuals=resid$residuals, restype="Standardized conditional residuals") ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce variogram faces plot (Stefanaova et al, 2009) resid <- simulate(current.asr, V=V, which="residuals") resid$residuals <- cbind(resid$observed[c("Row","Column")], resid$residuals) plotVariofaces(data=resid$observed[c("Row","Column","residuals")], residuals=resid$residuals, restype="Standardized conditional residuals") ## End(Not run)
data.frame data
.Perform a combination of a linear and a power transformation on a variable
whose name is given as a character string in var.name
. The transformed
variable is stored in the data.frame data
. The name of the transformed
variable is made by prepending to the original var.name
a combination of
(i) .offset
, if offset
is nonzero,
(ii) neg.
, if scale
is -1, or scaled.
, if abs(scale)
is other than one, and (iii) either log.
, sqrt.
, recip.
or
power.
, if power
is other than one.
No action is taken if there is no transformation (i.e. offset = 0
,
scale = 1
and power = 1
). Also, the titles
list is
extended to include a component with a generated title for the
transformed variable with text indicating the transformation prepended
to the title
for the var.name
obtained from the
titles list
. For nonzero offset
, ‘Offset ’ is prepended,
For scaled
not equal to one, the possible prepends are ‘Negative of ’
and ‘Scaled ’. The possible prepended texts for power
not equal to one
are ‘Logarithm of’, ‘Square root of ’, ‘Reciprocal of ’ and ‘Power nnnn of ’,
where nnn
is the power used.
powerTransform(var.name, power = 1, offset = 0, scale = 1, titles = NULL, data)
powerTransform(var.name, power = 1, offset = 0, scale = 1, titles = NULL, data)
var.name |
A |
power |
A number specifying the power to be used in the transformation.
If equal to 1, the default, no power transformation is applied.
Otherwise, the variable is raised to the specified |
offset |
A number to be added to each value of the variable, after any scaling and before applying any power transformation. |
scale |
A number to multiply each value of the variable, before adding any offset and applying any power transformation. |
titles |
A |
data |
A |
A list
with a component named data
that is the data.frame
containing the
transformed variable, a component named tvar.name
that is a character string
that is the name of the transformed variable in data
, and a component named
titles
that extends the list
supplied in the titles
argument to
include a generated title for the transformed title, the name of the new component being
tvar.name
.
Chris Brien
## set up a factor with labels x.dat <- data.frame(y = c(14, 42, 120, 150)) ## transform y to logarithms trans <- powerTransform("y", power = 0, titles=list(y = "Length (cm)"), data = x.dat) x.dat <- trans$data tvar.name <- trans$tvar.name ## transform y to logarithms after multiplying by -1 and adding 1. z.dat <- data.frame( y = c(-5.25, -4.29, -1.22, 0.05)) trans <- powerTransform("y", power = 0, scale = -1, offset = 1 , titles=list(y = "Potential"), data = z.dat) z.dat <- trans$data tvar.name <- trans$tvar.name
## set up a factor with labels x.dat <- data.frame(y = c(14, 42, 120, 150)) ## transform y to logarithms trans <- powerTransform("y", power = 0, titles=list(y = "Length (cm)"), data = x.dat) x.dat <- trans$data tvar.name <- trans$tvar.name ## transform y to logarithms after multiplying by -1 and adding 1. z.dat <- data.frame( y = c(-5.25, -4.29, -1.22, 0.05)) trans <- powerTransform("y", power = 0, scale = -1, offset = 1 , titles=list(y = "Potential"), data = z.dat) z.dat <- trans$data tvar.name <- trans$tvar.name
A data.frame
of S3-class predictions.frame
that stores the
predictions for a fitted model.
as.predictions.frame
is function that converts a
data.frame
to an object of this class.
is.predictions.frame
is the membership function for this class; it tests
that an object has class predictions.frame
.
validPredictionsFrame
can be used to test the validity of a
predictions.frame
.
A data.frame
that begins with the variables classifying the predictions,
in the same order as in the classify
, followed by a column of
predictions that is named either predicted.value
or
backtransformed.predictions
; it also contains columns named
standard.error
and est.status
.
The number of rows should equal the number of unique combinations
of the classifying variables. While such a data.frame
can be constructed from the beginning, the pvals
component
of the value produced by predict.asreml
is a suitable value to
supply for this argument. Note that the names standard.error
and
est.status
have been changed to std.error
and status
in the pvals
component produced by asreml-R4
; if the new names
are in the data.frame
supplied to predictions
, they will be
returned to the previous names.
The data.frame
may also include columns for the lower and upper
values of error intervals, either standard error, confidence or half-LSD
intervals. The names of these columns will consist of three parts
separated by full stops:
1) the first part will be lower
or upper
;
2) the second part will be one of Confidence
,
StandardError
or halfLeastSignificant
;
3) the third component will be limits
.
IF accuracy.threshold
is set to a numeric value at the time the
prediction.frame
is formed, it will also include a column logical
values
named LSDwarning
.
When halfLeastSignificant
limits have been included in a predictions.frame
,
its attributes will include those that are not NULL
of LSDtype
,
LSDby
, LSDstatistic
, LSDaccuracy
and LSDvalues
. LSDvalues
are
the LSD values used to calculate the halfLeastSignificant
error.intervals
and are an expanded version of the values stored in the assignedLSD
column of the
LSD.frame
.
See predictPlus.asreml
for more information.
Chris Brien
predictPlus.asreml
, is.predictions.frame
,
as.predictions.frame
, validPredictionsFrame
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the alldiffs object is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the alldiffs object is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
This function forms the predictions for term
using
classify
and the supplied asreml
object and stores
them in an alldiffs.object
. If x.num
is
supplied, the predictions will be obtained for the values supplied
in x.pred.values
and, if supplied, x.plot.values
will
replace them in the alldiffs.object
that is returned.
If x.fac
, but not x.num
, is specified, predictions
will involve it and, if supplied, x.plot.values
will replace
the levels of x.fac
in the alldiffs.object
that is returned. In order to get the correct predictions you may
need to supply additional arguments to predict.asreml
through ...
e.g. present
, parallel
, levels
.
Any aliased predictions will be removed, as
will any standard error of pairwise differences involving them.
Also calculated are the approximate degrees of freedom of the
standard errors of the predictions. If the denominator degrees of
freedom for term
are available in wald.tab
, they are
used. Otherwise the residual degrees of freedom or the maximum of
the denominator degrees in wald.tab
, excluding the
Intercept, are used. Which is used depends on the setting of
dDF.na
. These degrees of freedom are used for the
t-distribution on which p-values and confidence intervals are
based. It is stored as an attribute to the alldiffs.object
.
The degrees of freedom are also used in calculating the minimum,
mean and maximum LSD for comparing pairs of predictions, which are
also stored in the alldiffs.object
.
If pairwise = TRUE
, all pairwise differences between the
predictions
, their standard errors, p-values and LSD
statistics are computed using allDifferences.data.frame
.
This adds them to the alldiffs.object
as additional
list
components named differences
, sed
,
p.differences
and LSD
.
If a linear transformation of the predictions is specified then the values of this linear transformation are returned, instead of the original predictions, along with their standard errors and the pairwise differences and associated statistics.
If a transformation has been applied in the analysis (any one of
transform.power
is not one, scale
is not one and
offset
is nonzero), the backtransforms of the transformed
values and their lower and upper error intervals are added
to a data.frame
that is consistent with the predictions
data.frame
.
If transform.power
is other than
one, the standard.error
column of the data.frame
is set to NA
. This data.frame
is added to the
alldiffs.object
as a list
component called
backtransforms
.
The printing of the components produced is controlled by the
tables
argument. The order of plotting the levels of
one of the factors indexing the predictions can be modified
and is achieved using sort.alldiffs
.
## S3 method for class 'asreml' predictPlus(asreml.obj, classify, term = NULL, inestimable.rm = TRUE, linear.transformation = NULL, EGLS.linTransform = TRUE, error.intervals = "Confidence", alpha = 0.05, wald.tab = NULL, dDF.na = "residual", dDF.values = NULL, pairwise = TRUE, Vmatrix = FALSE, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", x.num = NULL, x.fac = NULL, x.pred.values = NULL, x.plot.values = NULL, titles = NULL, tables = "all" , level.length = NA, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, trace = FALSE, ...)
## S3 method for class 'asreml' predictPlus(asreml.obj, classify, term = NULL, inestimable.rm = TRUE, linear.transformation = NULL, EGLS.linTransform = TRUE, error.intervals = "Confidence", alpha = 0.05, wald.tab = NULL, dDF.na = "residual", dDF.values = NULL, pairwise = TRUE, Vmatrix = FALSE, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", x.num = NULL, x.fac = NULL, x.pred.values = NULL, x.plot.values = NULL, titles = NULL, tables = "all" , level.length = NA, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, trace = FALSE, ...)
asreml.obj |
|
classify |
A |
term |
A |
inestimable.rm |
A |
linear.transformation |
A If a In either case, as well as the values of the linear combinations, their standard errors, pairwise differences and associated statistics are returned. |
EGLS.linTransform |
A |
error.intervals |
A |
alpha |
A |
wald.tab |
A |
dDF.na |
A |
dDF.values |
A |
pairwise |
A |
Vmatrix |
A |
avsed.tolerance |
A
|
accuracy.threshold |
A |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
titles |
A |
tables |
A |
x.num |
A |
x.fac |
A |
x.pred.values |
The values of |
x.plot.values |
The actual values to be plotted on the x axis. They are
needed when values different to those in |
level.length |
The maximum number of characters from the levels of factors to use in the row and column labels of the tables of pairwise differences and their p-values and standard errors. |
transform.power |
A |
offset |
A |
scale |
A |
transform.function |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
trace |
A |
... |
further arguments passed to |
For linear.transformations
set to NULL
, an S3-class
alldiffs.object
with predictions and their standard
errors and, depending on the settings of the arguments, all pairwise
differences between predictions, their standard errors and p-values
and LSD statistics. Also, unless the sortFactor
or sortOrder
arguments are invoked, the rows of predictions
component are ordered
so that they are in standard order for the variables in the classify
.
That is, the values of the last variable change with every row, those of the
second-last variable only change after all the values of the last variable have
been traversed; in general, the values of a variable are the same for all the
combinations of the values to the variables to its right in the classify
.
In addition, if necessary, the order of the columns of the variables in the
predictions
component are changed to match their order in the classify
.
If transform.power
or scale
is not one or offset
is not zero, it will contain a data.frame
with the backtransformed
linear transformation of the predictions. The backtransformation will, after
backtransforming for any power transformation, subtract the offset
and then divide by the scale
.
If error.intervals
is not "none"
, then the
predictions
component and, if present, the
backtransforms
component will contain columns for the lower
and upper values of the limits for the interval.
The name of the response
, the response.title
,
the term
, the classify
, tdf
, sortFactor
and the sortOrder
will be set as attributes to the object.
Also, if error.intervals
is "halfLeastSignificant"
, then those of
LSDtype
, LSDby
and LSDstatistic
that are not NULL
will be added as attributes of the object and of the predictions frame
;
additionally, LSDvalues
will be added as attribute of the
predictions frame
, LSDvalues
being the LSD values used in
calculating the error.intervals
.
Note that the classify
in an alldiffs.object
is based on the
variables indexing the predictions, which may differ from the
classify
used to obtain the original predictions (for example,
when the alldiffs.object
s stores a linear transformation of predictions.
For linear.transformations
set to other than NULL
,
an alldiffs.object
with the linear.transformation
applied to the predictions
and their standard errors and,
depending on the settings of the arguments, all pairwise
differences between the linearly transformed predictions, their
standard errors and p-values and LSD statistics.
(See also linTransform.alldiffs
.)
Chris Brien
alldiffs.object
, as.alldiffs
, print.alldiffs
,
linTransform.alldiffs
, sort.alldiffs
, subset.alldiffs
, allDifferences.data.frame
,
redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, exploreLSDs.alldiffs
,
pickLSDstatistics.alldiffs
, predictPresent.asreml
,
plotPredictions.data.frame
, as.Date
, predict.asreml
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run)
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run)
This function forms the predictions for each term in terms
using a supplied asreml
object and
predictPlus.asreml
.
Tables are produced using predictPlus.asreml
,
in conjunction with allDifferences.data.frame
,
with the argument tables
specifying which tables are printed.
The argument plots
, along with transform.power
,
controls which plots are produced. The plots are
produced using plotPredictions.data.frame
, with
line plots produced when variables involving x.num
or x.fac
are involved in classify
for the predictions and bar charts
otherwise.
In order to get the correct predictions you may
need to supply additional arguments to predict.asreml
through ...
e.g. present
, parallel
, levels
.
The order of plotting the levels of
one of the factors indexing the predictions can be modified and is achieved
using sort.alldiffs
.
## S3 method for class 'asreml' predictPresent(asreml.obj, terms, inestimable.rm = TRUE, linear.transformation = NULL, EGLS.linTransform, error.intervals = "Confidence", alpha = 0.05, wald.tab = NULL, dDF.na = "residual", dDF.values = NULL, pairwise = TRUE, Vmatrix = FALSE, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", x.num = NULL, x.fac = NULL, nonx.fac.order = NULL, x.pred.values = NULL, x.plot.values = NULL, plots = "predictions", panels = "multiple", graphics.device = NULL, interval.annotate = TRUE, titles = NULL, colour.scheme = "colour", save.plots = FALSE, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", tables = "all", level.length = NA, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, trace = FALSE, ggplotFuncs = NULL, ...)
## S3 method for class 'asreml' predictPresent(asreml.obj, terms, inestimable.rm = TRUE, linear.transformation = NULL, EGLS.linTransform, error.intervals = "Confidence", alpha = 0.05, wald.tab = NULL, dDF.na = "residual", dDF.values = NULL, pairwise = TRUE, Vmatrix = FALSE, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", x.num = NULL, x.fac = NULL, nonx.fac.order = NULL, x.pred.values = NULL, x.plot.values = NULL, plots = "predictions", panels = "multiple", graphics.device = NULL, interval.annotate = TRUE, titles = NULL, colour.scheme = "colour", save.plots = FALSE, transform.power = 1, offset = 0, scale = 1, transform.function = "identity", tables = "all", level.length = NA, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, trace = FALSE, ggplotFuncs = NULL, ...)
asreml.obj |
|
terms |
A |
inestimable.rm |
A |
linear.transformation |
A If a In either case, as well as the values of the linear combinations,
their standard errors, pairwise differences and associated statistics
are returned in the |
EGLS.linTransform |
A |
error.intervals |
A |
alpha |
A |
wald.tab |
A |
dDF.na |
The method to use to obtain approximate denominator degrees of freedom.
when the numeric or algebraic methods produce an |
dDF.values |
A |
pairwise |
A logical indicating whether all pairwise differences of the
|
Vmatrix |
A |
avsed.tolerance |
A
|
accuracy.threshold |
A |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
x.num |
A |
x.fac |
A |
nonx.fac.order |
A |
x.pred.values |
The values of |
x.plot.values |
The actual values to be plotted on the x axis or in the labels of
tables. They are
needed when values different to those in |
plots |
Possible values are |
panels |
Possible values are |
graphics.device |
A |
interval.annotate |
A |
titles |
A |
colour.scheme |
A character string specifying the colour scheme for the plots.
The default is |
save.plots |
A |
transform.power |
A |
offset |
A number that has been added to each value of the response after any scaling
and before applying any power transformation. Unless it is equal to 0, the
default, back-transforms of the predictions will be obtained and stored in
the |
scale |
A number by which each value of the response has been multiply before adding
any offset and applying any power transformation. Unless it is equal to 1, the
default, back-transforms of the predictions will be obtained and stored in
the |
transform.function |
A |
tables |
A |
level.length |
The maximum number of characters from the levels of
factors to use in the row and column labels of the tables produced by
|
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
ggplotFuncs |
A |
... |
further arguments passed to |
A list
containing an alldiffs.object
for each term
for
which tables are produced. The names of the components of this list are
the terms
with full-stops (.
) replacing colons (:
).
Plots are also preduced depending on the setting of the plot
argument.
Chris Brien
predictPlus.asreml
, allDifferences.data.frame
,
sort.alldiffs
, subset.alldiffs
, redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
,
pickLSDstatistics.alldiffs
, plotPredictions.data.frame
,
print.alldiffs
, as.Date
, Devices
## Not run: data(WaterRunoff.dat) titles <- list("Days since first observation", "Days since first observation", "pH", "Turbidity (NTU)") names(titles) <- names(WaterRunoff.dat)[c(5,7,11:12)] asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:Species:xDay + Sources:Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #### Get the observed combinations of the factors and variables in classify class.facs <- c("Sources","Species","Date","xDay") levs <- as.data.frame(table(WaterRunoff.dat[class.facs])) levs <- levs[do.call(order, levs), ] levs <- as.list(levs[levs$Freq != 0, class.facs]) levs$xDay <- as.numfac(levs$xDay) #### parallel and levels are arguments from predict.asreml diff.list <- predictPresent.asreml(asreml.obj = current.asrt$asreml.obj, terms = "Date:Sources:Species:xDay", x.num = "xDay", x.fac = "Date", parallel = TRUE, levels = levs, wald.tab = current.asrt$wald.tab, plots = "predictions", error.intervals = "StandardError", titles = titles, transform.power = 0, present = c("Type","Species","Sources"), tables = "none", level.length = 6) ## End(Not run)
## Not run: data(WaterRunoff.dat) titles <- list("Days since first observation", "Days since first observation", "pH", "Turbidity (NTU)") names(titles) <- names(WaterRunoff.dat)[c(5,7,11:12)] asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:Species:xDay + Sources:Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #### Get the observed combinations of the factors and variables in classify class.facs <- c("Sources","Species","Date","xDay") levs <- as.data.frame(table(WaterRunoff.dat[class.facs])) levs <- levs[do.call(order, levs), ] levs <- as.list(levs[levs$Freq != 0, class.facs]) levs$xDay <- as.numfac(levs$xDay) #### parallel and levels are arguments from predict.asreml diff.list <- predictPresent.asreml(asreml.obj = current.asrt$asreml.obj, terms = "Date:Sources:Species:xDay", x.num = "xDay", x.fac = "Date", parallel = TRUE, levels = levs, wald.tab = current.asrt$wald.tab, plots = "predictions", error.intervals = "StandardError", titles = titles, transform.power = 0, present = c("Type","Species","Sources"), tables = "none", level.length = 6) ## End(Not run)
alldiffs.object
in a nice format.Prints the predictions and standard errors from a fitted model,
including the attributes of the predictions.frame
. Also prints out all
pairwise differences between the predictions to 2 significant figures,
along with their p-values and standard errors to 4 decimal places. If LSDs are
requested the mean, minimum and maximum LSDs will be printed.
## S3 method for class 'alldiffs' print(x, which = "all", colourise = FALSE, ...)
## S3 method for class 'alldiffs' print(x, which = "all", colourise = FALSE, ...)
x |
An |
which |
A |
colourise |
A |
... |
further arguments passed to |
No value is returned, but the components of x
are printed.
Chris Brien
print.predictions.frame
, as.alldiffs
, allDifferences.data.frame
## Not run: print.alldiffs(diffs, which = "predictions") ## End(Not run)
## Not run: print.alldiffs(diffs, which = "predictions") ## End(Not run)
asrtests.object
Prints a summary
of the asreml object, the pseudoanova
and
the test.summary data.frame
that are stored in the
asrtests.object
.
## S3 method for class 'asrtests' print(x, which = "key", colourise = FALSE, ...)
## S3 method for class 'asrtests' print(x, which = "key", colourise = FALSE, ...)
x |
An |
which |
Which elements of the |
colourise |
A |
... |
further arguments passed to |
No value is returned, but the elements of the list in x
are
printed.
Chris Brien
print.wald.tab
, as.asrtests
, asremlPlus-package
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, , "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, , "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt) ## End(Not run)
Prints the components of an LSDdata
list
created by exploreLSDs
,
that contains data on the LSDs for all pairwise differences of predictions stored in an
alldiffs.object
.
## S3 method for class 'LSDdata' print(x, which.print = c("statistics", "false.pos", "false.neg"), ...)
## S3 method for class 'LSDdata' print(x, which.print = c("statistics", "false.pos", "false.neg"), ...)
x |
An object that, ideally, is of class |
which.print |
Which components of the |
... |
further arguments passed to |
No value is returned, but components of x
are printed as specified in which.print
.
Chris Brien
exploreLSDs.alldiffs
, alldiffs.object
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) LSDdata <- exploreLSDs(diffs, LSDtype = "factor.combinations", LSDby = "Sources") print(LSDdata) ## End(Not run)
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) LSDdata <- exploreLSDs(diffs, LSDtype = "factor.combinations", LSDby = "Sources") print(LSDdata) ## End(Not run)
predictions.frame
, with or without title and heading.Prints the predictions from a fitted model, along with their standard errors and, if present, their error intervals, with or without title and headings.
## S3 method for class 'predictions.frame' print(x, title = NULL, which.predictions = c("title", "heading", "table"), colourise = FALSE, ...)
## S3 method for class 'predictions.frame' print(x, title = NULL, which.predictions = c("title", "heading", "table"), colourise = FALSE, ...)
x |
An object that, ideally, is of class |
title |
A |
which.predictions |
what Which elements of the |
colourise |
A |
... |
further arguments passed to |
No value is returned, but the components of x
are printed.
Chris Brien
print.alldiffs
, as.alldiffs
, allDifferences.data.frame
## Not run: print.predictions.frame(diffs$predictions, which = "all") ## End(Not run)
## Not run: print.predictions.frame(diffs$predictions, which = "all") ## End(Not run)
Prints a test.summary
(also a choose.summary
) with or without a title and with p-values limited to 4-digits.
## S3 method for class 'test.summary' print(x, which.print = c("title", "table"), omit.columns = NULL, ...)
## S3 method for class 'test.summary' print(x, which.print = c("title", "table"), omit.columns = NULL, ...)
x |
A object that, ideally, is of class |
which.print |
A |
omit.columns |
A |
... |
further arguments passed to |
No value is returned, but x
is printed, possibly with a title.
Chris Brien
print.wald.tab
, print.asrtests
, as.asrtests
, asremlPlus-package
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt$test.summary) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt$test.summary) ## End(Not run)
Prints a wald.tab
with or without title and/or heading.
The printing of the p-values is limited to 4 digits.
## S3 method for class 'wald.tab' print(x, which.wald = c("title", "heading", "table"), colourise = FALSE, ...)
## S3 method for class 'wald.tab' print(x, which.wald = c("title", "heading", "table"), colourise = FALSE, ...)
x |
An object that, ideally, is of class |
which.wald |
Which elements of the |
colourise |
A |
... |
further arguments passed to |
No value is returned, but x
is printed as specified in which.wald
.
Chris Brien
print.test.summary
, print.asrtests
, as.asrtests
, asremlPlus-package
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt$wald.tab) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt$wald.tab) ## End(Not run)
Prints the formula
e nominated in the which
argument from the call
stored in an asreml
object.
## S3 method for class 'asreml' printFormulae(asreml.obj, which = c("fixed", "random", "residual"), expanded = FALSE, envir = parent.frame(), ...)
## S3 method for class 'asreml' printFormulae(asreml.obj, which = c("fixed", "random", "residual"), expanded = FALSE, envir = parent.frame(), ...)
asreml.obj |
An |
which |
A |
expanded |
A |
envir |
The environment in which the |
... |
Arguments passed on to |
Invisibly returns a character
, each element of which contains one of the extracted
formula
e.
Chris Brien
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) printFormulae(current.asr) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) printFormulae(current.asr) ## End(Not run)
Calculates the adjusted coefficient of determination (R2) that measures the contributions to the total variance exhibited by the observations of a specified combination of fixed and random terms in a fitted linear mixed model.
Note that the adjusted R2 can be negative, which indicates that the contribution of the terms to the total variance is very small relative to the sum of the degrees of freedom of the terms.
Piepho's (2023) method for GLMMs has not been implemented. This function is not available for ASReml-R version 3.
## S3 method for class 'asreml' R2adj(asreml.obj, include.which.fixed = ~ ., orthogonalize = "hybrid", include.which.random = NULL, bound.exclusions = c("F","B","S","C"), ...)
## S3 method for class 'asreml' R2adj(asreml.obj, include.which.fixed = ~ ., orthogonalize = "hybrid", include.which.random = NULL, bound.exclusions = c("F","B","S","C"), ...)
asreml.obj |
An |
include.which.fixed |
A Note that the contribution of a subset of the fixed terms is only unique if the effects for the fixed terms are orthogonal; if the effects are not orthogonal then the contributions will depend on the order of the terms in the formula. Also, determining the joint contribution of a subset of the fixed terms in the model may be computationally demanding because the projection matrices have to be formed for all fixed terms and these projections matrices have to be orthogonalized. A heavy computational burden is most likely when the effects for the fixed terms are not orthogonal, for example, when numeric covariates are included amongst the terms. |
orthogonalize |
A |
include.which.random |
A |
bound.exclusions |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
The method used to compute the adjusted R2 under a linear mixes model (LMM) is that
described by Piepho (2023). Here, the method has been extended to allow computation
of the adjusted R2 for a subset of the fixed terms. A set of orthogonalized
projectors for all of the fixed terms in the model (a set of
) is obtained and the combined contribution of the
fixed terms nominated in
include.which.fixed
is obtained by computing the
average semisquared bias, ASSB, for the nominated fixed terms as:
Of the two methods, eigenmethods
is least likely to fail, but it does
not establish the marginality between the terms. It is often needed when
there is nonorthogonality between terms, such as when there are several linear
covariates. It can also be more efficient in these circumstances.
The process can be computationally expensive, particularly for a large data set (500 or more observations) and/or when many terms are to be orthogonalized, particularly if they are not orthogonal.
If the error "Matrix is not idempotent
" should occur then, especially if
there are many terms, one might try using set.daeTolerance
from the
dae
package to reduce the tolerance used in determining if values are
either the same or are zero; it may be necessary to lower the tolerance to as
low as 0.001. Also, setting orthogonalize
to eigenmethods
is
worth a try.
In doing the computations, no changes are made to the fitted model, nor is the
formula
stored in asreml.obj
referred to. Instead, the
names of the terms referred to are those stored in the coefficients
component of the asreml.obj
. Use
attr(asreml.obj$coefficients$fixed, which = "terms")
to access the attribute
for fixed terms; substitute random
for fixed
to see the names of the
random terms. For fixed terms. the term names are the same as those in the
Wald table produced by wald.asreml
, and, for random terms, the same as those
in the vparameters
component of the asreml.obj
. Two asreml
formula
functions whose terms can differ from their formulation in a
model formula
are at
and str
.)
The function estimateV.asreml
is used to calculate the variance matrices
required in calculating the adjusted R2.
A numeric
that is the adjusted R2, expressed as a percentage. It has attributes
include.which.fixed
, include.which.random
and missing.termmatrix
(use attr(x, which = "name")
to access the attribute name
).
The missing.termmatrix
attribute will be NULL
, unless the design matrix
could not be obtained for one or more model terms. If is is not NULL
, it will be
a list of terms whose design matices could not be produced and so are not included in
the variance matrix estimate. An NA
will be returned for the adjusted R2 if
missing.termmatrix
is not NULL
or a generalized inverse could
not be computed for the variance matrix estimate.
Chris Brien
Piepho, H.-P. (2023). An adjusted coefficient of determination (R2) for generalized linear mixed models in one go. Biometrical Journal, 65(7), 2200290. doi:10.1002/bimj.202200290.
asreml
, estimateV.asreml
.
## Not run: data(Oats.dat) current.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) R2.adj.fix <- R2adj.asreml(current.asr) R2.adj.ran <- R2adj.asreml(current.asr, include.which.fixed = NULL, include.which.random = ~ .) R2.adj.tot <- R2adj.asreml(current.asr, include.which.random = ~ .) R2.adj.tot <- R2adj.asreml(current.asr, include.which.random = ~ Blocks) R2.adj.add <- R2adj.asreml(current.asr, include.which.fixed = ~ Nitrogen + Variety) R2.adj.int <- R2adj.asreml(current.asr, include.which.fixed = ~ . - (Nitrogen + Variety)) R2.adj.int <- R2adj.asreml(current.asr, include.which.fixed = ~ Nitrogen:Variety) ## End(Not run)
## Not run: data(Oats.dat) current.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) R2.adj.fix <- R2adj.asreml(current.asr) R2.adj.ran <- R2adj.asreml(current.asr, include.which.fixed = NULL, include.which.random = ~ .) R2.adj.tot <- R2adj.asreml(current.asr, include.which.random = ~ .) R2.adj.tot <- R2adj.asreml(current.asr, include.which.random = ~ Blocks) R2.adj.add <- R2adj.asreml(current.asr, include.which.fixed = ~ Nitrogen + Variety) R2.adj.int <- R2adj.asreml(current.asr, include.which.fixed = ~ . - (Nitrogen + Variety)) R2.adj.int <- R2adj.asreml(current.asr, include.which.fixed = ~ Nitrogen:Variety) ## End(Not run)
alldiffs.object
.Ratio predictions and error intervals are formed for two levels of a factor,
the ratio.factor
. For each pair of a level of the ratio.factor
in numerator.levels
with a level in denominator.levels
,
the ratio predictions are formed from all combinations of the other factors
as the ratio of the two predictions for each combination, along with confidence
intervals for the ratio predictions computed using the Fieller (1954) method.
The printing of the components produced is controlled by the
tables
argument.
## S3 method for class 'alldiffs' ratioTransform(alldiffs.obj, ratio.factor, numerator.levels, denominator.levels, method = "Fieller", alpha = 0.05, response = NULL, response.title = NULL, tables = "predictions", ...)
## S3 method for class 'alldiffs' ratioTransform(alldiffs.obj, ratio.factor, numerator.levels, denominator.levels, method = "Fieller", alpha = 0.05, response = NULL, response.title = NULL, tables = "predictions", ...)
alldiffs.obj |
An |
ratio.factor |
A |
numerator.levels |
A |
denominator.levels |
A |
method |
A |
alpha |
A |
response |
A |
response.title |
A |
tables |
A |
... |
further arguments passed to |
A list
of predictions.frame
s, each containing the ratio predictions
and their confidence limits for a combination of the numerator.levels
with the
denominator.levels
. It will also contain the values of the variables in the
classify
of alldiffs.obj
that index the ratio predictions, except that
the ratio.factor
is omitted.
If sortFactor
attribute of the alldiffs.object
is set and is not the
ratio.factor
, the predictions and their backtransforms will be sorted using
the sortOrder
attribute of the alldiffs.object
.
Chris Brien
Fieller, E. C. (1954). Some Problems in Interval Estimation. Journal of the Royal Statistical Society.Series B (Methodological), 16, 175-185.
pairdiffsTransform
, linTransform
, predictPlus.asreml
,
as.alldiffs
, print.alldiffs
, sort.alldiffs
, subset.alldiffs
,
allDifferences.data.frame
, redoErrorIntervals.alldiffs
,
recalcLSD.alldiffs
, predictPresent.asreml
, plotPredictions.data.frame
, as.Date
, predict.asreml
#### Form the ratios and Fieller CIs for RGR Salinity load(system.file("extdata", "testDiffs.rda", package = "asremlPlus", mustWork = TRUE)) Preds.ratio.RGR <- ratioTransform(diffs.RGR, ratio.factor = "Salinity", numerator.levels = "Salt", denominator.levels = "Control") #### Form the ratios and Fieller CIs for Nitrogen compared to no Nitrogen data("Oats.dat") ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) wald.tab <- current.asrt$wald.tab Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", pairwise = TRUE, Vmatrix = TRUE, error.intervals = "halfLeast", LSDtype = "factor", LSDby = "Variety", wald.tab = wald.tab) ## End(Not run) ## Use lme4 and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) ## Set up a wald.tab int <- as.data.frame(rbind(rep(NA,4))) rownames(int) <- "(Intercept)" wald.tab <- anova(m1.lmer, ddf = "Kenward", type = 1)[,3:6] names(wald.tab) <- names(int) <- c("Df", "denDF", "F.inc", "Pr") wald.tab <- rbind(int, wald.tab) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] #Create alldiffs object Var.diffs <- as.alldiffs(predictions = Var.preds, sed = Var.sed, vcov = Var.vcov, classify = "Nitrogen:Variety", response = "Yield", tdf = den.df) } if (exists("Var.diffs")) Preds.ratio.OatsN <- ratioTransform(alldiffs.obj = Var.diffs, ratio.factor = "Nitrogen", numerator.levels = c("0.2","0.4","0.6"), denominator.levels = "0.2")
#### Form the ratios and Fieller CIs for RGR Salinity load(system.file("extdata", "testDiffs.rda", package = "asremlPlus", mustWork = TRUE)) Preds.ratio.RGR <- ratioTransform(diffs.RGR, ratio.factor = "Salinity", numerator.levels = "Salt", denominator.levels = "Control") #### Form the ratios and Fieller CIs for Nitrogen compared to no Nitrogen data("Oats.dat") ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) wald.tab <- current.asrt$wald.tab Var.diffs <- predictPlus(m1.asr, classify="Nitrogen:Variety", pairwise = TRUE, Vmatrix = TRUE, error.intervals = "halfLeast", LSDtype = "factor", LSDby = "Variety", wald.tab = wald.tab) ## End(Not run) ## Use lme4 and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) ## Set up a wald.tab int <- as.data.frame(rbind(rep(NA,4))) rownames(int) <- "(Intercept)" wald.tab <- anova(m1.lmer, ddf = "Kenward", type = 1)[,3:6] names(wald.tab) <- names(int) <- c("Df", "denDF", "F.inc", "Pr") wald.tab <- rbind(int, wald.tab) #Get predictions Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL den.df <- wald.tab[match("Variety", rownames(wald.tab)), "denDF"] #Create alldiffs object Var.diffs <- as.alldiffs(predictions = Var.preds, sed = Var.sed, vcov = Var.vcov, classify = "Nitrogen:Variety", response = "Yield", tdf = den.df) } if (exists("Var.diffs")) Preds.ratio.OatsN <- ratioTransform(alldiffs.obj = Var.diffs, ratio.factor = "Nitrogen", numerator.levels = c("0.2","0.4","0.6"), denominator.levels = "0.2")
LSD.frame
that is a component of an
alldiffs.object
.Given an alldiffs.object
, adds or recalculate its LSD.frame
.
N.B. No changes are made to the error.intervals — use redoErrorIntervals.alldiffs
to modify both the error.intervals and the LSD.frame
.
## S3 method for class 'alldiffs' recalcLSD(alldiffs.obj, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", alpha = 0.05, ...)
## S3 method for class 'alldiffs' recalcLSD(alldiffs.obj, LSDtype = "overall", LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", alpha = 0.05, ...)
alldiffs.obj |
An |
LSDtype |
A See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
alpha |
The significance level for an LSD to compare a pair of predictions.
It is stored as an attribute to the |
... |
further arguments passed to |
An alldiffs.object
with components
predictions
, vcov
, differences
, p.differences
sed
, LSD
and, if present in alldiffs.obj
, backtransforms
.
Chris Brien
asremlPlus-package
, as.alldiffs
, sort.alldiffs
,
subset.alldiffs
, print.alldiffs
, renewClassify.alldiffs
, exploreLSDs.alldiffs
,
pickLSDstatistics.alldiffs
, redoErrorIntervals.alldiffs
,
plotPredictions.data.frame
,
predictPlus.asreml
, predictPresent.asreml
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Recalculate the LSD values for predictions obtained using asreml or lmerTest TS.diffs <- recalcLSD.alldiffs(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Recalculate the LSD values for predictions obtained using asreml or lmerTest TS.diffs <- recalcLSD.alldiffs(TS.diffs, LSDtype = "factor.combinations", LSDby = "Sources") }
wald.asreml
If some or all denDF are not available, either because they are NA or because
F.inc values were not calculated, this function allows the user to specify how
approximate denDF values are to be obtained. This is done through the dDF.na
and
dDF.values
arguments. Note that if denDF values are available in the Wald table then
only those that are NA
will be replaced. The P values are recalculated using F.con,
if present in the wald.tab
, otherwise F.inc is used. It is noted that, as of asreml version 4,
wald.asreml
has a kenadj
argument.
## S3 method for class 'asrtests' recalcWaldTab(asrtests.obj, recalc.wald = FALSE, denDF="numeric", dDF.na = "none", dDF.values = NULL, trace = FALSE, ...)
## S3 method for class 'asrtests' recalcWaldTab(asrtests.obj, recalc.wald = FALSE, denDF="numeric", dDF.na = "none", dDF.values = NULL, trace = FALSE, ...)
asrtests.obj |
an |
recalc.wald |
A |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
dDF.na |
The method to use to obtain substitute denominator degrees of freedom.
when the numeric or algebraic methods produce an |
dDF.values |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
... |
further arguments passed to |
A wald.tab
: a 4- or 6-column data.frame
containing a
pseudo-anova table for the fixed terms produced by wald.asreml
.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
as.asrtests
, testranfix.asrtests
## Not run: wald.tab <- recalcWaldTab(current.asrt, dDF.na = "supplied", dDF.values = c(NA,rep(c(330,346), c(4,3)))) ## End(Not run)
## Not run: wald.tab <- recalcWaldTab(current.asrt, dDF.na = "supplied", dDF.values = c(NA,rep(c(330,346), c(4,3)))) ## End(Not run)
alldiffs.object
.Given an alldiffs.object
, adds or replaces error.intervals
for its prediction
component. If the backtransforms
component is
present, the transform.power
, offset
and scale
will be
retrieved from the backtransforms
attributes, ignoring the values for the
function's arguments, and the backtransformed
error.intervals
will also be calculated.
## S3 method for class 'alldiffs' redoErrorIntervals(alldiffs.obj, error.intervals = "Confidence", alpha = 0.05, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = NULL, LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, ...)
## S3 method for class 'alldiffs' redoErrorIntervals(alldiffs.obj, error.intervals = "Confidence", alpha = 0.05, avsed.tolerance = 0.25, accuracy.threshold = NA, LSDtype = NULL, LSDsupplied = NULL, LSDby = NULL, LSDstatistic = "mean", LSDaccuracy = "maxAbsDeviation", retain.zeroLSDs = FALSE, zero.tolerance = .Machine$double.eps ^ 0.5, ...)
alldiffs.obj |
An |
error.intervals |
A |
alpha |
A |
avsed.tolerance |
A
|
accuracy.threshold |
A |
LSDtype |
A If See |
LSDsupplied |
A |
LSDby |
A |
LSDstatistic |
A |
LSDaccuracy |
A |
retain.zeroLSDs |
A |
zero.tolerance |
A |
... |
further arguments passed to |
An alldiffs.object
with components
predictions
, vcov
, differences
, p.differences
sed
, LSD
and, if present in alldiffs.obj
, backtransforms
.
If error.intervals
is not "none"
, then the
predictions
component and, if present, the
backtransforms
component will contain columns for the lower
and upper values of the limits for the interval. The names of these
columns will consist of three parts separated by full stops:
1) the first part will be lower
or upper
;
2) the second part will be one of Confidence
,
StandardError
or halfLeastSignificant
;
3) the third component will be limits
.
The name of the response
, the term
, the classify
and
tdf
, as well as the degrees of freedom of the standard error, will be set
as attributes to the object.
Also, if error.intervals
is "halfLeastSignificant"
, then those of
LSDtype
, LSDby
and LSDstatistic
that are not NULL
will be added as attributes of the object and of the predictions frame
;
additionally, LSDvalues
will be added as attribute of the
predictions frame
, LSDvalues
being the LSD values used in
calculating the error.intervals
.
Chris Brien
recalcLSD.alldiffs
, exploreLSDs.alldiffs
,
pickLSDstatistics.alldiffs
, predictPresent.asreml
, plotPredictions.data.frame
,
allDifferences.data.frame
, as.alldiffs
, print.alldiffs
, sort.alldiffs
,
subset.alldiffs
, as.Date
, predict.asreml
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Recalculate the LSD values for predictions obtained using asreml or lmerTest TS.diffs <- redoErrorIntervals.alldiffs(TS.diffs, error.intervals = "halfLeastSignificant") }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus(classify = "Sources:Type", asreml.obj = current.asr, wald.tab = current.asrt$wald.tab, present = c("Sources", "Type", "Species")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Species) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Species", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Recalculate the LSD values for predictions obtained using asreml or lmerTest TS.diffs <- redoErrorIntervals.alldiffs(TS.diffs, error.intervals = "halfLeastSignificant") }
Extracts the REML log likelihood and the number of variance
parameters from two asreml
objects. It assumes that the
first asreml
object corresponds to the null hypothesis and
the second asreml
object to the alternative hypothesis for the
test being conducted. That is, the second
asreml
object is the result of fitting a model that is a
reduced version of the model for the first object. In the case
where the reduced model is obtained by setting positively-constrained
variance parameters in the full model to zero, the positive.zero
argument should be set to TRUE
so that
the p-value is computed using a mixture of chi-square distributions as
described in Self and Liang (1987).
The function checks that the models do not differ in either their fixed or sparse models.
## S3 method for class 'asreml' REMLRT(h0.asreml.obj, h1.asreml.obj, positive.zero = FALSE, bound.test.parameters = "none", DF = NULL, bound.exclusions = c("F","B","S","C"), ...)
## S3 method for class 'asreml' REMLRT(h0.asreml.obj, h1.asreml.obj, positive.zero = FALSE, bound.test.parameters = "none", DF = NULL, bound.exclusions = c("F","B","S","C"), ...)
h0.asreml.obj |
|
h1.asreml.obj |
|
positive.zero |
Indicates whether the hypothesized values for the
variance components being tested are on the boundary
of the parameter space. For example, this is true
for positively-constrained variance components that,
under the reduced model, are zero. This argument does
not need to be set if |
bound.test.parameters |
Indicates whether for the variance components
being tested, at least some of the hypothesized values
are on the boundary of the parameter space.
The possibilities are |
DF |
A |
bound.exclusions |
A |
... |
Provision for passing arguments to functions called internally - not used at present. |
A data.frame
containing the log of the likelihood ratio, its degrees of
freedom, its p-value and the number of bound parameters in each of the two models
being compared.
If DF
is not NULL
, the supplied value is used. Otherwise DF
is determined from the information in h1.asreml.obj
and
h0.asreml.obj
. In this case, the degrees of freedom for the test
are computed as the difference between the two models in the number of variance
parameters whose estimates do not have a code for bound
specified in
bound.exclusions
.
If ASReml-R version 4 is being used then the codes specified in bound.exclusions
are
not restricted to a subset of the default codes, but a warning is issued if a code other
than these is specified.
For ASReml-R version 3, only a subset of the default codes are allowed:
F
(Fixed
), B
(Boundary
), C
(Constrained
) and
S
(Singular
).
The test statistic is calculated as .
This procedure is only appropriate when the null hypothesis is that (i) all parameters are on the boundary of the parameter space (ii) all parameters are in the interior of the parameter space, or (iii) there are two parameters, one of which is on the boundary and the other is not. Other cases have been discussed by Self and Liang (1987), but are not implemented here.
Chris Brien
Self, S.G., and Liang, K-Y. (1987) Asymptotic Properties of Maximum Likelihood Estimators and Likelihood Ratio Tests Under Nonstandard Conditions. Journal of the American Statistical Association, 82, 605-10.
infoCriteria.asreml
, testranfix.asrtests
## Not run: REMLRT(ICV.max, ICV.red, bound.test.parameters = "onlybound") ## End(Not run)
## Not run: REMLRT(ICV.max, ICV.red, bound.test.parameters = "onlybound") ## End(Not run)
alldiffs.object
according to a new classify.The classify
is an attribute of an alldiffs.object
and determines
the order within the components of an unsorted alldiffs.object
.
This function resets the classify
attribute and re-orders the components of
alldiffs.object
to be in standard order for the variables in a
newclassify
, using allDifferences.data.frame
. The newclassify
may be just a re-ordering of the variable names in the previous classify
, or be
based on a new set of variable names. The latter is particularly useful when
linTransform.alldiffs
has been used with a matrix
and it
is desired to replace the resulting Combination
classify
with a
newclassify
comprised of a more meaningful set of variables; first replace
Combination
in the predictions
component with the new set of variables
and then call renewClassify
.
## S3 method for class 'alldiffs' renewClassify(alldiffs.obj, newclassify, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
## S3 method for class 'alldiffs' renewClassify(alldiffs.obj, newclassify, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, decreasing = FALSE, ...)
alldiffs.obj |
An |
newclassify |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
decreasing |
A |
... |
further arguments passed to |
First, the components of the alldiffs.object
is arranged in standard order for
the newclassify
. Then predictions are reordered according to the settings of
sortFactor
, sortParallelToCombo
, sortOrder
and decreasing
(see
sort.alldiffs
for details).
The alldiffs.object
supplied with the following components,
if present, sorted: predictions
, vcov
, backtransforms
, differences
,
p.differences
and sed
. Also, the sortFactor
and sortOrder
attributes are set.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.alldiffs
, redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, predictPlus.asreml
, predictPresent.asreml
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } #Re-order predictions from asreml or lmerTest so all Sources for the same Type are together #for each combination of A and B if (exists("TS.diffs")) { TS.diffs.reord <- renewClassify(TS.diffs, newclassify = "Type:Sources") validAlldiffs(TS.diffs.reord) }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } #Re-order predictions from asreml or lmerTest so all Sources for the same Type are together #for each combination of A and B if (exists("TS.diffs")) { TS.diffs.reord <- renewClassify(TS.diffs, newclassify = "Type:Sources") validAlldiffs(TS.diffs.reord) }
devn.fac
to a fixed term and ensures that the same term, with
trend.num
replacing devn.fac
, is included if any
other term with trend.num
is included in terms
.This function reparamterizes each random (deviations) term involving
devn.fac
to a fixed term and ensures that the same term with
trend.num
replacing devn.fac
is included if any
other term with trend.num
is included in terms
. It also
ansures that any term with spl{trend.num}
replacing
devn.fac
in a term being reparameterized is removed from the model.
## S3 method for class 'asrtests' reparamSigDevn(asrtests.obj,terms = NULL, trend.num = NULL, devn.fac = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, denDF = "numeric", IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA,...)
## S3 method for class 'asrtests' reparamSigDevn(asrtests.obj,terms = NULL, trend.num = NULL, devn.fac = NULL, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, denDF = "numeric", IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA,...)
asrtests.obj |
an |
terms |
A character string vector giving the random terms that are to be reparameterized. |
trend.num |
A character string giving the name of the numeric covariate that
corresponds to |
devn.fac |
A character string giving the name of the factor that corresponds to
|
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
IClikelihood |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
set.terms |
A character vector specifying the terms that are to have bounds and/or initial values set prior to fitting. |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
further arguments passed to |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
as.asrtests
, changeTerms.asrtests
,
testranfix.asrtests
, testresidual.asrtests
, newfit.asreml
, chooseModel.asrtests
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:Species:xDay + Sources:Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #Examine terms that describe just the interactions of Date and the treatment factors terms.treat <- c("Sources", "Type", "Species", "Sources:Type", "Sources:Species") date.terms <- sapply(terms.treat, FUN=function(term){paste("Date:",term,sep="")}, simplify=TRUE) date.terms <- c("Date", date.terms) date.terms <- unname(date.terms) treat.marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,0,1,0, 1,1,1,1,1,1), nrow=6) rownames(treat.marginality) <- date.terms colnames(treat.marginality) <- date.terms choose <- chooseModel(current.asrt, treat.marginality, denDF="algebraic") current.asrt <- choose$asrtests.obj current.asr <- current.asrt$asreml.obj sig.date.terms <- choose$sig.terms #Remove all Date terms left in the fixed model terms <- "(Date/(Sources * (Type + Species)))" current.asrt <- changeTerms(current.asrt, dropFixed = terms) #if there are significant date terms, reparameterize to xDays + spl(xDays) + Date if (length(sig.date.terms) != 0) { #add lin + spl + devn for each to fixed and random models trend.date.terms <- sapply(sig.date.terms, FUN=function(term){sub("Date","xDay",term)}, simplify=TRUE) trend.date.terms <- paste(trend.date.terms, collapse=" + ") current.asrt <- changeTerms(current.asrt, addFixed=trend.date.terms) trend.date.terms <- sapply(sig.date.terms, FUN=function(term){sub("Date","spl(xDay)",term)}, simplify=TRUE) trend.date.terms <- c(trend.date.terms, sig.date.terms) trend.date.terms <- paste(trend.date.terms, collapse=" + ") current.asrt <- changeTerms(current.asrt, addRandom = trend.date.terms) current.asrt <- rmboundary(current.asrt) } #Now test terms for sig date terms spl.terms <- sapply(terms.treat, FUN=function(term){paste("spl(xDay):",term,sep="")}, simplify=TRUE) spl.terms <- c("spl(xDay)",spl.terms) lin.terms <- sapply(terms.treat, FUN=function(term){paste(term,":xDay",sep="")}, simplify=TRUE) lin.terms <- c("xDay",lin.terms) systematic.terms <- c(terms.treat, lin.terms, spl.terms, date.terms) systematic.terms <- unname(systematic.terms) treat.marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,1,1,0, 1,1,1,1,1,1), nrow=6) systematic.marginality <- kronecker(matrix(c(1,0,0,0, 1,1,0,0, 1,1,1,0, 1,1,1,1), nrow=4), treat.marginality) systematic.marginality <- systematic.marginality[-1, -1] rownames(systematic.marginality) <- systematic.terms colnames(systematic.marginality) <- systematic.terms choose <- chooseModel(current.asrt, systematic.marginality, denDF="algebraic", pos=TRUE) current.asrt <- choose$asrtests.obj #Check if any deviations are significant and, for those that are, go back to #fixed dates current.asrt <- reparamSigDevn(current.asrt, choose$sig.terms, trend.num = "xDay", devn.fac = "Date", denDF = "algebraic") ## End(Not run)
## Not run: data(WaterRunoff.dat) asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = log.Turbidity ~ Benches + Sources + Type + Species + Sources:Type + Sources:Species + Sources:Species:xDay + Sources:Species:Date, data = WaterRunoff.dat, keep.order = TRUE) current.asrt <- as.asrtests(current.asr, NULL, NULL) #Examine terms that describe just the interactions of Date and the treatment factors terms.treat <- c("Sources", "Type", "Species", "Sources:Type", "Sources:Species") date.terms <- sapply(terms.treat, FUN=function(term){paste("Date:",term,sep="")}, simplify=TRUE) date.terms <- c("Date", date.terms) date.terms <- unname(date.terms) treat.marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,0,1,0, 1,1,1,1,1,1), nrow=6) rownames(treat.marginality) <- date.terms colnames(treat.marginality) <- date.terms choose <- chooseModel(current.asrt, treat.marginality, denDF="algebraic") current.asrt <- choose$asrtests.obj current.asr <- current.asrt$asreml.obj sig.date.terms <- choose$sig.terms #Remove all Date terms left in the fixed model terms <- "(Date/(Sources * (Type + Species)))" current.asrt <- changeTerms(current.asrt, dropFixed = terms) #if there are significant date terms, reparameterize to xDays + spl(xDays) + Date if (length(sig.date.terms) != 0) { #add lin + spl + devn for each to fixed and random models trend.date.terms <- sapply(sig.date.terms, FUN=function(term){sub("Date","xDay",term)}, simplify=TRUE) trend.date.terms <- paste(trend.date.terms, collapse=" + ") current.asrt <- changeTerms(current.asrt, addFixed=trend.date.terms) trend.date.terms <- sapply(sig.date.terms, FUN=function(term){sub("Date","spl(xDay)",term)}, simplify=TRUE) trend.date.terms <- c(trend.date.terms, sig.date.terms) trend.date.terms <- paste(trend.date.terms, collapse=" + ") current.asrt <- changeTerms(current.asrt, addRandom = trend.date.terms) current.asrt <- rmboundary(current.asrt) } #Now test terms for sig date terms spl.terms <- sapply(terms.treat, FUN=function(term){paste("spl(xDay):",term,sep="")}, simplify=TRUE) spl.terms <- c("spl(xDay)",spl.terms) lin.terms <- sapply(terms.treat, FUN=function(term){paste(term,":xDay",sep="")}, simplify=TRUE) lin.terms <- c("xDay",lin.terms) systematic.terms <- c(terms.treat, lin.terms, spl.terms, date.terms) systematic.terms <- unname(systematic.terms) treat.marginality <- matrix(c(1,0,0,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,1,1,0, 1,1,1,1,1,1), nrow=6) systematic.marginality <- kronecker(matrix(c(1,0,0,0, 1,1,0,0, 1,1,1,0, 1,1,1,1), nrow=4), treat.marginality) systematic.marginality <- systematic.marginality[-1, -1] rownames(systematic.marginality) <- systematic.terms colnames(systematic.marginality) <- systematic.terms choose <- chooseModel(current.asrt, systematic.marginality, denDF="algebraic", pos=TRUE) current.asrt <- choose$asrtests.obj #Check if any deviations are significant and, for those that are, go back to #fixed dates current.asrt <- reparamSigDevn(current.asrt, choose$sig.terms, trend.num = "xDay", devn.fac = "Date", denDF = "algebraic") ## End(Not run)
asrtests.obj
and records their removal in an asrtests.object
.Any terms specified in the random model that are
estimated on the boundary or are singular and can be removed are removed from the fit
stored in the asreml
object stored in the asrtests.object
.
Terms that specify multiple parameters in the random model cannot be removed
(e.g. terms specified using the at
function with more than one level of the
factor) and terms in residual
model are not removed. Terms that can be removed
are selected for removal in the following order based on whether they involve:
(i) a dev
function, (ii) only factors, (iii) an spl
function,
(iv) a pol
function and (v) a lin
function or a variable that
is an integer
or a numeric
. It should be noted that this order of removal
presumes that random deviation terms are specified via the dev
function
rather than via a random factor. Once the earliest of the above classes
with a boundary term is identified, a term within this class is selected for
removal. For all classes, except for factor-only terms, the smallest term
with the largest number of variables/factors is removed.
Amongst factor-only terms, the smallest term with the smallest number of
variables/factors is removed. After each
variance component is removed, a row for it is added to the
test.summary
data.frame
and the model refitted. If there are further
boundary or singular terms, one is removed using the above strategy.
This process continues until there are no further boundary or singular
variance components that are removable. Other types of boundary or singular terms,
which cannot be removed, are reported in warning messages.
## S3 method for class 'asrtests' rmboundary(asrtests.obj, checkboundaryonly = FALSE, IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'asrtests' rmboundary(asrtests.obj, checkboundaryonly = FALSE, IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
asrtests.obj |
an |
checkboundaryonly |
If |
IClikelihood |
A |
trace |
If |
update |
If |
set.terms |
A character vector specifying the terms that are to have
bounds and/or initial values set prior to fitting.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
Further arguments, including |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
.
Chris Brien
as.asrtests
, changeTerms.asrtests
,
testranfix.asrtests
, testresidual.asrtests
, newfit.asreml
, reparamSigDevn.asrtests
,
chooseModel.asrtests
## Not run: current.asrt <- rmboundary(current.asrt) ## End(Not run)
## Not run: current.asrt <- rmboundary(current.asrt) ## End(Not run)
random
and residual
arguments of an asreml
call, with
the resulting call being evaluated. Takes an unevaluated call
and evaluates the call
after setting the bounds and initial values for the terms
specified in terms
. The elements of terms
are matched
with those generated by asreml and used, for example, in the
varcomp
component of a summary.asreml
object.
These names generally include descriptive suffices. To match an
element of terms
that includes such a suffix, set
ignore.suffices
to FALSE
so that a literal match
between the element and the assigned names is sought.
## S3 method for class 'call' setvarianceterms(call, terms, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'call' setvarianceterms(call, terms, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
call |
an unevaluated |
terms |
A character vector specifying the terms
that are to have bounds and/or initial values specified.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A The codes used by ASReml are:
|
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
additional arguments to be added to the call, or arguments in the call with changed values. |
An asreml
object.
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
newfit.asreml
, update.asreml
## Not run: m1.call <- call("asreml", fixed = Height ~ (Block + Irrig)*csDay.num, random= ~ spl(csDay.num)/(Irrig+Block) + dev(csDay.num) + str(~Block:Plot/csDay.num, ~us(2):id(20)) + Block:Plot:spl(csDay.num), data=quote(dat)) ##use quote to stop evaluation of dat here terms <- c("Block:Plot+Block:Plot:csDay.num!us(2).2:1", "R!variance") m1.asreml <- setvarianceterms(m1.call, terms, bounds=c("U","P"), initial=c(NA,3), ignore.suffices=c(FALSE,TRUE)) summary(m1.asreml) ## End(Not run)
## Not run: m1.call <- call("asreml", fixed = Height ~ (Block + Irrig)*csDay.num, random= ~ spl(csDay.num)/(Irrig+Block) + dev(csDay.num) + str(~Block:Plot/csDay.num, ~us(2):id(20)) + Block:Plot:spl(csDay.num), data=quote(dat)) ##use quote to stop evaluation of dat here terms <- c("Block:Plot+Block:Plot:csDay.num!us(2).2:1", "R!variance") m1.asreml <- setvarianceterms(m1.call, terms, bounds=c("U","P"), initial=c(NA,3), ignore.suffices=c(FALSE,TRUE)) summary(m1.asreml) ## End(Not run)
Produce in parallel sets of simulated data corresponding to an asreml
model,
along with its fitted values and residuals. A variance matrix V
,
corresponding to the random
and residual
models must be
supplied. What to save is specified by the which
argument.
## S3 method for class 'asreml' simulate(object, nsim=100, seed = NULL, means=NULL, V, tolerance = 1E-10, update = TRUE, trace = FALSE, which="data", units = "ignore", ncores = 2, ...)
## S3 method for class 'asreml' simulate(object, nsim=100, seed = NULL, means=NULL, V, tolerance = 1E-10, update = TRUE, trace = FALSE, which="data", units = "ignore", ncores = 2, ...)
object |
An |
means |
The |
V |
The fitted variance |
nsim |
The number of data sets to be simulated. |
seed |
A single value, interpreted as an integer, that specifies the
starting value of the random number generator. The "L'Ecuyer-CMRG" random
generator is used and |
tolerance |
The value such that eigenvalues less than it are considered to be zero. |
update |
If |
trace |
If |
which |
The quantities from the simulated data set to be stored. Any combination of
|
units |
A |
ncores |
A |
... |
Other arguments that are passed down to the function asreml. Changes to the models are not allowed. Other changes are dangerous and generally should be avoided. |
Generate nsim
sets of data and analyse them using asreml
using the model in object
, performing the generation and analysis of several
sets in parallel. Note, if the analysis for a data set does
not converge in maxiter
iterations, it is discarded and
a replacement data set generated. The value of maxiter
can be specified
in the call to simulate.asreml
. The fitted values and residuals are extracted
as required. If aom = TRUE
when the simulated data are analysed, standardised
conditional residuals are stored. If which
includes residuals
or
fitted
, the specified quantities for the observed data are added to the
data.frame
on which the fit in object
is based.
A list
with the following components whose presence depends on the setting of
which
:
observed: present if which
includes residuals
or fitted
,
in which case it will be the data.frame
on which the fit in
object
is based, with residuals
and/or fitted
.
data: present if which
includes data
, a data.frame
containing the simulated data sets.
fitted: present if which
includes fitted
, a data.frame
containing the fitted values from the analyses of the simulated data sets.
residuals: present if which
includes residuals
, a data.frame
containing the residuals from the analyses of the simulated data sets.
Chris Brien
asreml
, newfit.asreml
, variofaces.asreml
, plotVariofaces.data.frame
,
set.seed
.
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce residuals from 100 simulated data sets resid <- simulate(current.asr, V=V, which="residuals", ncores = parallel::detectCores()) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce residuals from 100 simulated data sets resid <- simulate(current.asr, V=V, which="residuals", ncores = parallel::detectCores()) ## End(Not run)
alldiffs.object
according to the predicted values
associated with a factor.Sorts the rows of the components in an alldiffs.object
(see as.alldiffs
) that are data.frames
and the rows and columns
of those that are matrices
according to the predicted values in the
predictions
component. These predicted values are generally obtained using
predict.asreml
by specifying a classify
term comprised of one or
more variables. Generally, the values associated with one variable are sorted in
parallel within each combination of values of the other variables. When there is more
than one variable in the classify
term, the sorting is controlled using
one or more of sortFactor
, sortParallelToCombo
and sortOrder
.
If there is only one variable in the classify
then all components are sorted
according to the order of the complete set of predictions.
Note that renewClassify.alldiffs
is called after sorting to ensure that
the order of the rows and columns of the components is in standard order for the new
variable order.
## S3 method for class 'alldiffs' sort(x, decreasing = FALSE, classify = NULL, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, ...)
## S3 method for class 'alldiffs' sort(x, decreasing = FALSE, classify = NULL, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, ...)
x |
An |
decreasing |
A |
classify |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
... |
further arguments passed to or from other methods. Not used at present. |
The basic technique is to change the order of the levels of the sortFactor
within the predictions
and, if present, backtransforms
components so
that they are ordered for a subset of predicted values, one for each levels of the
sortFactor
. When the classify
term consists of more than one
variable then a subset of one combination of the values of variables other than
the sortFactor
, the sortParallelToCombo
combination, must be chosen for determining the
order of the sortFactor
levels. Then the sorting of the rows (and columns)
will be in parallel within each combination of the values of sortParallelToCombo
variables:
the classify
term, excluding the sortFactor
.
The alldiffs.object
supplied with the following components,
if present, sorted: predictions
, vcov
, backtransforms
, differences
,
p.differences
and sed
. Also, the sortFactor
and sortOrder
attributes are set.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.predictions.frame
, renewClassify.alldiffs
,
redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
,
predictPlus.asreml
, predictPresent.asreml
##Halve WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) #Use sort.alldiffs and save order for use with other response variables TS.diffs.sort <- sort(TS.diffs, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.diffs.sort, which = "sortOrder") #Analyse Turbidity m2.asr <- asreml(fixed = Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m2.asr) #Use pH sort.order to sort Turbidity alldiffs object diffs2.sort <- predictPlus(m2.asr, classify = "Sources:Type", pairwise = FALSE, error.intervals = "Stand", tables = "none", present = c("Type","Species","Sources"), sortFactor = "Sources", sortOrder = sort.order) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) #Use sort.alldiffs and save order for use with other response variables TS.diffs.sort <- sort(TS.diffs, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.diffs.sort, which = "sortOrder") #Analyse Turbidity m2.lmer <- lmerTest::lmer(Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m2.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object, sorting it using the pH sort.order and check its validity TS.vcov <- vcov(TS.emm) TS.diffs2.sort <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df, sortFactor = "Sources", sortOrder = sort.order) validAlldiffs(TS.diffs2.sort) }
##Halve WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) #Use sort.alldiffs and save order for use with other response variables TS.diffs.sort <- sort(TS.diffs, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.diffs.sort, which = "sortOrder") #Analyse Turbidity m2.asr <- asreml(fixed = Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m2.asr) #Use pH sort.order to sort Turbidity alldiffs object diffs2.sort <- predictPlus(m2.asr, classify = "Sources:Type", pairwise = FALSE, error.intervals = "Stand", tables = "none", present = c("Type","Species","Sources"), sortFactor = "Sources", sortOrder = sort.order) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) #Use sort.alldiffs and save order for use with other response variables TS.diffs.sort <- sort(TS.diffs, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.diffs.sort, which = "sortOrder") #Analyse Turbidity m2.lmer <- lmerTest::lmer(Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m2.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object, sorting it using the pH sort.order and check its validity TS.vcov <- vcov(TS.emm) TS.diffs2.sort <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df, sortFactor = "Sources", sortOrder = sort.order) validAlldiffs(TS.diffs2.sort) }
predictions.frame
according to the predicted values
associated with a factor.Sorts the rows of a predictions.frame
according to the predicted values
in the predictions.frame
. These predicted values are generally obtained using
predict.asreml
by specifying a classify
term comprised of one or
more variables. Generally, the values associated with one variable are sorted in
parallel within each combination of values of the other variables. When there is more
than one variable in the classify
term, the sorting is controlled using
one or more of sortFactor
, sortParallelToCombo
and sortOrder
.
If there is only one variable in the classify
then the predictions.frame
is sorted according to the order of the complete set of predictions.
## S3 method for class 'predictions.frame' sort(x, decreasing = FALSE, classify, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, ...)
## S3 method for class 'predictions.frame' sort(x, decreasing = FALSE, classify, sortFactor = NULL, sortParallelToCombo = NULL, sortNestingFactor = NULL, sortOrder = NULL, ...)
x |
|
decreasing |
A |
classify |
A |
sortFactor |
A |
sortParallelToCombo |
A |
sortNestingFactor |
A |
sortOrder |
A The following creates a |
... |
further arguments passed to or from other methods. Not used at present. |
The basic technique is to change the order of the levels of the sortFactor
within the predictions.frame
so
that they are ordered for a subset of predicted values, one for each levels of the
sortFactor
. When the classify
term consists of more than one
variable then a subset of one combination of the values of variables other than
the sortFactor
, the sortParallelToCombo
combination, must be chosen for determining the
order of the sortFactor
levels. Then the sorting of the rows (and columns)
will be in parallel within each combination of the values of sortParallelToCombo
variables:
the classify
term, excluding the sortFactor
.
The sorted predictions.frame
. Also, the sortFactor
and
sortOrder
attributes are set.
Chris Brien
as.predictions.frame
, print.predictions.frame
,
sort.alldiffs
, predictPlus.asreml
, predictPresent.asreml
##Halve WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) #Use sort.predictions.frame and save order for use with other response variables TS.preds <- TS.diffs$predictions TS.preds.sort <- sort(TS.preds, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.preds.sort, which = "sortOrder") #Analyse Turbidity m2.asr <- asreml(fixed = Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m2.asr) #Use pH sort.order to sort Turbidity alldiffs object TS.diffs2 <- predictPlus(m2.asr, classify = "Sources:Type", pairwise = FALSE, error.intervals = "Stand", tables = "none", present = c("Type","Species","Sources")) TS.preds2 <- TS.diffs2$predictions TS.preds2.sort <- sort(TS.preds, sortFactor = "Sources", sortOder = sort.order) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) #Use sort.predictions.frame and save order for use with other response variables TS.preds.sort <- sort(TS.preds, classify = "Sources:Type", sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.preds.sort, which = "sortOrder") #Analyse Turbidity m2.lmer <- lmerTest::lmer(Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m2.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) }
##Halve WaterRunoff data to reduce time to execute data(WaterRunoff.dat) tmp <- subset(WaterRunoff.dat, Date == "05-18") ##Use asreml to get predictions and associated statistics ## Not run: #Analyse pH m1.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m1.asr, NULL, NULL) current.asrt <- as.asrtests(m1.asr) current.asrt <- rmboundary(current.asrt) m1.asr <- current.asrt$asreml.obj #Get predictions and associated statistics TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = m1.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) #Use sort.predictions.frame and save order for use with other response variables TS.preds <- TS.diffs$predictions TS.preds.sort <- sort(TS.preds, sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.preds.sort, which = "sortOrder") #Analyse Turbidity m2.asr <- asreml(fixed = Turbidity ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= tmp) current.asrt <- as.asrtests(m2.asr) #Use pH sort.order to sort Turbidity alldiffs object TS.diffs2 <- predictPlus(m2.asr, classify = "Sources:Type", pairwise = FALSE, error.intervals = "Stand", tables = "none", present = c("Type","Species","Sources")) TS.preds2 <- TS.diffs2$predictions TS.preds2.sort <- sort(TS.preds, sortFactor = "Sources", sortOder = sort.order) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { #Analyse pH m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) #Use sort.predictions.frame and save order for use with other response variables TS.preds.sort <- sort(TS.preds, classify = "Sources:Type", sortFactor = "Sources", sortParallelToCombo = list(Type = "Control")) sort.order <- attr(TS.preds.sort, which = "sortOrder") #Analyse Turbidity m2.lmer <- lmerTest::lmer(Turbidity ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(tmp)) TS.emm <- emmeans::emmeans(m2.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) }
alldiffs.object
according to the supplied condition.Subsets each of the components of an alldiffs.object
. The subset is
determined by applying the condition to the prediction
component to
determine which of its rows are to be included in the subset. Then, if present,
this subset is applied to the rows of backtransforms
and to the rows
and columns of differences
, p.differences
and sed
components. In addition, if sed
is present, recalcLSD.alldiffs
is called to recalculate the values in the LSD.frame
stored in the
LSD
component, with any arguments supplied via the ...
argument passed ot it.
The select
argument of subset
is not implemented, but can be
achieved for variables in the classify
using the rmClassifyVars
argument.
## S3 method for class 'alldiffs' subset(x, subset = rep(TRUE, nrow(x$predictions)), rmClassifyVars = NULL, ...)
## S3 method for class 'alldiffs' subset(x, subset = rep(TRUE, nrow(x$predictions)), rmClassifyVars = NULL, ...)
x |
An |
subset |
A |
rmClassifyVars |
A |
... |
further arguments passed to |
An alldiffs.object
with the following components of the supplied
alldiffs.object
subsetted, if present in the original object:
predictions
, vcov
, backtransforms
, differences
,
p.differences
and sed
. In addition, if sed
is present, the
LSD.frame
in the LSD
component will be recalculated.
Chris Brien
as.alldiffs
, allDifferences.data.frame
,
print.alldiffs
, sort.alldiffs
, redoErrorIntervals.alldiffs
, recalcLSD.alldiffs
, predictPlus.asreml
, predictPresent.asreml
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Use subset.alldiffs to select a subset of the alldiffs object TS.diffs.subs <- subset(TS.diffs, subset = grepl("R", Sources, fixed = TRUE) & Type %in% c("Control","Medicinal")) }
data(WaterRunoff.dat) ##Use asreml to get predictions and associated statistics ## Not run: asreml.options(keep.order = TRUE) #required for asreml-R4 only current.asr <- asreml(fixed = pH ~ Benches + (Sources * (Type + Species)), random = ~ Benches:MainPlots, keep.order=TRUE, data= WaterRunoff.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) TS.diffs <- predictPlus.asreml(classify = "Sources:Type", asreml.obj = current.asr, tables = "none", wald.tab = current.asrt$wald.tab, present = c("Type","Species","Sources")) ## End(Not run) ## Use lmeTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(pH ~ Benches + (Sources * (Type + Species)) + (1|Benches:MainPlots), data=na.omit(WaterRunoff.dat)) TS.emm <- emmeans::emmeans(m1.lmer, specs = ~ Sources:Type) TS.preds <- summary(TS.emm) den.df <- min(TS.preds$df, na.rm = TRUE) ## Modify TS.preds to be compatible with a predictions.frame TS.preds <- as.predictions.frame(TS.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) ## Form an all.diffs object and check its validity TS.vcov <- vcov(TS.emm) TS.diffs <- allDifferences(predictions = TS.preds, classify = "Sources:Type", vcov = TS.vcov, tdf = den.df) validAlldiffs(TS.diffs) } ## Plot p-values for predictions obtained using asreml or lmerTest if (exists("TS.diffs")) { ##Use subset.alldiffs to select a subset of the alldiffs object TS.diffs.subs <- subset(TS.diffs, subset = grepl("R", Sources, fixed = TRUE) & Type %in% c("Control","Medicinal")) }
list
that contains a subset of the components of the supplied
list
.Select components of a list
specified by a list of numbers or names,
or by a logical indicating for each component of the list whether or not it is to
be retained.
## S3 method for class 'list' subset(x, select = 1:length(x), ...)
## S3 method for class 'list' subset(x, select = 1:length(x), ...)
x |
An |
select |
A |
... |
further arguments passed to or from other methods. Not used at present. |
A list
with just the subset of the components from x
. If the
components of x
are named, then these names are retained in the subset
list
.
Chris Brien
x <- list(1:3,letters[1:3],LETTERS[1:3]) y <- subset.list(x, select = c(1,3)) y <- subset.list(x, select = c(TRUE,FALSE,TRUE)) names(x) <- LETTERS[1:3] y <- subset.list(x, select = c(1,3)) z <- subset.list(x, select = LETTERS[c(1,3)]) x <- list(1:3,letters[1:3],LETTERS[1:3]) names(x)[c(1,3)] <- LETTERS[c(1,3)] z <- subset.list(x, select = c(1,2)) v <- subset.list(x)
x <- list(1:3,letters[1:3],LETTERS[1:3]) y <- subset.list(x, select = c(1,3)) y <- subset.list(x, select = c(TRUE,FALSE,TRUE)) names(x) <- LETTERS[1:3] y <- subset.list(x, select = c(1,3)) z <- subset.list(x, select = LETTERS[c(1,3)]) x <- list(1:3,letters[1:3],LETTERS[1:3]) names(x)[c(1,3)] <- LETTERS[c(1,3)] z <- subset.list(x, select = c(1,2)) v <- subset.list(x)
asreml
and records the result in an asrtests.object
.Tests for a single term, using a REML ratio test (REMLRT) for a random term or based
on Wald statistics for a fixed term. The term must be in the fitted model.
A random term is removed from the model fit and a REMLRT is
performed using REMLRT.asreml
. It compares the fit of the model in
asreml.obj
and the newly fitted model without the term
.
If the newly fitted model is retained, any boundary terms are then removed
using rmboundary.asrtests
.
For a fixed term, the probability of the Wald
statistics is extracted from the pseudo-anova table produced by
wald.asreml
. If this is available in the asrtests.object
, it is
used; otherwise wald.asreml
is called to add it to the
asrtests.object
. Whether nonsignificant terms are dropped is controlled
by drop.ran.ns
for random terms and drop.fix.ns
for fixed terms. A row is
added to the test.summary
data.frame
for the term that is tested.
## S3 method for class 'asrtests' testranfix(asrtests.obj, term=NULL, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, drop.ran.ns = TRUE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, drop.fix.ns = FALSE, denDF="numeric", dDF.na = "none", dDF.values = NULL, IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'asrtests' testranfix(asrtests.obj, term=NULL, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, drop.ran.ns = TRUE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, drop.fix.ns = FALSE, denDF="numeric", dDF.na = "none", dDF.values = NULL, IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
asrtests.obj |
An |
term |
A single model term that is valid in |
alpha |
The significance level for the test. |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
drop.ran.ns |
A |
positive.zero |
Indicates whether the hypothesized values for the
variance components being tested are on the boundary
of the parameter space. For example, this is true
for positively-constrained variance components that,
under the reduced model, are zero. This argument does
not need to be set if |
bound.test.parameters |
Indicates whether for the variance components
being tested, at least some of the hypothesized values
are on the boundary of the parameter space.
The possibilities are |
bound.exclusions |
A |
REMLDF |
A |
drop.fix.ns |
A |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
dDF.na |
The method to use to obtain substitute denominator degrees of freedom.
when the numeric or algebraic methods produce an |
dDF.values |
A |
IClikelihood |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
set.terms |
A character vector specifying the terms that are to have
bounds and/or initial values set prior to fitting.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
Further arguments passed to |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
.
If the term
is not in the model, then the supplied asreml
object will be returned. Also, reml.test
will have the likelihood
ratio and the p-value set to NA
and the degrees of freedom to zero.
Similarly, the row of test.summary
for the term
will have
its name, DF set to NA, p-value set to NA
, and action set to Absent.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
asremlPlus-package
, as.asrtests
,
chooseModel.asrtests
, REMLRT.asreml
, rmboundary.asrtests
,
newfit.asreml
, changeModelOnIC.asrtests
, changeTerms.asrtests
, reparamSigDevn.asrtests
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test nugget term current.asrt <- testranfix(current.asrt, "units", positive=TRUE) ## End(Not run)
asrtests.object
.Fits a new residual formula
using asreml-R4
(replaces the rcov
formula
of asreml-R3) and tests
whether the change is significant. If simpler = FALSE
the model
to be fitted must be more complex than the one whose fit has been stored in
asrtests.obj
. That is, the new model must have more parameters.
However, if simpler = TRUE
the model to be fitted must be simpler
than the one whose fit has been stored in asrtests.obj
in that it
must have fewer parameters. Any boundary terms are removed using
rmboundary.asrtests
, which may mean that the models are not
nested. The test is a REML likelihood ratio test that is performed using
REMLRT.asreml
, which is only valid if the models are nested.
It compares the newly fitted model with the fit of the model in
asrtest.obj
. If the two models have the same number of variance
parameters, then no change is made to the residual. A row is added to the
test.summary
data.frame
using the supplied label
.
## S3 method for class 'asrtests' testresidual(asrtests.obj, terms=NULL, label = "R model", simpler = FALSE, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, denDF="numeric", IClikelihood = "none", update = TRUE, trace = FALSE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'asrtests' testresidual(asrtests.obj, terms=NULL, label = "R model", simpler = FALSE, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, denDF="numeric", IClikelihood = "none", update = TRUE, trace = FALSE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
asrtests.obj |
an |
terms |
A model for the |
label |
A character string to use as the label in |
simpler |
A logical indicating whether the new model to be fitted is
simpler than the already fitted model whose fit is stored in
|
alpha |
The significance level for the test. |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
positive.zero |
Indicates whether the hypothesized values for the
variance components being tested are on the boundary
of the parameter space. For example, this is true
for positively-constrained variance components that,
under the reduced model, are zero. This argument does
not need to be set if |
bound.test.parameters |
Indicates whether for the variance components
being tested, at least some of the hypothesized values
are on the boundary of the parameter space.
The possibilities are |
bound.exclusions |
A |
REMLDF |
A |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
IClikelihood |
A |
update |
If |
trace |
If |
set.terms |
A |
ignore.suffices |
A |
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
Further arguments passed to |
An asrtests.object
containing the components (i) asreml.obj
,
(ii) wald.tab
, and (iii) test.summary
.
If the term
is not in the model, then the supplied asreml.obj
will be returned. Also, reml.test
will have the likelihood
ratio and the p-value set to NA
and the degrees of freedom to zero.
Similarly, the row of test.summary
for the term
will have
its name, a p-value set to NA
, and action set to Absent.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
asremlPlus-package
, as.asrtests
, changeTerms.asrtests
, chooseModel.asrtests
,
REMLRT.asreml
, rmboundary.asrtests
, newfit.asreml
, testswapran.asrtests
,
changeModelOnIC.asrtests
, changeTerms.asrtests
, reparamSigDevn.asrtests
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary(current.asrt) # Test Row autocorrelation current.asrt <- testresidual(current.asrt, "~ Row:ar1(Column)", label="Row autocorrelation", simpler=TRUE) print(current.asrt) ## End(Not run)
asrtests.object
.Fits a new random model using asreml
by removing oldterms
and adding newterms
. If simpler = FALSE
the model to be fitted
must be more complex than the one whose fit has been stored in
asrtests.obj
. That is, the new model must have more parameters.
However, if simpler = TRUE
the model to be fitted must be simpler
than the one whose fit has been stored in asrtests.obj
in that it
must have fewer parameters. The test is a REML ratio test that is performed using
REMLRT.asreml
, which is only valid if the models are nested.
It compares the newly fitted model with the fit of the model in
asrtests.obj
. A row is added to the test.summary
data.frame
using the supplied label
. If the newly fitted model
is retained, any boundary terms are then removed using
rmboundary.asrtests
. If the models are not nested, then using
changeModelOnIC.asrtests
may be the more appropriate approach
for comparing models.
## S3 method for class 'asrtests' testswapran(asrtests.obj, oldterms = NULL, newterms = NULL, label = "Swap in random model", simpler = FALSE, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, denDF="numeric", IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
## S3 method for class 'asrtests' testswapran(asrtests.obj, oldterms = NULL, newterms = NULL, label = "Swap in random model", simpler = FALSE, alpha = 0.05, allow.unconverged = TRUE, allow.fixedcorrelation = TRUE, checkboundaryonly = FALSE, positive.zero = FALSE, bound.test.parameters = "none", bound.exclusions = c("F","B","S","C"), REMLDF = NULL, denDF="numeric", IClikelihood = "none", trace = FALSE, update = TRUE, set.terms = NULL, ignore.suffices = TRUE, bounds = "P", initial.values = NA, ...)
asrtests.obj |
an |
oldterms |
Terms, stored as a |
newterms |
Terms, stored as a |
simpler |
A logical indicating whether the new model to be fitted. after the
changes made as a result of swapping |
alpha |
The significance level for the test. |
allow.unconverged |
A |
allow.fixedcorrelation |
A |
checkboundaryonly |
If |
label |
A character string to use as the label in |
positive.zero |
Indicates whether the hypothesized values for the
variance components being tested are on the boundary
of the parameter space. For example, this is true
for positively-constrained variance components that,
under the reduced model, are zero. This argument does
not need to be set if |
bound.test.parameters |
Indicates whether for the variance components
being tested, at least some of the hypothesized values
are on the boundary of the parameter space.
The possibilities are |
bound.exclusions |
A |
REMLDF |
A |
denDF |
Specifies the method to use in computing approximate denominator
degrees of freedom when |
IClikelihood |
A |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
update |
If |
set.terms |
A character vector specifying the terms that are to have
bounds and/or initial values set prior to fitting.
The names must match those in the |
ignore.suffices |
A logical vector specifying whether the suffices of the
|
bounds |
A |
initial.values |
A character vector specifying the initial values for
the terms specified in |
... |
Further arguments passed to |
An asrtests.object
for a fitted model that is a list
containing the components (i) asreml.obj
, (ii) wald.tab
(iii) test.summary
.
If the term
is not in the model, then the supplied asreml
object will be returned. Also, reml.test
will have the likelihood
ratio and the p-value set to NA
and the degrees of freedom to zero.
Similarly, the row of test.summary
for the term
will have
its name, a p-value set to NA
, and action set to Absent.
Chris Brien
Kenward, M. G., & Roger, J. H. (1997). Small sample inference for fixed effects from restricted maximum likelihood. Biometrics, 53, 983-997.
as.asrtests
, chooseModel.asrtests
,
REMLRT.asreml
, rmboundary.asrtests
, newfit.asreml
, testresidual.asrtests
,
changeModelOnIC.asrtests
, changeTerms.asrtests
, reparamSigDevn.asrtests
## Not run: current.asrt <- testswapran(current.asrt, oldterms = "str(~ Cart/xDays, ~us(2):id(184))", newterms = "Cart/xDays", pos = FALSE, label = "Intercept/Slope correlation", simpler = TRUE) print(current.asrt) ## End(Not run)
## Not run: current.asrt <- testswapran(current.asrt, oldterms = "str(~ Cart/xDays, ~us(2):id(184))", newterms = "Cart/xDays", pos = FALSE, label = "Intercept/Slope correlation", simpler = TRUE) print(current.asrt) ## End(Not run)
Checks that an object
is an alldiffs.object
of S3-class
alldiffs
containing the components asreml.obj
,
wald.tab
and test.summary
.
validAlldiffs(object)
validAlldiffs(object)
object |
an |
TRUE
or a character
describing why the object
is not a valid alldiffs.object
.
Chris Brien
alldiffs.object
, is.alldiffs
, as.alldiffs
, validPredictionsFrame
, validAsrtests
data(Oats.dat) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## check the validity of Var.diffs validAlldiffs(Var.diffs) }
data(Oats.dat) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) den.df <- min(Var.preds$df) ## Modify Var.preds to be compatible with a predictions.frame Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) Var.vcov <- vcov(Var.emm) Var.sed <- NULL ## Form an all.diffs object Var.diffs <- as.alldiffs(predictions = Var.preds, classify = "Nitrogen:Variety", sed = Var.sed, vcov = Var.vcov, tdf = den.df) ## check the validity of Var.diffs validAlldiffs(Var.diffs) }
Checks that an object
is an asrtests.object
of S3-class
asrtests
containing the components asreml.obj
,
wald.tab
and test.summary
.
validAsrtests(object)
validAsrtests(object)
object |
an |
TRUE
or a character
describing why the object
is not a valid asrtests.object
.
Chris Brien
asrtests.object
, is.asrtests
, as.asrtests
, validPredictionsFrame
, validAlldiffs
## Not run: library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # check validity of current.asrt validAsrtests(current.asrt) ## End(Not run)
## Not run: library(dae) library(asreml) library(asremlPlus) ## use ?Wheat.dat for data set details data(Wheat.dat) # Fit initial model current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) # Load current fit into an asrtests object current.asrt <- as.asrtests(current.asr, NULL, NULL) # check validity of current.asrt validAsrtests(current.asrt) ## End(Not run)
Checks that an object
is a predictions.frame
of S3-class data.frame
that contains the columns
predicted.value, standard.error and est.status.
validPredictionsFrame(object)
validPredictionsFrame(object)
object |
TRUE
or a character
describing why the object
is not a valid predictions.frame
.
Chris Brien
predictions.frame
, is.predictions.frame
,
as.predictions.frame
, validAsrtests
, validAlldiffs
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the predictions.frame is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
data(Oats.dat) ## Use asreml to get predictions and associated statistics ## Not run: m1.asr <- asreml(Yield ~ Nitrogen*Variety, random=~Blocks/Wplots, data=Oats.dat) current.asrt <- as.asrtests(m1.asr) Var.pred <- asreml::predict.asreml(m1.asr, classify="Nitrogen:Variety", sed=TRUE) if (getASRemlVersionLoaded(nchar = 1) == "3") Var.pred <- Var.pred$predictions Var.preds <- as.predictions.frame(Var.pred$pvals, se = "std.error", est.status = "status") ## End(Not run) ## Use lmerTest and emmmeans to get predictions and associated statistics if (requireNamespace("lmerTest", quietly = TRUE) & requireNamespace("emmeans", quietly = TRUE)) { m1.lmer <- lmerTest::lmer(Yield ~ Nitrogen*Variety + (1|Blocks/Wplots), data=Oats.dat) Var.emm <- emmeans::emmeans(m1.lmer, specs = ~ Nitrogen:Variety) Var.preds <- summary(Var.emm) Var.preds <- as.predictions.frame(Var.preds, predictions = "emmean", se = "SE", interval.type = "CI", interval.names = c("lower.CL", "upper.CL")) } if (exists("Var.preds")) { ## Check the class and validity of the predictions.frame is.predictions.frame(Var.preds) validPredictionsFrame(Var.preds) }
A function that produces a plot for each face of an empirical 2D
variogram
based on residuals produced after the fitting of a model
using the function asreml
.
It also adds envelopes to the plot by simulating data sets in parallel
from a multivariate normal distribution with expectation equal to the
fitted values obtained from the fixed and spline terms and variance
matrix equal to the fitted variance matrix
(Stefanova, Smith & Cullis, 2009). The plot is controlled by the
residual
model, which must consist of two factors corresponding to
the two physical dimensions underlying the data. It can also have a third
term involving the at
or dsum
function that defines sections
of the data, such as experiments in different environments.
In this case, the two variogram faces are produced for each section.
## S3 method for class 'asreml' variofaces(asreml.obj, means=NULL, V=NULL, sections = NULL, row.factor = NULL, col.factor = NULL, nsim=100, seed = NULL, extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), tolerance=1E-10, units = "ignore", update = TRUE, trace = FALSE, graphics.device=NULL, ncores = 2, ...)
## S3 method for class 'asreml' variofaces(asreml.obj, means=NULL, V=NULL, sections = NULL, row.factor = NULL, col.factor = NULL, nsim=100, seed = NULL, extra.matrix = NULL, ignore.terms = NULL, fixed.spline.terms = NULL, bound.exclusions = c("F","B","S","C"), tolerance=1E-10, units = "ignore", update = TRUE, trace = FALSE, graphics.device=NULL, ncores = 2, ...)
asreml.obj |
An |
means |
The |
V |
The fitted variance |
sections |
A single |
row.factor |
A single |
col.factor |
A single |
nsim |
The number of data sets to be simulated in obtaining the envelopes. |
seed |
A single value, interpreted as an integer, that specifies the
starting value of the random number generator. The "L'Ecuyer-CMRG" random
generator is used and |
extra.matrix |
A |
ignore.terms |
A |
fixed.spline.terms |
A |
bound.exclusions |
A |
tolerance |
The value such that eigenvalues less than it are considered to be zero. |
units |
A |
update |
If |
trace |
If TRUE then partial iteration details are displayed when ASReml-R functions are invoked; if FALSE then no output is displayed. |
graphics.device |
A |
ncores |
A |
... |
Other arguments that are passed down to the function |
The residual
model is scanned to ensure that it involves only two factors
not included in the at
function, and to see if it has a third factor in
an at
function. If so, the faces of the 2D variogram, each based on one
of the two non-at
factors, are derived from the residuals in the
supplied asreml
object using asreml.variogram
, this yielding the observed
variogram
faces. If aom
was set to TRUE
for the asreml
object, the standardized conditional residuals are used.
Then nsim
data sets are generated by
adding the fitted.values
, extracted from the asreml
object,
to a vector of values randomly generated from a normal distribution with
expectation zero and variance matrix V
. Each data set is analyzed
using the model in object
and several sets are generated and analyzed
in parallel. The variogram values for the faces are
obtained using asreml.variogram
stored. Note, if the analysis for a
data set does not converge in maxiter
iterations, it is discarded and
a replacement data set generated. The value of maxiter
can be specified
in the call to variofaces.asreml
. Plots are produced for each face and
include the observed values and the 2.5%, 50% & 97.5% quantiles.
A list
with the following components:
face1: a data.frame
containing the variogram values on
which the plot for the first dimension is based.
face2: a data.frame
containing the variogram values on
which the plot for the second dimension is based.
Chris Brien
Stefanova, K. T., Smith, A. B. & Cullis, B. R. (2009) Enhanced diagnostics for the spatial analysis of field trials. Journal of Agricultural, Biological, and Environmental Statistics, 14, 392–410.
asremlPlus-package
, asreml
, newfit.asreml
,
plotVariofaces.data.frame
, simulate.asreml
, set.seed
.
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce variogram faces plot (Stefanaova et al, 2009) variofaces(current.asr, V=V, ncores = parallel::detectCores()) ## End(Not run)
## Not run: data(Wheat.dat) current.asr <- asreml(yield ~ Rep + WithinColPairs + Variety, random = ~ Row + Column + units, residual = ~ ar1(Row):ar1(Column), data=Wheat.dat) current.asrt <- as.asrtests(current.asr, NULL, NULL) current.asrt <- rmboundary.asrtests(current.asrt) # Form variance matrix based on estimated variance parameters s2 <- current.asr$sigma2 gamma.Row <- current.asr$gammas[1] gamma.unit <- current.asr$gammas[2] rho.r <- current.asr$gammas[4] rho.c <- current.asr$gammas[5] row.ar1 <- mat.ar1(order=10, rho=rho.r) col.ar1 <- mat.ar1(order=15, rho=rho.c) V <- gamma.Row * fac.sumop(Wheat.dat$Row) + gamma.unit * diag(1, nrow=150, ncol=150) + mat.dirprod(col.ar1, row.ar1) V <- s2*V #Produce variogram faces plot (Stefanaova et al, 2009) variofaces(current.asr, V=V, ncores = parallel::detectCores()) ## End(Not run)
This data is from an experiment to investigate the quality of water runoff. However, it has been modified to hide the true identity of the Species and Sources. It is used to provide executable examples of the functions listed under Examples.
data(WaterRunoff.dat)
data(WaterRunoff.dat)
A data.frame containing 440 observations of 13 variables.
Chris Brien
Kazemi, F. (pers. comm.)
chooseModel.asrtests
, reparamSigDevn.asrtests
, plotPredictions.data.frame
, predictPlus.asreml
,
predictPresent.asreml
The data appears in Gilmour et al. (1995) and is from a field experiment designed to compare the
performance of 25 varieties of spring wheat. An analysis of it using asreml is presented by
Butler et al. (2023, Section 7.6), although they suggest that it is a barley experiment.
It is used in the Wheat vignettes [Enter vignette(package = "asremlPlus")
] as an
executable example of the use of the asremlPlus
to analyse a data set.
The experiment was conducted at Slate Hall Farm, UK, in 1976 and was designed as
a balanced lattice square with 6 replicates laid out in a 10 15 rectangular
grid. The columns in the data frame are: Rep, Row, Column, WithinColPairs, Variety, yield.
The response variable is the grain yield.
data(Wheat.dat)
data(Wheat.dat)
A data.frame containing 150 observations of 6 variables.
Chris Brien
Butler, D. G., Cullis, B. R., Gilmour, A. R., Gogel, B. J. and Thompson, R. (2023). ASReml-R Reference Manual Version 4.2. VSN International Ltd, https://asreml.kb.vsni.co.uk/.
Gilmour, A. R., et al. (1995) Average Information REML: An efficient algorithm for variance parameter estimation in linear mixed models. Biometrics, 51, 1440-1450.