[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[igraph] sampling subgraphs from different sizes using igraph
From: |
Juan Fernández Tajes |
Subject: |
[igraph] sampling subgraphs from different sizes using igraph |
Date: |
Tue, 13 Oct 2015 11:50:02 +0100 |
Dear list,
I have an igraph object `mygraph` with ~10,000 nodes and ~145,000 edges, and I
need to create a number of subgraphs from this graph but with different sizes.
What I need is to create subgraphs from a determined size (from 5 nodes to 500
nodes) where all the nodes are connected in each subgraph. I need to create
~1,000 subgraphs for each size (i.e, 1000 subgraphs for size5, 1000 for size 6,
and so on), and then calculate some values for each graph according to
different node attributes.
I have some code but it takes a long time to do all the calculations. I thought
in using the `graphlets` function in order to get the different sizes but every
time I run it on my computer it crash due to memory issues.
Here is the code I am using:
First step was to create a function to create the subgraphs of different sizes
and do the calculations needed.
random_network<-function(size,G){
score_fun<-function(g){
subsum <-
sum(V(g)$weight*V(g)$RWRNodeweight)/sqrt(sum(V(g)$RWRNodeweight^2))
subsum
}
genes.idx <- V(G)$name
perm <- c()
while(length(perm)<1000){
seed<-sample(genes.idx,1)
while( length(seed)<size ){
tmp.neigh <- V(G)[unlist(neighborhood(G,1,seed))]$name
tmp.neigh <- setdiff(tmp.neigh, seed)
if( length(tmp.neigh)>0 )
seed<-c(seed,sample(tmp.neigh,1)) else break
}
if( length(seed)==size )
perm <- c(perm,score_fun(induced.subgraph(G,seed)))
}
perm
}
Second step was to apply the function to the actual graph
### generate some example data
my_graph <- erdos.renyi.game(10000, 0.0003)
V(my_graph)$name <- 1:vcount(my_graph)
V(my_graph)$weight <- rnorm(10000)
V(my_graph)$RWRNodeweight <- runif(10000, min=0, max=0.05)
### Run the code to get the subgraphs from different size and do
calculations based on nodes
genesets.length<- seq(5:500)
genesets.length.null.dis <- list()
for(k in 5:max(genesets.length){
genesets.length.null.dis[[as.character(k)]] <-
random_network(size=k,G=my_graph)
}
Thanks in advance
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [igraph] sampling subgraphs from different sizes using igraph,
Juan Fernández Tajes <=