ffmanova: Fifty-fifty MANOVA

View source: R/ffmanova.R

ffmanovaR Documentation

Fifty-fifty MANOVA

Description

General linear modeling of fixed-effects models with multiple responses is performed. The function calculates 50-50 MANOVA p-values, ordinary univariate p-values and adjusted p-values using rotation testing.

Usage

ffmanova(
  formula,
  data = NULL,
  stand = TRUE,
  nSim = 0,
  verbose = TRUE,
  returnModel = TRUE,
  returnY = FALSE,
  returnYhat = FALSE,
  returnYhatStd = FALSE,
  newdata = NULL,
  linComb = NULL,
  nonEstimableAsNA = TRUE,
  outputClass = "ffmanova"
)

Arguments

formula

Model formula. See "Note" below.

data

An optional data frame or list.

stand

Logical. Standardization of responses. This option has effect on the 50-50 MANOVA testing and the calculation of exVarSS.

nSim

nonnegative integer. The number of simulations to use in the rotation tests. Can be a single nonnegative integer or a list of values for each term.

verbose

Logical. If TRUE, the rotation tests print trace information.

returnModel

When TRUE, and object, ffModel, with output from ffModelObj is included in output. Must be TRUE to enable predictions by predict.ffmanova.

returnY

Response matrix, Y, in output when TRUE.

returnYhat

Matrix Yhat of fitted values corresponding to Y in output when TRUE.

returnYhatStd

Standard errors, YhatStd, in output when TRUE.

newdata

Possible input to predict.ffmanova. When non-NULL, prediction results will be included output.

linComb

Possible input to predict.ffmanova in addition to newdata.

nonEstimableAsNA

Will be used as input to predict.ffmanova when newdata and/or linComb is non-NULL.

outputClass

When set to, "anova", ffAnova results will be produced.

Details

An overall p-value for all responses is calculated for each model term. This is done using the 50-50 MANOVA method, which is a modified variant of classical MANOVA made to handle several highly correlated responses.

Ordinary single response p-values are produced. By using rotation testing these can be adjusted for multiplicity according to familywise error rates or false discovery rates. Rotation testing is a Monte Carlo simulation framework for doing exact significance testing under multivariate normality. The number of simulation repetitions (nSim) must be chosen.

Unbalance is handled by a variant of Type II sums of squares, which has several nice properties:

  1. Invariant to ordering of the model terms.

  2. Invariant to scale changes.

  3. Invariant to how the overparameterization problem of categorical variable models is solved (how constraints are defined).

  4. Whether two-level factors are defined to be continuos or categorical does not influence the results.

  5. Analysis of a polynomial model with a single experimental variable produce results equivalent to the results using an orthogonal polynomial.

In addition to significance testing an explained variance measure, which is based on sums of sums of squares, is computed for each model term.

Value

An object of class "ffmanova", which consists of the concatenated results from the underlying functions manova5050, rotationtests and unitests:

termNames

model term names

exVarSS

explained variances calculated from sums of squares summed over all responses

df

degrees of freedom - adjusted for other terms in model

df_om

degrees of freedom - adjusted for terms contained in actual term

nPC

number of principal components used for testing

nBU

number of principal components used as buffer components

exVarPC

variance explained by nPC components

exVarBU

variance explained by (nPC+nBU) components

pValues

50-50 MANOVA p-values

stand

logical. Whether the responses are standardised.

stat

The test statistics as t-statistics (when single degree of freedom) or F-statistics

pRaw

matrix of ordinary p-values from F- or t-testing

pAdjusted

matrix of adjusted p-values according to familywise error rates

pAdjFDR

matrix of adjusted p-values according to false discovery rates

simN

number of simulations performed for each term (same as input)

The matrices stat, pRaw, pAdjusted and pAdjFDR have one row for each model term and one column for each response.

According to the input parameters, additional elements can be included in output.

Note

The model is specified with formula, in the same way as in lm (except that offsets are not supported). See lm for details. Input parameters formula and data will be interpreted by model.frame.

Author(s)

Øyvind Langsrud and Bjørn-Helge Mevik

References

Langsrud, Ø. (2002) 50-50 Multivariate Analysis of Variance for Collinear Responses. The Statistician, 51, 305–317.

Langsrud, Ø. (2003) ANOVA for Unbalanced Data: Use Type II Instead of Type III Sums of Squares. Statistics and Computing, 13, 163–167.

Langsrud, Ø. (2005) Rotation Tests. Statistics and Computing, 15, 53–60.

Moen, B., Oust, A., Langsrud, Ø., Dorrell, N., Gemma, L., Marsden, G.L., Hinds, J., Kohler, A., Wren, B.W. and Rudi, K. (2005) An explorative multifactor approach for investigating global survival mechanisms of Campylobacter jejuni under environmental conditions. Applied and Environmental Microbiology, 71, 2086-2094.

See also https://www.langsrud.com/stat/program.htm.

See Also

ffAnova and predict.ffmanova.

Examples


data(dressing)

# An ANOVA model with all design variables as factors 
# and with visc as the only response variable.
# Classical univariate Type II test results are produced.
ffmanova(visc ~ (factor(press) + factor(stab) + factor(emul))^2 + day,
         data = dressing) 

# A second order response surface model with day as a block factor. 
# The properties of the extended Type II approach is utilized. 
ffmanova(visc ~ (press + stab + emul)^2 + I(press^2)+ I(stab^2)+ I(emul^2)+ day,
         data = dressing)

# 50-50 MANOVA results with the particle-volume curves as 
# multivariate responses. The responses are not standardized.
ffmanova(pvol ~ (press + stab + emul)^2 + I(press^2)+ I(stab^2)+ I(emul^2)+ day,
         stand = FALSE, data = dressing)

# 50-50 MANOVA results with 9 rheological responses (standardized).
# 99 rotation simulation repetitions are performed. 
res <- ffmanova(rheo ~ (press + stab + emul)^2 + I(press^2)+ I(stab^2)+ I(emul^2)+ day,
                nSim = 99, data = dressing)
res$pRaw      #  Unadjusted single responses p-values 
res$pAdjusted #  Familywise error rate adjusted p-values 
res$pAdjFDR   #  False discovery rate adjusted p-values

# As above, but this time 9999 rotation simulation repetitions 
# are performed, but only for the model term stab^2. 
res <- ffmanova(rheo ~ (press + stab + emul)^2 + I(press^2)+ I(stab^2)+ I(emul^2)+ day,
                nSim = c(0,0,0,0,0,9999,0,0,0,0,0), data = dressing)
res$pAdjusted[6,] # Familywise error rate adjusted p-values for stab^2
res$pAdjFDR[6,]   # False discovery rate adjusted p-values for stab^2

# Note that the results of the first example above can also be 
# obtained by using the car package.
## Not run: 
   require(car)
   Anova(lm(visc ~ (factor(press) + factor(stab) + factor(emul))^2 + day,
         data = dressing), type = "II")
## End(Not run)

# The results of the second example differ because Anova does not recognise 
# linear terms (emul) as being contained in quadratic terms (I(emul^2)).
# A consequence here is that the clear significance of emul disappears.
## Not run: 
   require(car)
   Anova(lm(visc ~ (press + stab + emul)^2 + I(press^2)+ I(stab^2)+ I(emul^2)+ day,
         data = dressing), type="II")
## End(Not run)


ffmanova documentation built on Oct. 18, 2023, 5:08 p.m.

Related to ffmanova in ffmanova...