| randrot {randRotation} | R Documentation |
Perform random data rotation of a previously initialised object (see
initRandrot) associated with the
null hypothesis H0: β_coef.h = 0.
randrot(object, ...) ## S4 method for signature 'initRandrot' randrot(object, ...) ## S4 method for signature 'initRandrotW' randrot(object, ...) ## S4 method for signature 'initBatchRandrot' randrot(object, ...)
object |
An initialised object of class
|
... |
further arguments passed to
|
This function generates a randomly rotated dataset from an initialised
randrot object (see initRandrot).
See also package vignette for application examples. Only the numerical matrix
of rotated data is returned, no design matrix, weights or other info is
return for efficiency purposes. Please consider that, if you e.g. use
weights or if you use
rotateStat, you may need to forward
the design matrix X, weights etc. to subsequent analyses. See
the example in rotateStat.
Details on the calculation of a rotated dataset are given in
initRandrot,
(Langsrud 2005) and (Hettegger et al. 2021).
numeric matrix of rotated data under the specified combined
null hypothesis.
Peter Hettegger
Hettegger P, Vierlinger K, Weinhaeusel A (2021).
“Random rotation for identifying differentially expressed genes with linear models following batch effect correction.”
Bioinformatics.
ISSN 1367-4803, doi: 10.1093/bioinformatics/btab063, https://doi.org/10.1093/bioinformatics/btab063.
Langsrud O (2005).
“Rotation tests.”
Statistics and Computing, 15(1), 53–60.
ISSN 09603174, doi: 10.1007/s11222-005-4789-5, https://doi.org/10.1007/s11222-005-4789-5.
# For further examples see '?rotateStat' and package vignette.
#set.seed(0)
# Dataframe of phenotype data (sample information)
# We simulate 2 sample classes processed in 3 batches
pdata <- data.frame(batch = rep(1:3, c(10,10,10)),
phenotype = rep(c("Control", "Cancer"), c(5,5)))
features <- 100
# Matrix with random gene expression data
edata <- matrix(rnorm(features * nrow(pdata)), features)
rownames(edata) <- paste("feature", 1:nrow(edata))
mod1 <- model.matrix(~phenotype, pdata)
# Initialisation of the random rotation class
init1 <- initBatchRandrot(Y = edata, X = mod1, coef.h = 2,
batch = pdata$batch)
init1
### Fit model to original data
fit.orig <- lm.fit(mod1, t(edata))
head(t(coef(fit.orig)))
### Fit model to rotated data
edata.rot <- randrot(init1)
fit.rot <- lm.fit(mod1, t(edata.rot))
head(t(coef(fit.rot)))
# Note that the coefficients stay equal if we regress only on the
# non-hypothesis coefficients
mod0 <- model.matrix(~1, pdata)
fit.orig0 <- lm.fit(mod0, t(edata))
fit.rot0 <- lm.fit(mod0, t(edata.rot))
head(t(coef(fit.orig0)))
head(t(coef(fit.rot0)))