States establish diplomatic relations for various reasons. While traditional international relations theories emphasize dyadic factors such as power, regime type, and conflict in explaining diplomatic relations, studies have also suggested that network interdependencies, such as reciprocity or transitive closure among mutual partners, will also play a significant role in shaping patterns of diplomatic exchange. This paper builds on an approach to analyze the world diplomatic network in the post-Cold War era (1995-2005), a period marked by the dissolution of bipolarity, the rise of multipolar diplomacy, and increasing active participation of non-Western and middle powers in global affairs.
Using Temporal Exponential Random Graph Models (TERGMs), I analyze snapshots of the global diplomatic network and examine whether the foundational hypotheses of network-driven diplomacy continue to hold in a more decentralized and diversified international environment. Specifically, I explore the presence and implications of reciprocity, transitivity, and preferential attachment in post-Cold War diplomatic tie formation, while also exploring whether diplomatic centrality continues to confer prestige in an increasingly multilateral system.
This paper builds on foundational contributions in the empirical analysis of diplomatic networks, particularly regarding the modeling of prestige and preferential attachment: the tendency of states to form diplomatic ties with already well-connected and prestigious peers. I encountered substantive ambiguity in modeling preferential attachment, as different studies operationalize it at different levels of analysis. (Kinne 2013) treats indegree as a prestige signal and assumes states seek to attach to popular nodes. The model thus predicts that high-in-degree nodes (prestigious states) should attract additional ties. However, this captures node-level popularity, not network-level structural centralization.
A different approach is taken by (Duque 2018), which draws on relational theory to understand how states achieve recognition and status. Rather than relying on actor attributes, (Duque 2018) uses local network configurations, two-in-star formations, as indicators of emerging centrality. The two-star term captures the number of times a single node (state) receives ties from two distinct other nodes (distinct pairs which are not connected together). It reflects local popularity that how often a state is recognized by multiple others. However, I believe that this term is a bit limited, as it captures only a minimal pattern and does not account for whether this kind of popularity scales up to network-wide centralization. It focuses on small, dyadic patterns rather than network-wide structures.
In contrast to these node-focused or dyadic microstructure models, this paper uses a structural approach, aiming to look at whether the diplomatic system, as a whole, displays a tendency toward centralization or dispersion. This allows us to look at whether prestige itself is governing diplomatic behavior rather than asking which states are prestigious or defining prestige in a very limited way, during the post–Cold War period. By emphasizing macro-level tendencies in tie formation, this study investigates whether diplomatic representation remains concentrated among a few dominant players or whether states are increasingly diversifying their diplomatic portfolios across a wider array of partners.
My argument for a decentralized diplomatic network, in conflict with (Duque 2018) (in terms of operationalization), is based on the idea that states increasingly form interest-based relations rather than simply seeking recognition from prestigious actors. A simple example on my mind is the establishment of formal diplomatic ties between India and Israel in 1992, which marked a pragmatic realignment driven by mutual security, technological, and economic interests, despite Israel’s relatively limited diplomatic reach at the time. A similar decentralizing pattern is observed in alliance networks (while they are still using two-star term), as shown in (Cranmer, Desmarais, and Kirkland 2012), where alliances during the World War II and Post-Soviet periods were largely shaped by shared strategic interests rather than preferential attachment to dominant powers.
The data for this study is obtained from Correlates of War data through ‘peacesciencer’ package, while the data for diplomatic exchange and any additional data was collected manually. This analysis focuses on bilateral diplomatic relations among sovereign states in 1995, 2000, and 2005. These years are chosen to reflect early post–Cold War network development and the near-universal expansion of formal diplomatic relations, particularly following the integration of post-Soviet states. We define a directed tie from country A to B if A has established an official embassy, ambassador or similar level representation in B in that year, indicating a formal and strong diplomatic representation. Our data excludes temporary or uncertain representations, ensuring consistency in measuring long-term, official diplomatic relationships.
options(scipen=999)
library(ndtv)
library(statnet)
library(networkDynamic)
library(btergm)
library(ergMargins)
library(texreg)
#1995-2000-2005
dip = readRDS("network lists/dip.rds") #diplomatic network - directed
dist = readRDS("network lists/dist.rds") #distance between capitals
cont = readRDS("network lists/cont.rds") #contiguity (dummy - border share/not)
igos = readRDS("network lists/igos.rds") #shared IGO membership count
mid = readRDS("network lists/mid.rds") #military interstate dispute - conflict
def = readRDS("network lists/def.rds") #defense cooperation agreement
trade = readRDS("network lists/2trade.rds") #tradeflow - directed - weighted
years = c(1995, 2000, 2005)
dnet = networkDynamic(network.list = dip, time.steps = years)
## Neither start or onsets specified, assuming start=0
## Onsets and termini not specified, assuming each network in network.list should have a discrete spell of length 1
## Argument base.net not specified, using first element of network.list instead
## Created net.obs.period to describe network
## Network observation period info:
## Number of observation spells: 1
## Maximal time range observed: 0 until 3
## Temporal mode: discrete
## Time unit: step
## Suggested time increment: 1
print(dnet)
## NetworkDynamic properties:
## distinct change times: 4
## maximal time range: 0 until 3
##
## Includes optional net.obs.period attribute:
## Network observation period info:
## Number of observation spells: 1
## Maximal time range observed: 0 until 3
## Temporal mode: discrete
## Time unit: step
## Suggested time increment: 1
##
## Network attributes:
## vertices = 144
## directed = TRUE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## net.obs.period: (not shown)
## total edges= 6681
## missing edges= 0
## non-missing edges= 6681
##
## Vertex attribute names:
## active ccode cinc cowmaj irst milex milper pec polity2 stateabb statenme tpop upop vertex.names wbgdp2011est wbgdppc2011est year
##
## Edge attribute names not shown
slice.par = list(start = min(years),
end = max(years),
interval = 1,
aggregate.dur = 1,
rule = "any")
print(slice.par)
## $start
## [1] 1995
##
## $end
## [1] 2005
##
## $interval
## [1] 1
##
## $aggregate.dur
## [1] 1
##
## $rule
## [1] "any"
regime_type = cut(get.vertex.attribute(dnet, "polity2"),
breaks = c(-10, 0, 6, 10),
labels = c("Autocracy", "Hybrid", "Democracy"))
regime_colors = c("red", "darkgreen", "blue")
vertex_colors = regime_colors[as.numeric(regime_type)]
cinc_scaled = log(get.vertex.attribute(dnet, "cinc") + 1e-4)
cinc_scaled = (cinc_scaled - min(cinc_scaled)) / (max(cinc_scaled) - min(cinc_scaled))
vertex_size = cinc_scaled * 3 + 0.5
render.par = list(tween.frames = 10,
show.time = TRUE,
time.labels = years,
show.stats = "~edges")
plot.par = list(edge.col = "darkgray",
displaylabels = TRUE,
label = get.vertex.attribute(dnet, "stateabb"),
label.cex = 0.7,
label.col = "black",
vertex.col = vertex_colors,
vertex.cex = vertex_size
)
render.d3movie(dnet,
render.par = render.par,
plot.par = plot.par,
output.mode = 'htmlWidget')
## slice parameters:
## start:0
## end:3
## interval:1
## aggregate.dur:1
## rule:latest
#descriptive statistics
dip_stats = data.frame(
Year = c("1995", "2000", "2005"),
Nodes = numeric(3),
Edges = numeric(3),
Density = numeric(3),
Reciprocity = numeric(3),
Mean_Degree = numeric(3)
)
for(i in 1:3) {
net = dip[[i]]
n_nodes = network.size(net)
n_edges = network.edgecount(net)
dip_stats$Nodes[i] = n_nodes
dip_stats$Edges[i] = n_edges
dip_stats$Density[i] = round(n_edges / (n_nodes * (n_nodes - 1)), 4)
adj_matrix = as.matrix(net, matrix.type = "adjacency")
mutual_count = sum(adj_matrix * t(adj_matrix)) / 2
if(n_edges > 0) {
dip_stats$Reciprocity[i] = round(2 * mutual_count / n_edges, 4)
} else {
dip_stats$Reciprocity[i] = 0
}
degrees = sna::degree(net, gmode = "digraph")
dip_stats$Mean_Degree[i] = round(mean(degrees), 2)
}
dip_stats
indegree = degree(dip[[3]], cmode = "indegree")
range(indegree)
## [1] 5 133
hist(indegree)
This paper employs a Temporal Exponential Random Graph Model (TERGM) across the three time points to understand the effects of interest. This TERGM specification does not include any term for temporal dependence and we assume that the networks at 1995, 2000, 2005 are independent observations. In other words, it estimates the average effects across the snapshots. This approach was chosen for simplicity and as it focuses on average effects without conflating them with temporal trend.
Based on the existing literature, the following hypothesis will be tested:
Hypothesis 1: Reciprocity
Countries are more likely to establish diplomatic representation in other countries that already maintain representation in their own, reflecting diplomatic balance, cooperation, and symbolic equality in bilateral relationships.
Hypothesis 2: Transitivity
If two countries both maintain diplomatic ties with a common third party, they are more likely to establish a diplomatic relationship with each other. This reflects a tendency toward closure in the network, where shared partners increase the likelihood of further ties.
Hypothesis 3: Decentralization / Decreased Preferential Attachment
The diplomatic network does not exhibit preferential attachment. Instead, countries distribute their diplomatic ties in a manner that avoids over-concentration, leading to a more decentralized network structure where influence is not monopolized by a few highly connected states.
Exploratory Hypothesis 4: Preferential Broadcasting
Countries that already maintain a large number of diplomatic missions abroad are more likely to continue expanding their diplomatic outreach. This reflects a strategy of broad engagement and visibility, particularly by states that aim to project influence or participate widely in global affairs.
Preferential attachment is typically captured in the literature via either node-level attributes (indegree covariates) or local star configurations (istar()). I instead use the ‘gwidegree()’ term, which captures the global tendency of states to target highly connected nodes, thus directly modeling network-level centralization or decentralization.
Similarly, I test for “preferential broadcasting” using gwodegree() to assess whether states with already high out-degree continue to expand their diplomatic outreach.
I also included a rich set of predictors informed by international relations theory and prior studies on diplomacy to minimize the bias. Node-level attributes: power index and polity, and dyadic covariates: alliances, conflict, distance, contiguity (dummy for border sharing) and trade, which classical IR theories suggest as drivers of cooperation or discord.
#logging the power-index values in all networks to account the skew
log_cinc_dip = lapply(dip, function(net) {
cinc_values = get.vertex.attribute(net, "cinc")
log_cinc_values = log(cinc_values + 1e-4)
network::set.vertex.attribute(net, "log_cinc", log_cinc_values)
return(net)
})
dip = log_cinc_dip
Model 1
model1 = btergm(dip ~ edges + mutual, R=1000)
summary(model1)
## Estimate Boot mean 2.5% 97.5%
## edges -2.5522 -2.5519 -2.5688 -2.5374
## mutual 4.0114 4.0109 3.9459 4.1095
Model 2
model2 = readRDS("model2.rds")
summary(model2)
## Estimate Boot mean 2.5% 97.5%
## edges 3.4469132373 3.4121165153 3.0053 3.7638
## mutual 2.9759689584 2.9754836254 2.8902 3.1313
## gwesp.OTP.fixed.0.5 0.2290876914 0.2537366749 0.0344 0.5928
## gwideg.fixed.2 -4.5971164626 -4.6128952371 -4.8156 -4.4079
## nodeicov.log_cinc 0.3996933261 0.4009187876 0.3583 0.4373
## nodeocov.log_cinc 0.5859421014 0.5861114127 0.5462 0.6475
## absdiff.log_cinc 0.0454256829 0.0456125012 0.0335 0.0636
## nodeicov.polity2 -0.0023452687 -0.0021116799 -0.0111 0.0055
## nodeocov.polity2 0.0376806614 0.0375160162 0.0361 0.0388
## absdiff.polity2 -0.0132957340 -0.0130338329 -0.0158 -0.0082
## edgecov.def[[i]] 1.4827355483 1.4849680529 1.4251 1.5382
## edgecov.mid[[i]] -0.2810808972 -0.2962594073 -0.6658 0.0103
## edgecov.cont[[i]] 2.1489644405 2.1523846954 2.0326 2.3851
## edgecov.capdist -0.0000139300 -0.0000138951 0.0000 0.0000
## edgecov.flow 0.0000041528 0.0000051707 0.0000 0.0000
## edgecov.dyadigos 0.0029924386 0.0029346184 0.0017 0.0040
Model 3
model3 = readRDS("model3.rds")
summary(model3)
## Estimate Boot mean 2.5% 97.5%
## edges 3.1303223896 3.0881647523 2.2964 3.7023
## mutual 2.9458508334 2.9480896651 2.8608 3.0904
## gwesp.OTP.fixed.0.5 0.5974855238 0.6292981417 0.2918 1.1463
## gwdsp.OTP.fixed.0.5 -0.0491601239 -0.0497978749 -0.0609 -0.0452
## gwideg.fixed.2 -3.8808150142 -3.8803505617 -4.0382 -3.7140
## nodeicov.log_cinc 0.4389597571 0.4400815011 0.3921 0.4817
## nodeocov.log_cinc 0.5971190344 0.5979225499 0.5641 0.6499
## absdiff.log_cinc 0.0570147414 0.0561862536 0.0373 0.0715
## nodeicov.polity2 -0.0009415151 -0.0009235355 -0.0104 0.0072
## nodeocov.polity2 0.0396657891 0.0396360851 0.0382 0.0410
## absdiff.polity2 -0.0137198845 -0.0136051216 -0.0160 -0.0085
## edgecov.def[[i]] 1.4716791310 1.4735608155 1.4109 1.5248
## edgecov.mid[[i]] -0.2353105613 -0.2463650871 -0.6133 0.0674
## edgecov.cont[[i]] 2.1124445226 2.1200403391 1.9985 2.3499
## edgecov.capdist -0.0000147213 -0.0000146456 0.0000 0.0000
## edgecov.flow 0.0000043612 0.0000051525 0.0000 0.0000
## edgecov.dyadigos 0.0037169878 0.0036990608 0.0022 0.0050
VIF - Model 3
vif.ergm(model3)
## mutual gwesp.OTP.fixed.0.5 gwdsp.OTP.fixed.0.5 gwideg.fixed.2
## [1,] 1.604806 1.041635 1.108239 1.727838
## nodeicov.log_cinc nodeocov.log_cinc absdiff.log_cinc nodeicov.polity2
## [1,] 1.948417 1.297113 1.19641 1.146267
## nodeocov.polity2 absdiff.polity2 edgecov.def[[i]] edgecov.mid[[i]]
## [1,] 1.117864 1.23276 1.138837 1.031284
## edgecov.cont[[i]] edgecov.capdist edgecov.flow edgecov.dyadigos
## [1,] 1.128652 1.006461 1.005383 1.010534
Model 4
#model4 = btergm(dip ~
# edges +
# mutual +
# gwesp(0.5, fixed=T) +
# gwdsp(0.5, fixed=T) +
# gwidegree(2, fixed=T) +
# gwodegree(2, fixed=T) +
# nodeicov("log_cinc") + nodeocov("log_cinc") + absdiff("log_cinc") +
# nodeicov("polity2") + nodeocov("polity2") + absdiff("polity2") +
# edgecov(def, attrname=NULL) +
# edgecov(mid, attrname=NULL) +
# edgecov(cont, attrname=NULL) +
# edgecov(dist, attrname="capdist") +
# edgecov(trade, attrname="flow") +
# edgecov(igos, attrname="dyadigos"),
# R=1000, verbose = T)
#summary(model4)
model4 = readRDS("model4.rds")
summary(model4)
## Estimate Boot mean 2.5% 97.5%
## edges 2.7293223541 2.6549456127 1.8514 3.2470
## mutual 2.9100299911 2.9072500086 2.8167 3.0733
## gwesp.OTP.fixed.0.5 0.3733306390 0.4175762455 0.1382 0.8513
## gwdsp.OTP.fixed.0.5 -0.0190677348 -0.0197303104 -0.0355 -0.0091
## gwideg.fixed.2 -4.4485681250 -4.4622977860 -4.5960 -4.2806
## gwodeg.fixed.2 -3.9474584616 -3.9479667590 -4.0769 -3.7378
## nodeicov.log_cinc 0.4237186354 0.4236590426 0.3763 0.4647
## nodeocov.log_cinc 0.4701342409 0.4708982303 0.4574 0.4923
## absdiff.log_cinc 0.1191592757 0.1190171182 0.0919 0.1335
## nodeicov.polity2 -0.0031105926 -0.0028944408 -0.0122 0.0051
## nodeocov.polity2 0.0344949405 0.0345476196 0.0324 0.0373
## absdiff.polity2 -0.0142673114 -0.0139735512 -0.0167 -0.0089
## edgecov.def[[i]] 1.5507499157 1.5532609306 1.5178 1.5992
## edgecov.mid[[i]] -0.3061227715 -0.3265000980 -0.7236 0.0089
## edgecov.cont[[i]] 2.2865516898 2.2925588902 2.1181 2.6438
## edgecov.capdist -0.0000131861 -0.0000131148 0.0000 0.0000
## edgecov.flow 0.0000038487 0.0000050254 0.0000 0.0000
## edgecov.dyadigos 0.0037066965 0.0037656909 0.0027 0.0052
VIF - Model 4
vif.ergm(model4)
## mutual gwesp.OTP.fixed.0.5 gwdsp.OTP.fixed.0.5 gwideg.fixed.2
## [1,] 1.604852 1.096665 1.260861 1.762312
## gwodeg.fixed.2 nodeicov.log_cinc nodeocov.log_cinc absdiff.log_cinc
## [1,] 1.801318 1.9675 1.8721 1.243478
## nodeicov.polity2 nodeocov.polity2 absdiff.polity2 edgecov.def[[i]]
## [1,] 1.149811 1.132882 1.233538 1.139748
## edgecov.mid[[i]] edgecov.cont[[i]] edgecov.capdist edgecov.flow
## [1,] 1.031358 1.12872 1.006523 1.005477
## edgecov.dyadigos
## [1,] 1.010534
screenreg(list(model1, model2, model3, model4), digits = 5)
##
## ===========================================================================================================
## Model 1 Model 2 Model 3 Model 4
## -----------------------------------------------------------------------------------------------------------
## edges -2.55219 * 3.44691 * 3.13032 * 2.72932 *
## [-2.56885; -2.53738] [ 3.00528; 3.76382] [ 2.29644; 3.70229] [ 1.85138; 3.24698]
## mutual 4.01135 * 2.97597 * 2.94585 * 2.91003 *
## [ 3.94587; 4.10946] [ 2.89017; 3.13127] [ 2.86077; 3.09039] [ 2.81675; 3.07333]
## gwesp.OTP.fixed.0.5 0.22909 * 0.59749 * 0.37333 *
## [ 0.03438; 0.59280] [ 0.29181; 1.14630] [ 0.13815; 0.85130]
## gwideg.fixed.2 -4.59712 * -3.88082 * -4.44857 *
## [-4.81559; -4.40790] [-4.03824; -3.71401] [-4.59601; -4.28061]
## nodeicov.log_cinc 0.39969 * 0.43896 * 0.42372 *
## [ 0.35833; 0.43735] [ 0.39207; 0.48167] [ 0.37629; 0.46471]
## nodeocov.log_cinc 0.58594 * 0.59712 * 0.47013 *
## [ 0.54617; 0.64747] [ 0.56414; 0.64990] [ 0.45735; 0.49233]
## absdiff.log_cinc 0.04543 * 0.05701 * 0.11916 *
## [ 0.03346; 0.06359] [ 0.03732; 0.07153] [ 0.09193; 0.13351]
## nodeicov.polity2 -0.00235 -0.00094 -0.00311
## [-0.01113; 0.00554] [-0.01040; 0.00717] [-0.01217; 0.00515]
## nodeocov.polity2 0.03768 * 0.03967 * 0.03449 *
## [ 0.03612; 0.03879] [ 0.03822; 0.04100] [ 0.03243; 0.03728]
## absdiff.polity2 -0.01330 * -0.01372 * -0.01427 *
## [-0.01578; -0.00821] [-0.01605; -0.00854] [-0.01674; -0.00892]
## edgecov.def[[i]] 1.48274 * 1.47168 * 1.55075 *
## [ 1.42508; 1.53825] [ 1.41093; 1.52483] [ 1.51785; 1.59922]
## edgecov.mid[[i]] -0.28108 -0.23531 -0.30612
## [-0.66581; 0.01030] [-0.61331; 0.06736] [-0.72364; 0.00887]
## edgecov.cont[[i]] 2.14896 * 2.11244 * 2.28655 *
## [ 2.03265; 2.38513] [ 1.99850; 2.34995] [ 2.11806; 2.64376]
## edgecov.capdist -0.00001 * -0.00001 * -0.00001 *
## [-0.00002; -0.00001] [-0.00002; -0.00001] [-0.00002; -0.00001]
## edgecov.flow 0.00000 0.00000 0.00000
## [-0.00000; 0.00002] [-0.00001; 0.00002] [-0.00001; 0.00002]
## edgecov.dyadigos 0.00299 * 0.00372 * 0.00371 *
## [ 0.00168; 0.00400] [ 0.00220; 0.00504] [ 0.00274; 0.00521]
## gwdsp.OTP.fixed.0.5 -0.04916 * -0.01907 *
## [-0.06089; -0.04523] [-0.03552; -0.00913]
## gwodeg.fixed.2 -3.94746 *
## [-4.07688; -3.73783]
## -----------------------------------------------------------------------------------------------------------
## Num. obs. 61776 61776 61776 61776
## ===========================================================================================================
## * Null hypothesis value outside the confidence interval.
Reciprocity and transitivity remain strongly positive and statistically significant in all models, consistent with prior research and network theory. Contrary to expectations from preferential attachment theory, the coefficient for ‘gwidegree()’ is negative, indicating that states avoid sending missions to already highly connected actors. This adds value by looking at preferential attachment from the perspective of whole network, in a relative way-accounting for the distribution of indegrees, rather than focusing on a node attribute or minimal structures.
As an exploratory hypothesis, I tested for “preferential broadcasting” without any valid theory, assuming that there might be a few states that are too generous or active in expanding their network by send more ties than many others. The ‘gwodegree()’ term also returns a negative coefficient, suggesting a decentralized strategy of diplomatic outreach, even from prolific diplomatic senders.
These findings suggest that while certain network tendencies like reciprocity and triadic closure continue to shape diplomacy, the overall structure of the diplomatic system is becoming less hierarchical. This points to a decentralizing trend in global diplomacy. States appear more interested in diverse, interest-based, or regional ties than simply gravitating toward major powers for prestige.
Note: Outgoing Two-path (OTP) vertex “k” is an OTP shared partner of ordered pair (i, j) iff “i->k->j”. Also known as “transitive shared partner”.
The following diagnostics pertain to Model 3, which exhibits the best overall fit among all models estimated in this study.
gof = btergm::gof(model3)
## t=1 t=2 t=3
## dip (row) 144 144 144
## dip (col) 144 144 144
## def (row) 144 144 144
## def (col) 144 144 144
## mid (row) 144 144 144
## mid (col) 144 144 144
## cont (row) 144 144 144
## cont (col) 144 144 144
## dist (row) 144 144 144
## dist (col) 144 144 144
## trade (row) 144 144 144
## trade (col) 144 144 144
## igos (row) 144 144 144
## igos (col) 144 144 144
## t=1 t=2 t=3
## dip (row) 144 144 144
## dip (col) 144 144 144
## def (row) 144 144 144
## def (col) 144 144 144
## mid (row) 144 144 144
## mid (col) 144 144 144
## cont (row) 144 144 144
## cont (col) 144 144 144
## dist (row) 144 144 144
## dist (col) 144 144 144
## trade (row) 144 144 144
## trade (col) 144 144 144
## igos (row) 144 144 144
## igos (col) 144 144 144
plot(gof)
The goodness-of-fit diagnostic plots indicate that the TERGM model replicates the structural features of the observed network with reasonable accuracy. The model fits well on metrics such as transitivity (shared partners) and degree distribution. While there are slight deviations in geodesic distances, particularly in 2-paths, the overall distribution seems reasonabe. The predictive performance is very strong, as shown by the ROC and precision-recall curves. However, the model slightly underrepresents highly connected states and overestimates modularity, meaning that the simulated networks are more clustered than the observed one.
sim_net = simulate(model3, nsim = 1, output = "network")
par(mfrow = c(1, 2), mar = c(2, 2, 4, 2))
#obs network
plot(dip[[3]],
displaylabels = TRUE,
label = get.vertex.attribute(dip[[3]], "stateabb"),
label.cex = 0.6,
label.col = "black",
vertex.cex = 0.8,
edge.lwd = 0.5,
edge.col = "gray40",
main = "Observed Network (2005)")
#simulated network
plot(sim_net,
displaylabels = TRUE,
label = get.vertex.attribute(sim_net, "stateabb"),
label.cex = 0.6,
label.col = "black",
vertex.cex = 0.8,
edge.lwd = 0.5,
edge.col = "steelblue",
main = "Simulated Network (Model 2)")
This paper finds that while patterns like mutual recognition and shared diplomatic connections still play a role in how countries form ties, they are part of a decentralized diplomatic system. The results suggest that global diplomacy has become more balanced and less centered around a few major powers. A more even spread of diplomatic ties gives smaller and regional powers more room to influence international affairs.
Since this analysis treats each time point as independent, future work could use dynamic models such as Separable TERGMs or stochastic actor-oriented models to better capture how diplomatic networks evolve over time. This would help determine whether the trend toward decentralization is consistent or if different patterns emerge in different periods. Additionally, since this study focuses solely on formal diplomatic representation, further research should examine whether similar decentralizing patterns hold when informal or unofficial diplomatic interactions are also taken into account.