igraph-help
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]