Title: | derfinder helper package |
---|---|
Description: | Helper package for speeding up the derfinder package when using multiple cores. This package is particularly useful when using BiocParallel and it helps reduce the time spent loading the full derfinder package when running the F-statistics calculation in parallel. |
Authors: | Leonardo Collado-Torres [aut, cre] , Andrew E. Jaffe [aut] , Jeffrey T. Leek [aut, ths] |
Maintainer: | Leonardo Collado-Torres <[email protected]> |
License: | Artistic-2.0 |
Version: | 1.41.0 |
Built: | 2024-10-30 05:43:06 UTC |
Source: | https://github.com/bioc/derfinderHelper |
Extract chunks from a DataFrame and get the F-statistics on the rows of
data
, comparing the models mod
(alternative) and mod0
(null).
fstats.apply( index = Rle(TRUE, nrow(data)), data, mod, mod0, adjustF = 0, lowMemDir = NULL, method = "Matrix", scalefac = 32 )
fstats.apply( index = Rle(TRUE, nrow(data)), data, mod, mod0, adjustF = 0, lowMemDir = NULL, method = "Matrix", scalefac = 32 )
index |
An index (logical Rle is the best for saving memory) indicating which rows of the DataFrame to use. |
data |
The DataFrame containing the coverage information. Normally
stored in |
mod |
The design matrix for the alternative model. Should be m by p where p is the number of covariates (normally also including the intercept). |
mod0 |
The design matrix for the null model. Should be m by p_0. |
adjustF |
A single value to adjust that is added in the denominator of the F-stat calculation. Useful when the Residual Sum of Squares of the alternative model is very small. |
lowMemDir |
The directory where the processed chunks are saved when
using |
method |
Has to be either 'Matrix' (default), 'Rle' or 'regular'. See details. |
scalefac |
The scaling factor used in
|
If lowMemDir
is specified then index
is expected to
specify the chunk number.
fstats.apply has three different implemenations which are controlled
by the method
parameter. method='regular'
coerces the data to
a standard 'matrix' object. method='Matrix'
coerces the data to a
sparseMatrix which reduces the required memory. This method
is only usable when the projection matrices have row sums equal to 0. Note
that these row sums are not exactly 0 due to how the computer works, thus
leading to very small numerical differences in the F-statistics calculated
versus method='regular'
. Finally, method='Rle'
calculates the
F-statistics using the Rle compressed data without coercing it to other
types of objects, thus using less memory that the other methods. However,
it's speed is affected by the number of samples (n) as the current
implementation requires n (n + 1) operations, so it's only recommended for
small data sets. method='Rle'
does result in small numerical
differences versus method='regular'
.
Overall method='Matrix'
is faster than the other options and requires
less memory than method='regular'
. With tiny example data sets,
method='Matrix'
can be slower than method='regular'
because the
coercion step is slower.
In derfinder versions <= 0.0.62, method='regular'
was the only option
available.
A numeric Rle with the F-statistics per base for the chunk in question.
Leonardo Collado-Torres, Jeff Leek
## Create some toy data library("IRanges") toyData <- DataFrame( "sample1" = Rle(sample(0:10, 1000, TRUE)), "sample2" = Rle(sample(0:10, 1000, TRUE)), "sample3" = Rle(sample(0:10, 1000, TRUE)), "sample4" = Rle(sample(0:10, 1000, TRUE)) ) ## Create the model matrices group <- c("A", "A", "B", "B") mod.toy <- model.matrix(~group) mod0.toy <- model.matrix(~ 0 + rep(1, 4)) ## Get the F-statistics fstats <- fstats.apply( data = toyData, mod = mod.toy, mod0 = mod0.toy, scalefac = 1 ) ## Example with data from derfinder package ## Not run: ## Load the data library("derfinder") ## Create the model matrices mod <- model.matrix(~ genomeInfo$pop) mod0 <- model.matrix(~ 0 + rep(1, nrow(genomeInfo))) ## Run the function system.time(fstats.Matrix <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "Matrix", scalefac = 1 )) fstats.Matrix ## Compare methods system.time(fstats.regular <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "regular" )) system.time(fstats.Rle <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "Rle" )) ## Small numerical differences can occur summary(fstats.regular - fstats.Matrix) summary(fstats.regular - fstats.Rle) ## You can make the effect negligible by appropriately rounding ## findRegions(cutoff) so the DERs will be the same regardless of the method ## used. ## Extra comparison, although the method to compare against is 'regular' summary(fstats.Rle - fstats.Matrix) ## End(Not run)
## Create some toy data library("IRanges") toyData <- DataFrame( "sample1" = Rle(sample(0:10, 1000, TRUE)), "sample2" = Rle(sample(0:10, 1000, TRUE)), "sample3" = Rle(sample(0:10, 1000, TRUE)), "sample4" = Rle(sample(0:10, 1000, TRUE)) ) ## Create the model matrices group <- c("A", "A", "B", "B") mod.toy <- model.matrix(~group) mod0.toy <- model.matrix(~ 0 + rep(1, 4)) ## Get the F-statistics fstats <- fstats.apply( data = toyData, mod = mod.toy, mod0 = mod0.toy, scalefac = 1 ) ## Example with data from derfinder package ## Not run: ## Load the data library("derfinder") ## Create the model matrices mod <- model.matrix(~ genomeInfo$pop) mod0 <- model.matrix(~ 0 + rep(1, nrow(genomeInfo))) ## Run the function system.time(fstats.Matrix <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "Matrix", scalefac = 1 )) fstats.Matrix ## Compare methods system.time(fstats.regular <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "regular" )) system.time(fstats.Rle <- fstats.apply( data = genomeData$coverage, mod = mod, mod0 = mod0, method = "Rle" )) ## Small numerical differences can occur summary(fstats.regular - fstats.Matrix) summary(fstats.regular - fstats.Rle) ## You can make the effect negligible by appropriately rounding ## findRegions(cutoff) so the DERs will be the same regardless of the method ## used. ## Extra comparison, although the method to compare against is 'regular' summary(fstats.Rle - fstats.Matrix) ## End(Not run)