Florentine Families Network Analysis

A Network Analysis of Florentine Families

Peter Sullivan
2022-03-22

Investigate the Network

plot(network_igraph)

print(network_statnet)

 Network attributes:

  vertices = 16 

  directed = FALSE 

  hyper = FALSE 

  loops = FALSE 

  multiple = FALSE 

  bipartite = FALSE 

  total edges= 20 

    missing edges= 0 

    non-missing edges= 20 



 Vertex attribute names: 

    vertex.names 



No edge attributes

Weighted, Directed, and Bipartile?

is_bipartite(network_igraph)

[1] FALSE
is_directed(network_igraph)

[1] FALSE
is_weighted(network_igraph)

[1] FALSE

Looking at Igraph and Statnet, I have confirmed that this is a single mode, undirected, unweighted dataset.

Dyads, Triads, and Component Structure

Dyads and Triads

sna::dyad.census(network_statnet)

     Mut Asym Null

[1,]  20    0  100
sna::triad.census(network_statnet)

     003 012 102 021D 021U 021C 111D 111U 030T 030C 201 120D 120U

[1,] 324   0 195    0    0    0    0    0    0    0  38    0    0

     120C 210 300

[1,]    0   0   3

Transitivity

transitivity(network_igraph, type = "global")

[1] 0.1914894
transitivity(network_igraph, type = "average")

[1] 0.2181818

The average transitivity is slightly higher than the global transitivity. This could be do to certain small clusters with high transitivity.

Component Structure

igraph::components(network_igraph)$no

[1] 2
igraph::components(network_igraph)$csize

[1] 15  1

It looks like we have one isolate. From the plot above we can tell its the Pucci family.

Dataframe of Centrality Scores

network::list.vertex.attributes(network_statnet)

[1] "na"           "vertex.names"
network.nodes <- data.frame(name = network_statnet%v%"vertex.names",

                            totdegree = sna::degree(network_statnet),

                            in.degree = sna::degree(network_statnet, cmode = "indegree"),

                            out.degree = sna::degree(network_statnet, cmode = "outdegree"),

                            eigen = round(sna::evcent(network_statnet),3),

                            Bonacich.Power = round(sna::bonpow(network_statnet),3))



rownames(network.nodes)<- NULL

network.nodes %>% arrange(desc(eigen)) %>% head() %>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power
Medici 12 6 6 0.430 -0.569
Strozzi 8 4 4 0.356 0.190
Ridolfi 6 3 3 0.342 1.329
Tornabuoni 6 3 3 0.326 1.139
Guadagni 8 4 4 0.289 -0.190
Bischeri 6 3 3 0.283 0.000
network.nodes %>% arrange(desc(Bonacich.Power)) %>% head() %>%knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power
Ridolfi 6 3 3 0.342 1.329
Tornabuoni 6 3 3 0.326 1.139
Strozzi 8 4 4 0.356 0.190
Bischeri 6 3 3 0.283 0.000
Lamberteschi 2 1 1 0.089 0.000
Pazzi 2 1 1 0.045 0.000

The medici’s have the highest eigen centraility while the Ridolfi and Tornauoni’s have the highest Bonacich Power.

Derived and Reflected Centrality

## Reflected Centrality

mat_flor <- as.matrix(as_adjacency_matrix(network_igraph))

mat_flor.sq <- t(mat_flor) %*% mat_flor



network.nodes$rc <- round(diag(mat_flor.sq)/rowSums(mat_flor.sq),3)



network.nodes$rc <- ifelse(is.nan(network.nodes$rc),0,network.nodes$rc)



network.nodes$eigen.rc <- round(network.nodes$eigen*network.nodes$rc,3)



## Derived Centrality





network.nodes$dc <- round(1 - diag(mat_flor.sq)/rowSums(mat_flor.sq),3)



network.nodes$dc <- ifelse(is.nan(network.nodes$dc),1,network.nodes$dc)



network.nodes$eigen.dc <- round(network.nodes$eigen*network.nodes$dc,3)





network.nodes%>%arrange(desc(eigen.dc)) %>% head() %>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc
Ridolfi 6 3 3 0.342 1.329 0.231 0.079 0.769 0.263
Tornabuoni 6 3 3 0.326 1.139 0.231 0.075 0.769 0.251
Medici 12 6 6 0.430 -0.569 0.429 0.184 0.571 0.246
Strozzi 8 4 4 0.356 0.190 0.333 0.119 0.667 0.237
Bischeri 6 3 3 0.283 0.000 0.273 0.077 0.727 0.206
Peruzzi 6 3 3 0.276 -0.569 0.300 0.083 0.700 0.193
network.nodes%>%arrange(desc(eigen.rc)) %>% head() %>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc
Medici 12 6 6 0.430 -0.569 0.429 0.184 0.571 0.246
Strozzi 8 4 4 0.356 0.190 0.333 0.119 0.667 0.237
Guadagni 8 4 4 0.289 -0.190 0.400 0.116 0.600 0.173
Castellani 6 3 3 0.259 -1.329 0.333 0.086 0.667 0.173
Peruzzi 6 3 3 0.276 -0.569 0.300 0.083 0.700 0.193
Ridolfi 6 3 3 0.342 1.329 0.231 0.079 0.769 0.263

For derived centrality the highest are the Ridolfi’s, Tournabuoni, and the Medici Family. For reflected centrality the Medici have the most by far at .18. The next highest are from the Strozzi and Guadagni at .11.

Calculate Closeness Centrality

network.nodes$closeness<-round(sna::closeness(network_statnet, gmode = "graph", cmode = "suminvundir"),3)



network.nodes %>% arrange(desc(closeness)) %>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc closeness
Medici 12 6 6 0.430 -0.569 0.429 0.184 0.571 0.246 0.633
Guadagni 8 4 4 0.289 -0.190 0.400 0.116 0.600 0.173 0.539
Ridolfi 6 3 3 0.342 1.329 0.231 0.079 0.769 0.263 0.533
Albizzi 6 3 3 0.244 -2.088 0.273 0.067 0.727 0.177 0.522
Strozzi 8 4 4 0.356 0.190 0.333 0.119 0.667 0.237 0.522
Tornabuoni 6 3 3 0.326 1.139 0.231 0.075 0.769 0.251 0.522
Bischeri 6 3 3 0.283 0.000 0.273 0.077 0.727 0.206 0.480
Barbadori 4 2 2 0.212 -1.519 0.222 0.047 0.778 0.165 0.472
Castellani 6 3 3 0.259 -1.329 0.333 0.086 0.667 0.173 0.461
Peruzzi 6 3 3 0.276 -0.569 0.300 0.083 0.700 0.193 0.452
Salviati 4 2 2 0.146 -0.190 0.286 0.042 0.714 0.104 0.439
Acciaiuoli 2 1 1 0.132 -0.380 0.167 0.022 0.833 0.110 0.394
Lamberteschi 2 1 1 0.089 0.000 0.250 0.022 0.750 0.067 0.358
Ginori 2 1 1 0.075 -1.898 0.333 0.025 0.667 0.050 0.356
Pazzi 2 1 1 0.045 0.000 0.500 0.022 0.500 0.022 0.318
Pucci 0 0 0 0.000 0.000 0.000 0.000 1.000 0.000 0.000
summary(network.nodes$closeness) 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 

 0.0000  0.3850  0.4665  0.4376  0.5220  0.6330 

The medici family has the highest closeness centrality of .633. The median closeness is .467 and the mean is.437, so the max of .633 is not to much higher then everyone else in the group.

Closeness Centralization

centr_clo(network_igraph)$centralization

[1] 0.1790292

I’m a bit confused why the closeness centraliztion is so much lower then average closeness seen above.

Betweenness Centrality

#igraph::betweenness(network_igraph, directed = FALSE)

network.nodes$betweenness <-round(sna::betweenness(network_statnet, gmode = "graph"),3)

network.nodes %>% arrange(desc(betweenness)) %>% head() %>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc closeness betweenness
Medici 12 6 6 0.430 -0.569 0.429 0.184 0.571 0.246 0.633 47.500
Guadagni 8 4 4 0.289 -0.190 0.400 0.116 0.600 0.173 0.539 23.167
Albizzi 6 3 3 0.244 -2.088 0.273 0.067 0.727 0.177 0.522 19.333
Salviati 4 2 2 0.146 -0.190 0.286 0.042 0.714 0.104 0.439 13.000
Ridolfi 6 3 3 0.342 1.329 0.231 0.079 0.769 0.263 0.533 10.333
Bischeri 6 3 3 0.283 0.000 0.273 0.077 0.727 0.206 0.480 9.500

The medici family has the highest closeness and the highest betweeness. this means that the Medici Family receiving information the faestest out of all the familys and is also relied apon most in the network for for information. It seems the medici family really controls the flow of information in this network. ## Betweenness Centralization

centr_betw(network_igraph, directed = F)$centralization

[1] 0.3834921

Network Constraint

network.nodes$Constraint <- round(constraint(network_igraph),3)



network.nodes %>% arrange(desc(Constraint)) %>% head()%>% knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc closeness betweenness Constraint
Acciaiuoli 2 1 1 0.132 -0.380 0.167 0.022 0.833 0.110 0.394 0.0 1.000
Ginori 2 1 1 0.075 -1.898 0.333 0.025 0.667 0.050 0.356 0.0 1.000
Lamberteschi 2 1 1 0.089 0.000 0.250 0.022 0.750 0.067 0.358 0.0 1.000
Pazzi 2 1 1 0.045 0.000 0.500 0.022 0.500 0.022 0.318 0.0 1.000
Peruzzi 6 3 3 0.276 -0.569 0.300 0.083 0.700 0.193 0.452 2.0 0.656
Barbadori 4 2 2 0.212 -1.519 0.222 0.047 0.778 0.165 0.472 8.5 0.500
network.nodes %>% arrange(Constraint) %>% head()%>%knitr::kable()

name totdegree in.degree out.degree eigen Bonacich.Power rc eigen.rc dc eigen.dc closeness betweenness Constraint
Medici 12 6 6 0.430 -0.569 0.429 0.184 0.571 0.246 0.633 47.500 0.210
Guadagni 8 4 4 0.289 -0.190 0.400 0.116 0.600 0.173 0.539 23.167 0.250
Albizzi 6 3 3 0.244 -2.088 0.273 0.067 0.727 0.177 0.522 19.333 0.333
Strozzi 8 4 4 0.356 0.190 0.333 0.119 0.667 0.237 0.522 9.333 0.458
Ridolfi 6 3 3 0.342 1.329 0.231 0.079 0.769 0.263 0.533 10.333 0.460
Tornabuoni 6 3 3 0.326 1.139 0.231 0.075 0.769 0.251 0.522 8.333 0.460

As expected the Medici Family has the lowest amount of constraint.

Gould-Fernandez Brokerage

We have an undirected network, therefor we are unable to calculate the gould-fernandez brokerage.

Citation

For attribution, please cite this work as

Sullivan (2022, March 22). Project List: Florentine Families Network Analysis. Retrieved from https://pjsulliv34.github.io/Blog/posts/florentine-families-network-analysis/

BibTeX citation

@misc{sullivan2022florentine,
  author = {Sullivan, Peter},
  title = {Project List: Florentine Families Network Analysis},
  url = {https://pjsulliv34.github.io/Blog/posts/florentine-families-network-analysis/},
  year = {2022}
}