Transform count data to log2-counts per million (logCPM), estimate the mean-variance relationship and use this to compute appropriate observation-level weights. The data are then ready for linear mixed modelling with dream(). This method is the same as limma::voom(), except that it allows random effects in the formula

## Usage

voomWithDreamWeights(
counts,
formula,
data,
lib.size = NULL,
normalize.method = "none",
span = 0.5,
weights = NULL,
plot = FALSE,
save.plot = FALSE,
quiet = FALSE,
BPPARAM = SerialParam(),
...
)

## Arguments

counts

a numeric matrix containing raw counts, or an ExpressionSet containing raw counts, or a DGEList object. Counts must be non-negative and NAs are not permitted.

formula

specifies variables for the linear (mixed) model. Must only specify covariates, since the rows of exprObj are automatically used as a response. e.g.: ~ a + b + (1|c) Formulas with only fixed effects also work, and lmFit() followed by contrasts.fit() are run.

data

data.frame with columns corresponding to formula

lib.size

numeric vector containing total library sizes for each sample. Defaults to the normalized (effective) library sizes in counts if counts is a DGEList or to the columnwise count totals if counts is a matrix.

normalize.method

the microarray-style normalization method to be applied to the logCPM values (if any). Choices are as for the method argument of normalizeBetweenArrays when the data is single-channel. Any normalization factors found in counts will still be used even if normalize.method="none".

span

width of the lowess smoothing window as a proportion.

weights

Can be a numeric matrix of individual weights of same dimensions as the counts, or a numeric vector of sample weights with length equal to ncol(counts)

plot

logical, should a plot of the mean-variance trend be displayed?

save.plot

logical, should the coordinates and line of the plot be saved in the output?

quiet

suppress message, default FALSE

BPPARAM

parameters for parallel evaluation

...

other arguments are passed to lmer.

## Value

An EList object just like the result of limma::voom()

## Details

Adapted from vomm() in limma v3.40.2

limma::voom()

## Examples

# library(variancePartition)
library(edgeR)
library(BiocParallel)

data(varPartDEdata)

# normalize RNA-seq counts
dge = DGEList(counts = countMatrix)
dge = calcNormFactors(dge)

# specify formula with random effect for Individual
form <- ~ Disease + (1|Individual)

# compute observation weights
vobj = voomWithDreamWeights( dge[1:20,], form, metadata)
#> Memory usage to store result: >49.7 Kb
#> Dividing work into 1 chunks...
#>
#> Total:0.3 s

# fit dream model
res = dream( vobj, form, metadata)
#> Dividing work into 1 chunks...
#>
#> Total:0.9 s
res = eBayes(res)

# extract results
topTable(res, coef="Disease1", number=3)
#>                                    logFC  AveExpr        t      P.Value
#> ENST00000456159.1 gene=MET     1.0182945 2.458926 6.167647 3.897397e-07
#> ENST00000418210.2 gene=TMEM64  1.0375652 4.715367 6.494865 6.543907e-07
#> ENST00000555834.1 gene=RPS6KL1 0.9355651 5.272063 5.736384 1.484023e-06