
From:  S. M. Ali Abbas 
Subject:  Re: [igraph] degree according to vertex attributes 
Date:  Mon, 01 Oct 2012 17:02:59 +0100 
Useragent:  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120907 Thunderbird/15.0.1 
On a similar note, if you are interested to calculate EI
(ExternalInternal) Index (Krackhardt and Stern (1988)), which
identifies group embedding by using this formula: E  I / ( E + I ) Details: http://www.faculty.ucr.edu/~hanneman/nettext/C8_Embedding.html#EI I have written a function sometime ago which returns a matrix for each unique value of a particular attribute of vertices in a graph. For instance, in your case, it will a return 2 x (unique cities) matrix, where the first column will be the city's name and the second will be its EI index. You just need to call this function as: resultantEIMatrix < getEIIndex (g, "City") Here goes the function: # Returns a matrix of 2 x length(unique_attribute_values) getEIIndex < function(graph, colName){ # Get unique_col values for colName attributes for vertices unique_col < unique(get.vertex.attribute(graph, colName)) # Create a matrix with 2 columns and length(unique_col) number of rows # First column will contain the unique value of an attribute, and the second one the calcuate EI Index m=matrix(nrow=length(unique_col),ncol=2) # For each unique column value, identify external and internal edges for (j in 1:length(unique_col)){ # Get the jth unique attribute value val < unique_col[j] # Get all vertices which have the same attribute values as val tmp1 < which(get.vertex.attribute(graph, colName) == val) # Get all vertices which have different attribute values than val tmp2 < which(get.vertex.attribute(graph, colName) != val) # Count all edges having the same attribute value i <length(E(graph)[tmp1 %% tmp1]) # Count all edges having different attribute value e < length(E(graph)[tmp1 %% tmp2]) # Calculate the EI Index ei < (ei)/(e+i) # Put the unique value at column 1 m[j, 1]= val # Put the calculated EI index at column 2 m[j, 2]= ei } # Return the matrix m } } Hope it help! Cheers, Ali On 01/10/2012 16:29, Tamás Nepusz
wrote:
Hi Dominik, As you wrote earlier, the first problem can be resolved by using delete.vertices=FALSE when calling subgraph.edges (sorry, I thought this is the default). Re the second problem: use get.edgelist(graph, names=FALSE); this will give you a numeric edge list and this is what you need in later steps. Best, Tamas _______________________________________________ igraphhelp mailing list address@hidden https://lists.nongnu.org/mailman/listinfo/igraphhelp 
[Prev in Thread]  Current Thread  [Next in Thread] 