A Brief Analysis of Networks of Medieval Conflict.
Question: Identify initial network format
Network attributes:
vertices = 117
directed = TRUE
hyper = FALSE
loops = FALSE
multiple = TRUE
bipartite = FALSE
total edges= 153
missing edges= 0
non-missing edges= 153
Vertex attribute names:
vertex.names
No edge attributes
Network attributes:
vertices = 78
directed = TRUE
hyper = FALSE
loops = FALSE
multiple = TRUE
bipartite = FALSE
total edges= 225
missing edges= 0
non-missing edges= 225
Vertex attribute names:
vertex.names
No edge attributes
Network attributes:
vertices = 161
directed = TRUE
hyper = FALSE
loops = FALSE
multiple = TRUE
bipartite = FALSE
total edges= 313
missing edges= 0
non-missing edges= 313
Vertex attribute names:
vertex.names
No edge attributes
Question: Describe and identify the nodes (including how many nodes are in the dataset)
Answer: Nodes or vertices in these datasets represent belligerents in wars throughout history, the involved parties in each conflict can be a nation, province, individual, or group so long as they are listed as involved in the conflict.
Question: What constitutes a tie or edge (including how many ties, whether ties are directed/undirected and weighted/binary, and how to interpret the value of the tie if any)
Answer: A tie or edge in this dataset represents a war, this war can be between two nations or groups within a nation. These edges can represent a war that involved many more nations but are always tied to each and every party involved on both sides. These edges are directed and the direction indicates which side “won” the conflict.
Question: Whether or not there are edge attributes that might be used to subset data or stack multiple networks (e.g., tie type, year, etc).
Answer: There are a number of attributes that could be used to subset the data, years that the conflict began or the length of time it lasted are available. Aspects like each side’s religion and the area where the conflict took place.
Question: 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?
name | totdegree | indegree | outdegree | eigen |
---|---|---|---|---|
County of Apulia | 7 | 0 | 7 | 0.000000 |
County of Aversa | 5 | 0 | 5 | 0.000000 |
Kingdom of Sicily | 8 | 3 | 5 | 0.000000 |
Ghaznavids | 2 | 0 | 2 | 0.000000 |
Kingdom of Poland | 1 | 0 | 1 | 0.182744 |
Kingdom of Hungary | 3 | 0 | 3 | 0.000000 |
centralization(wars_in_1000s_network, degree, cmode="outdegree") %>% kable()
x |
---|
0.1016647 |
centralization(wars_in_1000s_network, degree, cmode="indegree") %>% kable()
x |
---|
0.0494946 |
centralization(wars_in_1000s_network, degree) %>% kable()
x |
---|
0.0674663 |
As can be seen above I have coded measures of indegree, outdegree, and total centralization in the wars in the 1000s dataset.
name | totdegree | indegree | outdegree | eigen |
---|---|---|---|---|
Sultanate of Rum | 23 | 0 | 23 | 0.2893116 |
Danishmends | 13 | 0 | 13 | 0.0690251 |
Seljuk Emirate of Aleppo | 13 | 0 | 13 | 0.0690251 |
Kingdom of Jerusalem | 23 | 11 | 12 | 0.5378974 |
Fatimids of Egypt | 1 | 0 | 1 | 0.0973860 |
Kingdom of Norway | 4 | 0 | 4 | 0.0398827 |
centralization(wars_in_1100s_network, degree, cmode="outdegree") %>% kable()
x |
---|
0.2646315 |
centralization(wars_in_1100s_network, degree, cmode="indegree") %>% kable()
x |
---|
0.1593861 |
centralization(wars_in_1100s_network, degree) %>% kable()
x |
---|
0.1148325 |
I do the same above and calculate measures of indegree, outdegree, and total centralization in the wars in the 1100s dataset.
name | totdegree | indegree | outdegree | eigen |
---|---|---|---|---|
Forces of Bohemond IV of Antioch | 3 | 0 | 3 | 0.0000000 |
Knights Templar | 22 | 3 | 19 | 0.4663665 |
Ayyubid Emirate of Aleppo | 3 | 0 | 3 | 0.0000000 |
Kingdom of Jerusalem | 3 | 0 | 3 | 0.0000000 |
Sultanate of Rum | 3 | 0 | 3 | 0.0000000 |
Holy Roman Empire | 11 | 6 | 5 | 0.1770181 |
centralization(wars_in_1200s_network, degree, cmode="outdegree") %>% kable()
x |
---|
0.2016016 |
centralization(wars_in_1200s_network, degree, cmode="indegree") %>% kable()
x |
---|
0.0758203 |
centralization(wars_in_1200s_network, degree) %>% kable()
x |
---|
0.1174332 |
Finally I calculate measures of indegree, outdegree, and total centralization in the wars in the 1200s dataset.
Question: 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.
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Byzantine Empire | 18 | 5 | 13 | 0.478430 | 0.3571429 | 0.1708679 | 0.6428571 | 0.3075621 |
Holy Roman Empire | 15 | 2 | 13 | 0.295686 | 1.0000000 | 0.2956860 | 0.0000000 | 0.0000000 |
Mirdasid Emirate of Aleppo | 1 | 0 | 1 | 0.295686 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2956860 |
Kingdom of Georgia | 5 | 1 | 4 | 0.295686 | 0.0769231 | 0.0227451 | 0.9230769 | 0.2729409 |
Duklja | 1 | 0 | 1 | 0.295686 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2956860 |
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Kingdom of Jerusalem | 23 | 11 | 12 | 0.5378974 | 0.2980769 | 0.1603348 | 0.7019231 | 0.3775626 |
Ayyubid Dynasty | 18 | 10 | 8 | 0.5188525 | 0.3200000 | 0.1660328 | 0.6800000 | 0.3528197 |
Sultanate of Rum | 23 | 0 | 23 | 0.2893116 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2893116 |
Holy Roman Empire | 12 | 8 | 4 | 0.2303733 | 0.0892857 | 0.0205690 | 0.9107143 | 0.2098042 |
Almoravid Dynasty | 10 | 0 | 10 | 0.2202864 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2202864 |
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Knights Templar | 22 | 3 | 19 | 0.4663665 | 0.1428571 | 0.0666238 | 0.8571429 | 0.3997427 |
Ayyubid Dynasty | 23 | 9 | 14 | 0.4263748 | 0.1046512 | 0.0446206 | 0.8953488 | 0.3817542 |
Bahris | 7 | 0 | 7 | 0.2911519 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2911519 |
Republic of Genoa | 18 | 5 | 13 | 0.2880895 | 0.1428571 | 0.0411556 | 0.8571429 | 0.2469339 |
Mongol Empire | 41 | 7 | 34 | 0.2228895 | 0.1206897 | 0.0269005 | 0.8793103 | 0.1959891 |
Answer: Looking at the outputs above we see that regular eigenvector centrality, which accounts for the centrality of nodes attached to our node of interest. Here we see the top 5 highest observations in each dataset, in the 1000s the Byzantine Empire has the highest war, which is logical historically as they represented a bridge between major fighting factions in the Crusades between the Muslim Middle East and European west. The Kingdom of Jerusalem in the 1100s would also be connected, through its wars to other important powers being contested territory between Muslim empires like the Ayyubid Dynasty and crusading states like the Holy Roman Empire.
arrange(wars_in_1000s.nodes.stat, desc(eigen.rc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Holy Roman Empire | 15 | 2 | 13 | 0.295686 | 1.0000000 | 0.2956860 | 0.0000000 | 0.0000000 |
Byzantine Empire | 18 | 5 | 13 | 0.478430 | 0.3571429 | 0.1708679 | 0.6428571 | 0.3075621 |
Sultanate of Rum | 11 | 7 | 4 | 0.295686 | 0.1186441 | 0.0350814 | 0.8813559 | 0.2606046 |
Kingdom of Georgia | 5 | 1 | 4 | 0.295686 | 0.0769231 | 0.0227451 | 0.9230769 | 0.2729409 |
Kingdom of France | 10 | 3 | 7 | 0.182744 | 0.1034483 | 0.0189046 | 0.8965517 | 0.1638394 |
arrange(wars_in_1100s.nodes.stat, desc(eigen.rc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Ayyubid Dynasty | 18 | 10 | 8 | 0.5188525 | 0.3200000 | 0.1660328 | 0.6800000 | 0.3528197 |
Kingdom of Jerusalem | 23 | 11 | 12 | 0.5378974 | 0.2980769 | 0.1603348 | 0.7019231 | 0.3775626 |
Fatimid Caliphate | 17 | 7 | 10 | 0.2202864 | 0.2884615 | 0.0635442 | 0.7115385 | 0.1567423 |
Zengid Dynasty | 16 | 6 | 10 | 0.2202864 | 0.1714286 | 0.0377634 | 0.8285714 | 0.1825230 |
Republic of Venice | 6 | 1 | 5 | 0.0797655 | 0.3333333 | 0.0265885 | 0.6666667 | 0.0531770 |
arrange(wars_in_1200s.nodes.stat, desc(eigen.rc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Knights Templar | 22 | 3 | 19 | 0.4663665 | 0.1428571 | 0.0666238 | 0.8571429 | 0.3997427 |
Ayyubid Dynasty | 23 | 9 | 14 | 0.4263748 | 0.1046512 | 0.0446206 | 0.8953488 | 0.3817542 |
Republic of Genoa | 18 | 5 | 13 | 0.2880895 | 0.1428571 | 0.0411556 | 0.8571429 | 0.2469339 |
Kingdom of Cyprus | 11 | 4 | 7 | 0.2025283 | 0.1428571 | 0.0289326 | 0.8571429 | 0.1735957 |
Mongol Empire | 41 | 7 | 34 | 0.2228895 | 0.1206897 | 0.0269005 | 0.8793103 | 0.1959891 |
Answer: Reflected centrality represents the centrality one nation receives from another another that is attributable to the first nations contribution to the other nations score. Looking at reflected centrality through wars we see relatively similar trends. In the 1000s the Holy Roman Empire and Byzantine Empire play a distinct role in the crusades so in this case we see how central a nation is in conflict dependent on how much centrality they contribute to a nation they have a conflict with. Being focal points in the center of Europe in the case of the HRE and the focal point of Christian, Muslim conflict in the case of the Byzantine empire. For both fighting minor nations gives the two a great deal of centrality to other, potentially less central groups that they fight. The Ayyubids and Kingdom of Jerusalem that each occupy a central position in conflict. Into the 1200s the Knights Templar and Ayyubids occupy this position.
arrange(wars_in_1000s.nodes.stat, desc(eigen.dc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Byzantine Empire | 18 | 5 | 13 | 0.478430 | 0.3571429 | 0.1708679 | 0.6428571 | 0.3075621 |
Mirdasid Emirate of Aleppo | 1 | 0 | 1 | 0.295686 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2956860 |
Duklja | 1 | 0 | 1 | 0.295686 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2956860 |
Great Seljuq Empire | 4 | 0 | 4 | 0.295686 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2956860 |
Kingdom of Georgia | 5 | 1 | 4 | 0.295686 | 0.0769231 | 0.0227451 | 0.9230769 | 0.2729409 |
arrange(wars_in_1100s.nodes.stat, desc(eigen.dc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Kingdom of Jerusalem | 23 | 11 | 12 | 0.5378974 | 0.2980769 | 0.1603348 | 0.7019231 | 0.3775626 |
Ayyubid Dynasty | 18 | 10 | 8 | 0.5188525 | 0.3200000 | 0.1660328 | 0.6800000 | 0.3528197 |
Sultanate of Rum | 23 | 0 | 23 | 0.2893116 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2893116 |
Almoravid Dynasty | 10 | 0 | 10 | 0.2202864 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2202864 |
Abbasid Caliphate | 10 | 0 | 10 | 0.2202864 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2202864 |
arrange(wars_in_1200s.nodes.stat, desc(eigen.dc
))%>%
slice(1:5) %>% kable()
name | totdegree | indegree | outdegree | eigen | rc | eigen.rc | dc | eigen.dc |
---|---|---|---|---|---|---|---|---|
Knights Templar | 22 | 3 | 19 | 0.4663665 | 0.1428571 | 0.0666238 | 0.8571429 | 0.3997427 |
Ayyubid Dynasty | 23 | 9 | 14 | 0.4263748 | 0.1046512 | 0.0446206 | 0.8953488 | 0.3817542 |
Bahris | 7 | 0 | 7 | 0.2911519 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2911519 |
Republic of Genoa | 18 | 5 | 13 | 0.2880895 | 0.1428571 | 0.0411556 | 0.8571429 | 0.2469339 |
Anti-Imperial faction | 7 | 0 | 7 | 0.2025283 | 0.0000000 | 0.0000000 | 1.0000000 | 0.2025283 |
Answer: Finally Derived Centrality measures the centrality a nation receives from fighting another nation that is not a reflection of the first nation’s contribution of centrality to the others. Here the Byzantine Empire remains one of the largest, potentially suggesting their status as a cosmopolitan being high in both derived and reflected centrality. However, nations like the Mirdasid Emirate of Aleppo have little to no reflected centrality by high derived centrality suggesting that they are are a pure bridge.
wars_in_1000s.nodes<-data.frame(name=V(wars_in_1000s.ig)$name,
totdegree=igraph::degree(wars_in_1000s.ig, loops=FALSE),
indegree=igraph::degree(wars_in_1000s.ig, mode="in", loops=FALSE),
outdegree=igraph::degree(wars_in_1000s.ig, mode="out", loops=FALSE))
wars_in_1100s.nodes<-data.frame(name=V(wars_in_1100s.ig)$name,
totdegree=igraph::degree(wars_in_1100s.ig, loops=FALSE),
indegree=igraph::degree(wars_in_1100s.ig, mode="in", loops=FALSE),
outdegree=igraph::degree(wars_in_1100s.ig, mode="out", loops=FALSE))
wars_in_1200s.nodes<-data.frame(name=V(wars_in_1200s.ig)$name,
totdegree=igraph::degree(wars_in_1200s.ig, loops=FALSE),
indegree=igraph::degree(wars_in_1200s.ig, mode="in", loops=FALSE),
outdegree=igraph::degree(wars_in_1200s.ig, mode="out", loops=FALSE))
eigen_cent_wars_in_1000s<-centr_eigen(wars_in_1000s.ig,directed=T)
eigen_cent_wars_in_1100s<-centr_eigen(wars_in_1100s.ig,directed=T)
eigen_cent_wars_in_1200s<-centr_eigen(wars_in_1200s.ig,directed=T)
Graph 1:
Explanation: Below I have graphed the network for the 1000s dataset using base plot and an edgelist
plot(wars_in_1000s_edgelist_network_edgelist, vertex.size=2, edge.arrow.size=.2, vertex.color="gold", vertex.size=20, vertex.frame.color="gray", vertex.label.color="black", vertex.label.cex=0.25, vertex.label.dist=2, edge.curved=0.2)
Graph 2:
Explanation: Next I used the igraph network object and graphed it using the automatic, proportional clustering.
Graph 3:
Explanation: Finally I used the ggplot network and graphed it using a generic network object. This order follows for the visualization of the 1100s datasets and 1200s.
Graph 4:
plot(wars_in_1100s_edgelist_network_edgelist, vertex.size=2, edge.arrow.size=.2, vertex.color="gold", vertex.size=20, vertex.frame.color="gray", vertex.label.color="black", vertex.label.cex=0.25, vertex.label.dist=2, edge.curved=0.2)
Graph 5:
Graph 6:
Graph 7:
plot(wars_in_1200s_edgelist_network_edgelist, vertex.size=2, edge.arrow.size=.2, vertex.color="gold", vertex.size=20, vertex.frame.color="gray", vertex.label.color="black", vertex.label.cex=0.25, vertex.label.dist=2, edge.curved=0.2)
Graph 8:
Graph 9:
$mut
[1] 3
$asym
[1] 147
$null
[1] 6636
[1] 243974 14792 744 288 149 129 11 28 13
[10] 0 1 0 0 1 0 0
[1] 0.06481481
[1] 0.0774983
[1] 0.093224
[1] 0.01117686
[1] 0.03698225
[1] 0.01207515
name degree
Length:117 Min. : 1.000
Class :character 1st Qu.: 1.000
Mode :character Median : 1.000
Mean : 2.615
3rd Qu.: 3.000
Max. :18.000
name degree
15 Byzantine Empire 18
25 Holy Roman Empire 15
28 Sultanate of Rum 11
47 Kingdom of France 10
29 County of Sicily 9
34 England 9
name degree
Length:117 Min. : 1.000
Class :character 1st Qu.: 1.000
Mode :character Median : 1.000
Mean : 2.615
3rd Qu.: 3.000
Max. :18.000
Text and figures are licensed under Creative Commons Attribution CC BY-NC 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Milstein (2022, Feb. 17). Data Analytics and Computational Social Science: Work with Medieval Networks. Retrieved from https://nmilsteinuma.github.io/posts/2022-02-10-workwithmedievalnetworks/
BibTeX citation
@misc{milstein2022work, author = {Milstein, Noah}, title = {Data Analytics and Computational Social Science: Work with Medieval Networks}, url = {https://nmilsteinuma.github.io/posts/2022-02-10-workwithmedievalnetworks/}, year = {2022} }