Who are the key actors in the football network? What makes them the key actors
Calculate closeness, betweenness and eigenvector centrality measures for your network data, and bonachic-power if possible. Compare these measures to basic degree centrality measures. Try to interpret the results. Are there any interesting patterns in the distribution of measures or correlations between them that provide insight into the measures?
You may also want to identify whether the same node(s) are more/less central using the different measures, and see if you can find any patterns in the results based on which nodes are high/low on each measures. Discuss (with any related evidence) whether or not the node(s) behavior is in line with or violates expectations based on the degree centrality measure, comparing across those measures using a data frame similar to that constructed in the syntax. Be sure to share your assignment with group members for comments.
The eigenvector centrality determines how important the neighborhood of the nodes is in the network. The higher the eigenvalue centrality, the more important the neighbors of that node are with respect to other nodes in the network. (Jackson 08) The eigenvalues also take into account the proximity of the node to many other important nodes in the network.
AS Roma has the highest eigenvalue in the network. This can be an additional support to our previous speculation on how AS Roma might influential in the influx and outflow of football talent as they are well connected to the other influential nodes in our football transfer network.
temp <- igraph::centr_eigen(ig,directed=T)
transfer.nodes$eigen <- temp$vector
#arrange descending and return top 5 nodes
h <- arrange(transfer.nodes, desc(eigen))
kable(head(h))
name | degree | indegree | outdegree | eigen | |
---|---|---|---|---|---|
AS Roma | AS Roma | 78 | 39 | 39 | 1.0000000 |
Genoa CFC | Genoa CFC | 73 | 46 | 27 | 0.9612356 |
Inter Milan | Inter Milan | 68 | 32 | 36 | 0.8787351 |
ACF Fiorentina | ACF Fiorentina | 66 | 38 | 28 | 0.7988873 |
US Sassuolo | US Sassuolo | 70 | 35 | 35 | 0.7789739 |
AC Milan | AC Milan | 60 | 38 | 22 | 0.7611737 |
We compute the derived and reflected Eigenvector centrality to better understand whether the influence is more observed in the neighborhood of the nodes or is it more observed on the strength of the node itself.
matrix <- as.matrix(as_adjacency_matrix(ig, attr = "weight"))
#square the adjacency matrix
matsq<-t(matrix) %*% matrix
#Calculate the proportion of reflected centrality.
transfer.nodes$rc<-diag(matsq)/rowSums(matsq)
#replace missing values with 0
transfer.nodes$rc<-ifelse(is.nan(transfer.nodes$rc),0,transfer.nodes$rc)
#Calculate received eigenvalue centrality
transfer.nodes$eigen.rc<-transfer.nodes$eigen*transfer.nodes$rc
#Calculate the proportion of derived centrality.
transfer.nodes$dc<-1-diag(matsq)/rowSums(matsq)
#replace missing values with 0
transfer.nodes$dc<-ifelse(is.nan(transfer.nodes$dc),1,transfer.nodes$dc)
#Calculate received eigenvalue centrality
transfer.nodes$eigen.dc<-transfer.nodes$eigen*transfer.nodes$dc
name degree indegree outdegree eigen
FC Barcelona FC Barcelona 59 21 38 0.2704215
Chelsea FC Chelsea FC 48 12 36 0.2449357
rc eigen.rc dc eigen.dc
FC Barcelona 0.2218696 0.05999830 0.7781304 0.2104232
Chelsea FC 0.2352494 0.05762098 0.7647506 0.1873148
##cen <- eigen_centrality(ig, directed = TRUE)
#cen$vector
library(ggthemes)
transfer.nodes%>%
select(-name) %>%
gather() %>%
ggplot(aes(value)) +
geom_histogram() +
facet_wrap(~key, scales = "free")+
theme_minimal()
fashion(temp)
term outdegree degree indegree eigen.rc eigen.dc eigen
1 outdegree .94 .79 .67 .67 .69
2 degree .94 .95 .73 .79 .80
3 indegree .79 .95 .70 .82 .82
4 eigen.rc .67 .73 .70 .82 .86
5 eigen.dc .67 .79 .82 .82 1.00
6 eigen .69 .80 .82 .86 1.00
rplot(temp)
Betweeness centrality quantifies the number of times a node acts as a bridge along the shortest path between two other nodes.
transfer.nodes$betweeness <- igraph::betweenness(ig, directed=TRUE)
transfer.nodes%>%
arrange(desc(betweeness))%>%
slice(1:5)
name degree indegree outdegree
UC Sampdoria UC Sampdoria 57 32 25
Olympiacos Piraeus Olympiacos Piraeus 41 19 22
Genoa CFC Genoa CFC 73 46 27
ACF Fiorentina ACF Fiorentina 66 38 28
Hellas Verona Hellas Verona 39 27 12
eigen rc eigen.rc dc
UC Sampdoria 0.6156139 0.06250452 0.03847865 0.9374955
Olympiacos Piraeus 0.1548258 0.02184055 0.00338148 0.9781595
Genoa CFC 0.9612356 0.08798435 0.08457368 0.9120157
ACF Fiorentina 0.7988873 0.11743415 0.09381665 0.8825658
Hellas Verona 0.6603528 0.02847622 0.01880435 0.9715238
eigen.dc betweeness
UC Sampdoria 0.5771352 45262.42
Olympiacos Piraeus 0.1514443 43409.28
Genoa CFC 0.8766619 34603.48
ACF Fiorentina 0.7050706 31710.00
Hellas Verona 0.6415485 31489.50
transfer.nodes$constraint<-constraint(ig)
Authorities are those actors which get many incoming links from hubs, presumably because of their high quality relevant information. (Klien 16) In this case Juventus, Chelsea, Barcelona,PSG, Manchester United and Athleteco have the highest authority scores. This means that these clubs are attracting talent from the hubs like Real Madrid, which we will see includes Eden Hazard’s transfer in 2019
transfer.nodes$authority <- authority_score(ig)$vector
a <- transfer.nodes %>%
arrange(desc(authority))
kable(head(a))
name | degree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc | betweeness | constraint | authority | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Juventus FC | Juventus FC | 68 | 27 | 41 | 0.6770212 | 0.2150981 | 0.1456259 | 0.7849019 | 0.5313953 | 20394.667 | 0.1013719 | 1.0000000 |
Chelsea FC | Chelsea FC | 48 | 12 | 36 | 0.2449357 | 0.2352494 | 0.0576210 | 0.7647506 | 0.1873148 | 470.000 | 0.1043159 | 0.7752539 |
FC Barcelona | FC Barcelona | 59 | 21 | 38 | 0.2704215 | 0.2218696 | 0.0599983 | 0.7781304 | 0.2104232 | 4600.083 | 0.0962553 | 0.7566895 |
Paris Saint-Germain | Paris Saint-Germain | 37 | 17 | 20 | 0.3905048 | 0.2504831 | 0.0978149 | 0.7495169 | 0.2926900 | 1106.000 | 0.1181023 | 0.6491154 |
Manchester United | Manchester United | 29 | 15 | 14 | 0.1991738 | 0.2315679 | 0.0461223 | 0.7684321 | 0.1530515 | 1222.500 | 0.0935063 | 0.5523492 |
Atlético de Madrid | Atlético de Madrid | 48 | 26 | 22 | 0.3488429 | 0.1835874 | 0.0640432 | 0.8164126 | 0.2847998 | 1422.662 | 0.0980257 | 0.5507481 |
Many Ties to Peripheral Actors
name | degree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc | betweeness | constraint | authority | hub_score | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Aston Villa | Aston Villa | 35 | 27 | 8 | 0.2139009 | 0.1837553 | 0.0393054 | 0.8162447 | 0.1745954 | 788.000 | 0.1133398 | 0.1109352 | 0.2347654 |
Inter Milan | Inter Milan | 68 | 32 | 36 | 0.8787351 | 0.2193920 | 0.1927874 | 0.7806080 | 0.6859477 | 2799.590 | 0.0962341 | 0.2636786 | 0.7339420 |
Borussia Dortmund | Borussia Dortmund | 45 | 18 | 27 | 0.2370659 | 0.1480322 | 0.0350934 | 0.8519678 | 0.2019725 | 2073.000 | 0.0640196 | 0.1477605 | 0.5191494 |
ACF Fiorentina | ACF Fiorentina | 66 | 38 | 28 | 0.7988873 | 0.1174342 | 0.0938166 | 0.8825658 | 0.7050706 | 31709.998 | 0.1108554 | 0.0614752 | 0.4296561 |
Real Madrid | Real Madrid | 46 | 17 | 29 | 0.2296944 | 0.2975292 | 0.0683408 | 0.7024708 | 0.1613536 | 4185.762 | 0.1078723 | 0.3925985 | 1.0000000 |
RB Leipzig | RB Leipzig | 44 | 26 | 18 | 0.3082591 | 0.1717242 | 0.0529356 | 0.8282758 | 0.2553235 | 2936.417 | 0.0909443 | 0.1002923 | 0.3521672 |
Consider Real Madrid a hub given that their hub_score is 1. We can confirm this by looking at higher eigenvector derived centrality and lower reflected centrality.
A few ties to central actors =
bridges(ig)
+ 238/4386 edges from f1949b0 (vertex names):
[1] Maccabi Haifa ->Levski Sofia
[2] SC Farense ->Vancouver Whitecaps FC
[3] Moreirense FC ->Al-Batin FC
[4] Grenoble Foot 38 ->FC Famalicão
[5] CA Fénix ->FC Famalicão
[6] Maccabi Netanya ->Hapoel Beer Sheva
[7] Ironi Kiryat Shmona->Hapoel Beer Sheva
[8] Hapoel Haifa ->Hapoel Beer Sheva
[9] FC Basel 1893 U18 ->Juventus Primavera
[10] Amiens SC U19 ->Manchester United Youth
+ ... omitted several edges
name | degree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc | betweeness | constraint | authority | hub_score | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Maccabi Haifa | Maccabi Haifa | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
We test the understanding whether these teams actually serve as bridges in the network. By looking at the derived and reflected centrality scores, we see that the the reflected centrality for Maccabi Haifa is low while the derived centrality is high, thereby making it a bridge.
head(transfer.nodes)
name degree indegree outdegree
Aston Villa Aston Villa 35 27 8
Inter Milan Inter Milan 68 32 36
Borussia Dortmund Borussia Dortmund 45 18 27
ACF Fiorentina ACF Fiorentina 66 38 28
Real Madrid Real Madrid 46 17 29
RB Leipzig RB Leipzig 44 26 18
eigen rc eigen.rc dc eigen.dc
Aston Villa 0.2139009 0.1837553 0.03930541 0.8162447 0.1745954
Inter Milan 0.8787351 0.2193920 0.19278741 0.7806080 0.6859477
Borussia Dortmund 0.2370659 0.1480322 0.03509339 0.8519678 0.2019725
ACF Fiorentina 0.7988873 0.1174342 0.09381665 0.8825658 0.7050706
Real Madrid 0.2296944 0.2975292 0.06834078 0.7024708 0.1613536
RB Leipzig 0.3082591 0.1717242 0.05293556 0.8282758 0.2553235
betweeness constraint authority hub_score
Aston Villa 788.000 0.11333984 0.11093521 0.2347654
Inter Milan 2799.590 0.09623411 0.26367856 0.7339420
Borussia Dortmund 2073.000 0.06401961 0.14776045 0.5191494
ACF Fiorentina 31709.998 0.11085545 0.06147522 0.4296561
Real Madrid 4185.762 0.10787227 0.39259852 1.0000000
RB Leipzig 2936.417 0.09094430 0.10029228 0.3521672
tempo <-as.data.frame(brokerage(network, cl = get.vertex.attribute(network,"league"))$raw.nli)
head(tempo)
w_I w_O b_IO b_OI b_O t
Aston Villa 209 0 0 0 0 209
Inter Milan 925 0 0 0 0 925
Borussia Dortmund 416 0 0 0 0 416
ACF Fiorentina 897 0 0 0 0 897
Real Madrid 420 0 0 0 0 420
RB Leipzig 410 0 0 0 0 410
transfer.nodes<-transfer.nodes %>%
mutate(broker.tot = tempo$t, # AS ROMA, AS Monaco, US Sassuolo, Genoa CFC, Atlanta BC
broker.coord = tempo$w_I,
broker.itin = tempo$w_O, # Aston Villa, Inter Milan, Borussia Dortmund, ACF florentina
broker.rep = tempo$b_IO, # # Aston Villa, Inter Milan, Borussia Dortmund, ACF florentina
broker.gate = tempo$b_OI,
broker.lia = tempo$b_O)
broker <- transfer.nodes %>%
arrange(desc(broker.tot)) %>%
slice(1:10)
kable(head(broker))
name | degree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc | betweeness | constraint | authority | hub_score | broker.tot | broker.coord | broker.itin | broker.rep | broker.gate | broker.lia | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AS Roma | AS Roma | 78 | 39 | 39 | 1.0000000 | 0.1130986 | 0.1130986 | 0.8869014 | 0.8869014 | 20233.50 | 0.0830009 | 0.3603443 | 0.2527186 | 1286 | 1286 | 0 | 0 | 0 | 0 |
AS Monaco | AS Monaco | 72 | 39 | 33 | 0.3837432 | 0.1410820 | 0.0541392 | 0.8589180 | 0.3296040 | 920.00 | 0.0822568 | 0.2386720 | 0.6582977 | 1157 | 1157 | 0 | 0 | 0 | 0 |
US Sassuolo | US Sassuolo | 70 | 35 | 35 | 0.7789739 | 0.0487223 | 0.0379534 | 0.9512777 | 0.7410205 | 19581.79 | 0.1146313 | 0.1001784 | 0.1704004 | 1026 | 1026 | 0 | 0 | 0 | 0 |
Genoa CFC | Genoa CFC | 73 | 46 | 27 | 0.9612356 | 0.0879843 | 0.0845737 | 0.9120157 | 0.8766619 | 34603.48 | 0.1803853 | 0.1525313 | 0.4153337 | 1015 | 1015 | 0 | 0 | 0 | 0 |
Atalanta BC | Atalanta BC | 68 | 35 | 33 | 0.7380989 | 0.0801672 | 0.0591713 | 0.9198328 | 0.6789275 | 17953.23 | 0.0997573 | 0.1513361 | 0.3371393 | 966 | 966 | 0 | 0 | 0 | 0 |
Inter Milan | Inter Milan | 68 | 32 | 36 | 0.8787351 | 0.2193920 | 0.1927874 | 0.7806080 | 0.6859477 | 2799.59 | 0.0962341 | 0.2636786 | 0.7339420 | 925 | 925 | 0 | 0 | 0 | 0 |
AS Roma plays a role of coordinator in the network which means that many ties go to and from AS Roma. This is in alignment with the degrees of the network as we saw earlier and the Eigenvector centrality which was also the highest for AS Roma in the network.
Aston Villa is an iterant broker in the network.