Nothing
## Copyright 2010 Laurent Jacob, Pierre Neuvial and Sandrine Dudoit.
## This file is part of DEGraph.
## DEGraph is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
## DEGraph is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with DEGraph. If not, see <http://www.gnu.org/licenses/>.
#########################################################################/**
## @RdocFunction hyper.test
##
## @title "Performs an hypergeometric test of enrichment of a set of
## hypotheses in significant elements"
##
## \description{
## @get "title".
## }
##
## @synopsis
##
## \arguments{
## \item{p.values}{A named @numeric vector giving the p-values of all
## tested elements.}
## \item{testSet}{A @character vector giving the ids of the elements in the
## tested set. Elements of 'testSet' must have a match in 'names(p.values)'.}
## \item{thr}{A @numeric value between 0 and 1 giving the threshold on
## p-values at which an element is declared to be significant.}
## \item{universe}{An @integer value giving the number of elelments in the
## considered universe. Defaults to 'length(p.values)'.}
## \item{verbose}{If @TRUE, extra information is output.}
## }
##
## \value{
## A @list with class "htest" containing the following components:
## \describe{
## \item{statistic}{A @numeric value, the test statistic.}
## \item{p.value}{A @numeric value, the corresponding p-value.}
## }
## }
##
## @author
##
## \seealso{
## @see "AN.test"
## @see "BS.test"
## @see "graph.T2.test"
## }
##
## @examples "../incl/tests.Rex"
##
##*/########################################################################
hyper.test <- function(p.values, testSet, thr=0.001, universe=length(p.values), verbose=FALSE) {
## - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
## Validate arguments
## - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
## Argument 'p.values'
p.values <- Arguments$getNumerics(p.values)
pnames <- names(p.values)
pnames <- Arguments$getCharacters(pnames)
if (length(pnames)==0) {
throw("'names(p.values)' should not be NULL for a hypergeometric test to be performed.")
}
## Argument 'testSet'
testSet <- Arguments$getCharacters(testSet)
if (length(testSet)==0) {
throw("'testSet' should have at least one element for a hypergeometric test to be performed.")
}
## Argument 'thr'
thr <- Arguments$getNumeric(thr)
## Argument 'universe'
universe <- Arguments$getNumeric(universe)
## Argument 'verbose'
verbose <- Arguments$getVerbose(verbose)
if (verbose) {
cat <- R.utils::cat
pushState(verbose)
on.exit(popState(verbose))
}
## - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
## Hypergeometric testing
## - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mm <- match(testSet, pnames)
isNA <- is.na(mm)
idxs <- which(isNA)
if (length(idxs)) {
verbose && cat(verbose, "Elements of 'testSet' not found in 'p.values':")
verbose && str(verbose, pnames[idxs])
}
idxs <- which(!isNA)
mm <- mm[idxs]
p <- length(mm)
if (p==0) {
warning("No elements of 'testSet' found in 'p.values': returning NA.")
qHG <- NA
pHG <- NA
} else {
qHG <- sum(p.values[mm] < thr) # How many significant elements in the set
mHG <- p # How many elements in the set
nHG <- universe - p # How many elements outside the set
kHG <- sum(p.values < thr)# How many significant elements in total
pHG <- 1-phyper(qHG, mHG, nHG, kHG)
}
res <- list(statistic=qHG, p.value=pHG)
class(res) <- "htest"
res
}
############################################################################
## HISTORY
## 2010-10-08
## o Now validating argument 'verbose'.
## 2010-09-25
## o Arguments are now validated.
## o Now returning NA when no elements of 'testSet' is in 'p.values'.
## o Now throwing an error when 'names(p.values)' is NULL.
## 2010-09-23
## o Added an example.
## o Made more generic by replacing 'gene' by 'element', 'DE' by
## 'significant', and 'gene set' by 'set'.
## o Now returns an object of class "htest".
############################################################################
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.