Categories
Uncategorized

Calculating Freeman’s Group Degree Centrality Function – R

This function takes an nCol file and returns L.C. Freeman’s Group Degree Centrality:

Degree centrality (CD) can be calculated as follows:

For the following graph

we can count the number of connections (edges) each node has (its degree),

n1    3
n2    1
n3    1
n4    2
n5    1

The maximum degree is 3 for n1. Therefore we subtract the other node degrees from this

n1    3    (3-3)    0
n2    1    (3-1)    2
n3    1    (3-1)    2
n4    2    (3-2)    1
n5    1    (3-1)    2

Then we add all values from the difference to get our enumerator,

0+2+2+1+2 = 7

We then have to calculate the denominator, where n is the total number of nodes, in this case 5.

(n-1)(n-2)

(5-1)(5-2)=12

Finally, we divide both numbers to get the group’s CD

7/12 = 0.58

This is the R bit.

Format of the input file is:

user1    user2    2010-01-01
user3    user4    2001-04-03

The file is loaded to R as a data frame, with stringsAsFactors=FALSE

df<-data.frame(read.csv('location/of/ncol.txt',dep=" ",stringsAsFactors=FASLE,header=FALSE))

# Run the function
ncol.CDi(df)

This is the function

ncol.CDi<-function(df){
	# Remove the date column
	df[3]<-NULL
	# Remove self Loops
	dx<-df[!df[1]==df[2], ]
	# removes duplicates
	dx1<-unique(dx)
	dx2<-data.frame(unique(t(apply(dx1, 1, sort))))
	# Move all into one Column
	colnames(dx2)<-c('x','x')
	dx3<-rbind(dx2[1],dx2[2])
	# gets frequency 
	df1<-data.frame(table(dx3))
	# order according to frequency
	df2<-df1[with(df1,order(-Freq)),]
    rownames(df2) <- 1:nrow(df2)
	# calculate biggest value
	bv<-df2[1,2]
	# Create new column with difference
	# between biggest value and node value
	df2$diff<-bv-df2[2]
	# Add all differences
	cSum<-sum(df2$diff)
	# dive them by total possible
	# and return 0-1 index
	nN<-length(df2[,1])
	tpn<-(nN-1)*(nN-2)
	cSum/tpn
}

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s