Categories

# 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<-NULL
# Remove self Loops
dx<-df[!df==df, ]
# 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,dx2)
# 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
# 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
}
```