isa.sweep {isa2} | R Documentation |
Create a hierarchical structure of ISA biclusters
Description
Relate the biclusters found in many ISA runs on the same input data.
Usage
## S4 method for signature 'matrix'
isa.sweep(data, ...)
## S4 method for signature 'list'
sweep.graph(sweep.result, ...)
Arguments
data |
The input matrix. |
... |
Additional arguments, see details
below. |
sweep.result |
An ISA result with hierarchy information in the
seed data, typically calculated by the |
Details
isa.sweep
can be called as
isa.sweep(data, normed.data, isaresult, method = c("cor"), neg.cor = TRUE, cor.limit = 0.9)
where the arguments are:
- data
The input matrix.
- normed.data
The normalized input matrix, usually the output of the
isa.normalize
function.- isaresult
An object containing the biclusters, the result of
isa
orisa.iterate
.- method
Character scalar giving the method to determine which seed converged which bicluster. Right now only ‘
cor
’ is supported, this is based on Pearson correlation.- neg.cor
Logical scalar, whether to consider negative correlation as convergence.
- cor.limit
Numeric scalar giving the minimum correlation for convergence.
Many ISA runs with different thresholds typically create a bunch of biclusters and it is useful to visualize how these are related.
From a set of biclusters for which of the thr.row
and
thr.col
parameters was the same, but the other was not,
isa.sweep
creates a hierarchy of modules.
The hierarchy is a directed graph of modules in which every node has
an out degree at most one. An edge pointing from module m
to
module n
means that module n
is “part of” module
m
; in the sense that an ISA iteration started from module
n
converges to module m
at the (milder) thresholds of
module m
.
The information about the module relationships is stored in a column of the seed data.
sweep.graph
takes the output of isa.sweep
and creates a
graph object of it. For this the ‘igraph’ package is required
to be installed on the system.
Value
isa.sweep
returns a named list with the same components as in
the input (isaresult
), but the ‘father
’ and the
‘level
’ columns are
added to the ‘seeddata
’ member. father
contains
the edges of the sweep graph: if bicluster m
is the father of
bicluster n
that means that bicluster n
converges to
bicluster m
at the same threshold parameters that were used to
find biclusters m
.
level
is a simple numbering of the different thresholds for
which the sweep tree was built. I.e. the most strict threshold is
level one, the second most is level two, etc.
sweep.graph
returns and igraph graph with a lot of attributes:
1 |
The |
2 |
The |
3 |
The |
4 |
The |
5 |
The |
6 |
The |
Author(s)
Gabor Csardi Gabor.Csardi@unil.ch
References
Bergmann S, Ihmels J, Barkai N: Iterative signature algorithm for the analysis of large-scale gene expression data Phys Rev E Stat Nonlin Soft Matter Phys. 2003 Mar;67(3 Pt 1):031902. Epub 2003 Mar 11.
Ihmels J, Friedlander G, Bergmann S, Sarig O, Ziv Y, Barkai N: Revealing modular organization in the yeast transcriptional network Nat Genet. 2002 Aug;31(4):370-7. Epub 2002 Jul 22
Ihmels J, Bergmann S, Barkai N: Defining transcription modules using large-scale gene expression data Bioinformatics 2004 Sep 1;20(13):1993-2003. Epub 2004 Mar 25.
See Also
isa2-package for a short introduction on the Iterative
Signature Algorithm. See isa
for an easy way of running
ISA.
Examples
## In-silico data
set.seed(1)
insili <- isa.in.silico()
## Do ISA with a bunch of row thresholds while keeping the column
## threshold fixed. This is quite an artificial example...
isares <- isa(insili[[1]], thr.row=c(0.5,1,2), thr.col=0)
## Create a nice tree from the modules, we need the normed data for this
nm <- isa.normalize(insili[[1]])
isa.tree <- isa.sweep(insili[[1]], nm, isares)
network <- sweep.graph(isa.tree)
## Plot the network of modules, only if the igraph package is
## installed
if (interactive() && require(igraph) &&
compareVersion(packageDescription("igraph")$Version, "0.6")>=0) {
lab <- paste(sep="", seq_len(ncol(isa.tree$rows)), ": ",
colSums(isa.tree$rows!=0), ",",
colSums(isa.tree$columns!=0))
par(mar=c(1,1,1,1))
roots <- tapply(topological.sort(network, mode="out"),
clusters(network)$membership, function(x) x[1])
rootlevel <- isa.tree$seeddata$level-1
coords <- layout.reingold.tilford(network, root=roots,
rootlevel=rootlevel[roots+1])
plot(network, layout=coords,
vertex.shape="rectangle", vertex.color="green",
vertex.label=lab, vertex.size=30, vertex.size2=10)
}
## Plot the modules themselves as well
if (interactive()) {
plotModules(isa.tree)
}
## Yet another plot, the scores for the rows within the modules
if (interactive()) {
layout(matrix( 1:15, ncol=3 ))
for (i in seq(ncol(isa.tree$rows))) {
par(mar=c(2,2,1,1))
plot(isa.tree$rows[,i], axes=FALSE, ylim=c(-1,1))
axis(1); axis(2)
text(nrow(isa.tree$rows), 1, adj=c(1,1), paste(sep="", "#", i), cex=2)
}
}