isa2 (version 0.3.4)

isa.sweep: Create a hierarchical structure of ISA biclusters

Description

Relate the biclusters found in many ISA runs on the same input data.

Usage

"isa.sweep"(data, ...) "sweep.graph"(sweep.result, ...)

Arguments

data
The input matrix.
...
Additional arguments, see details below. sweep.graph has no additional arguments currently.
sweep.result
An ISA result with hierarchy information in the seed data, typically calculated by the isa.sweep function.

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 layout graph attribute contains a two-column matrix with the coordinates for an optimal tree-like layout to plot the graph.
2
The width and height graph attributes contain the optimal width and height of the plot, in inches.
3
The thr vertex attribute contains the ISA threshold that varies along the sweeping.
4
The id vertex attribute contains the id of the module, these correspond to the indices in the result matrix.
5
The rows and cols vertex attributes contain the number of rows and columns in the module.
6
The shape, size, size2, label vertex attributes and the arrow.size edge attribute contain various graphical parameters.

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 or isa.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.

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

Run this code
## 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)
  }
}
    

Run the code above in your browser using DataCamp Workspace