Function to generate a subgraph of a direct acyclic graph (DAG) induced by the input annotation data

Description

dDAGannotate is supposed to produce a subgraph induced by the input annotation data, given a direct acyclic graph (DAG; an ontology). The input is a graph of "igraph" or "graphNET" object, a list of the vertices containing annotation data, and the mode defining the paths to the root of DAG. The induced subgraph contains vertices (with annotation data) and their ancestors along with the defined paths to the root of DAG. The annotations at these vertices (including their ancestors) are also updated according to the true-path rule: a gene annotated to a term should also be annotated by its all ancestor terms.

Usage

dDAGannotate(g, annotations, path.mode = c("all_paths", "shortest_paths", "all_shortest_paths"), 
  verbose = TRUE)

Arguments

g
an object of class "igraph" or "graphNEL"
annotations
the vertices/nodes for which annotation data are provided
path.mode
the mode of paths induced by vertices/nodes with input annotation data. It can be "all_paths" for all possible paths to the root, "shortest_paths" for only one path to the root (for each node in query), "all_shortest_paths" for all shortest paths to the root (i.e. for each node, find all shortest paths with the equal lengths)
verbose
logical to indicate whether the messages will be displayed in the screen. By default, it sets to true for display

Value

  • subg: an induced subgraph, an object of class "igraph". In addition to the original attributes to nodes and edges, the return subgraph is also appended by new node attributes: "annotations", which contains a list of genes either as original annotations or inherited annotations; "IC", which stands for information content defined as negative 10-based log-transformed frequency of genes annotated to that term.

Note

For the mode "shortest_paths", the induced subgraph is the most concise, and thus informative for visualisation when there are many nodes in query, while the mode "all_paths" results in the complete subgraph.

Examples

# 1) load HPPA as igraph object ig.HPPA <-dRDataLoader(RData='ig.HPPA')
'ig.HPPA' (from package 'dnet' version 1.0.11) has been loaded into the working environment (at 2017-03-27 19:53:34)
g <- ig.HPPA # 2) load human genes annotated by HPPA org.Hs.egHPPA <- dRDataLoader(RData='org.Hs.egHPPA')
'org.Hs.egHPPA' (from package 'dnet' version 1.0.11) has been loaded into the working environment (at 2017-03-27 19:53:34)
GS <- org.Hs.egHPPA # as 'GS' object # 3) prepare for annotation data # randomly select vertices with annotation data annotations <- GS$gs[sample(1:length(GS$gs),5)] # 4) obtain the induced subgraph # 4a) based on all possible paths (i.e. the complete subgraph induced) dDAGannotate(g, annotations, path.mode="all_paths", verbose=TRUE)
At level 12, there are 1 nodes, and 1 incoming neighbors. At level 11, there are 1 nodes, and 2 incoming neighbors. At level 10, there are 1 nodes, and 1 incoming neighbors. At level 9, there are 2 nodes, and 3 incoming neighbors. At level 8, there are 4 nodes, and 3 incoming neighbors. At level 7, there are 2 nodes, and 2 incoming neighbors. At level 6, there are 4 nodes, and 4 incoming neighbors. At level 5, there are 6 nodes, and 5 incoming neighbors. At level 4, there are 5 nodes, and 4 incoming neighbors. At level 3, there are 4 nodes, and 4 incoming neighbors. At level 2, there are 4 nodes, and 1 incoming neighbors. At level 1, there are 1 nodes, and 0 incoming neighbors.
IGRAPH DN-- 35 37 -- + attr: name (v/c), term_id (v/c), term_name (v/c), term_distance | (v/n), annotations (v/x), IC (v/n), relation (e/c) + edges (vertex names): [1] HP:0000118->HP:0000152 HP:0000118->HP:0000707 HP:0000118->HP:0000924 [4] HP:0000118->HP:0001626 HP:0000152->HP:0000234 HP:0000707->HP:0012639 [7] HP:0000924->HP:0011842 HP:0001626->HP:0001627 HP:0012639->HP:0000759 [10] HP:0012639->HP:0002011 HP:0000234->HP:0000271 HP:0001627->HP:0002564 [13] HP:0011842->HP:0003330 HP:0000271->HP:0000153 HP:0000759->HP:0000764 [16] HP:0002011->HP:0012443 HP:0002011->HP:0002977 HP:0002564->HP:0011603 [19] HP:0003330->HP:0100671 HP:0012443->HP:0100547 HP:0000153->HP:0000163 + ... omitted several edges
# 4b) based on shortest paths (i.e. the most concise subgraph induced) dag <- dDAGannotate(g, annotations, path.mode="shortest_paths", verbose=TRUE)
At level 9, there are 1 nodes, and 1 incoming neighbors. At level 8, there are 2 nodes, and 2 incoming neighbors. At level 7, there are 2 nodes, and 2 incoming neighbors. At level 6, there are 4 nodes, and 4 incoming neighbors. At level 5, there are 5 nodes, and 5 incoming neighbors. At level 4, there are 5 nodes, and 4 incoming neighbors. At level 3, there are 4 nodes, and 4 incoming neighbors. At level 2, there are 4 nodes, and 1 incoming neighbors. At level 1, there are 1 nodes, and 0 incoming neighbors.
# 5) color-code nodes/terms according to the number of annotations data <- sapply(V(dag)$annotations, length) names(data) <- V(dag)$name visDAG(g=dag, data=data, node.info="both")