Embeddedness, Legitimacy, and Efficacy

Setup

# ===== Packages =====
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggeffects)
library(janitor)
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.5.2     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.3.0
## ✔ purrr     1.1.0     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stringr)
library(ggplot2)
library(broom)
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(MASS)       
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(cluster)    
library(factoextra) 
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(DescTools)  
library(emmeans) 
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(ggridges)
library(ggrepel)

Data Loading

# Load all datasets
df_year <- read_csv("Data/year_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): Institution, Founding_Era_Category
## dbl (3): Year_cleaned, FoundingDensity_5yr, CumulativeStock
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_spatial <- read_csv("Data/spatial_jurisdiction_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Spatial, Archipelago_WithinIGO, Coastal Zone_WithinI...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_vertical <- read_csv("Data/vertical_coordinations_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Vertical_Coordination, Data Integration Systems_With...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_subject <- read_csv("Data/subject_matter_jurisdiction_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Subject_Matter, Biodiversity & Ecosystem Conservatio...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_strategies <- read_csv("Data/strategies_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Strategies, Capacity Development & Operational Deliv...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_objectives <- read_csv("Data/defined_objectives_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Defined_Objectives, Environmental Action_WithinIGO, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_relationships <- read_csv("Data/defined_inter_institutional_relationships_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Defined_Inter, Civil Society Engagement_WithinIGO, D...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_sources <- read_csv("Data/sources_of_jurisdiction_data.csv") %>%
  clean_names()
## Rows: 48 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): Institution
## dbl (21): Ordinal_Score_Sources, Bilateral/Multilateral Arrangements_WithinI...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Merge Dataset

# Merge all datasets
df <- df_year %>%
  left_join(df_spatial, by = "institution") %>%
  left_join(df_vertical, by = "institution") %>%
  left_join(df_subject, by = "institution") %>%
  left_join(df_strategies, by = "institution") %>%
  left_join(df_objectives, by = "institution") %>%
  left_join(df_relationships, by = "institution") %>%
  left_join(df_sources, by = "institution")

Derived Measures

# ====== CONSTRUCT INDICES ======
# 1) Legal Authority Index (LAI): mean of legal source presence/strength items
lai_cols <- c(133:152)  # sources within & across (binding, delegated powers, norms, etc.)
df <- df %>%
  mutate(LAI = rowMeans(across(all_of(lai_cols)), na.rm = TRUE))

# 2) Legitimacy Participation Index (LPI): participation + compliance/reporting
lpi_cols <- c(112:119, 121:131, 34, 120)  # engagement plus reporting & treaty body coordination
df <- df %>%
  mutate(LPI = rowMeans(across(all_of(lpi_cols)), na.rm = TRUE))

# 3) Effectiveness/Performance Index (EPI): strategies + monitoring + delivery
epi_cols <- c(69:79, 86:89, 97, 98, 101:110) # strategy within + across & key objectives like monitoring/delivery
df <- df %>%
  mutate(EPI = rowMeans(across(all_of(epi_cols)), na.rm = TRUE))

# Center/scale for regressions
df <- df %>%
  mutate(across(c(LAI, LPI, EPI, cumulative_stock, year_cleaned,
                  ordinal_score_vertical_coordination), scale))

Analysis

H3.2 IGOs with broader subject-matter mandates (breadth index) achieve higher legitimacy participation.

# Engagement
# Engagement sub-index: civil society + NGO + private sector + scientific linkages
eng_cols <- c(112,115,116,118,122,125,126,128)  # adjust indices to your data mapping
df <- df %>% 
  mutate(
    ENG = rowMeans(across(all_of(eng_cols)), na.rm = TRUE)
  )
m_h32 <- lm(LPI ~ ENG + cumulative_stock, data = df)
summary(m_h32)
## 
## Call:
## lm(formula = LPI ~ ENG + cumulative_stock, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.70787 -0.35125 -0.00351  0.36486  1.68182 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      -0.87637    0.15100  -5.804 6.10e-07 ***
## ENG               0.62052    0.08234   7.536 1.65e-09 ***
## cumulative_stock  0.07268    0.09854   0.738    0.465    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6673 on 45 degrees of freedom
## Multiple R-squared:  0.5737, Adjusted R-squared:  0.5547 
## F-statistic: 30.28 on 2 and 45 DF,  p-value: 4.666e-09
# Predictions for regression line
pred_h32 <- ggpredict(m_h32, terms = "ENG [all]")

# Choose a coloring variable: founding era
color_var <- "founding_era_category"

# Plot with institutions
p_h32 <- ggplot() +
  # IGOs as points
  geom_point(data = df, aes(x = ENG, y = LPI, color = .data[[color_var]]),
             size = 3, alpha = 0.85) +
  
  # Regression fit
  geom_ribbon(data = pred_h32, aes(x = x, ymin = conf.low, ymax = conf.high),
              fill = "grey70", alpha = 0.25) +
  geom_line(data = pred_h32, aes(x = x, y = predicted),
            color = "darkblue", size = 1.1) +
  
  # Label a few IGOs (extremes in legitimacy)
  geom_text_repel(
    data = df %>% filter(LPI == max(LPI, na.rm = TRUE) | LPI == min(LPI, na.rm = TRUE)),
    aes(x = ENG, y = LPI, label = institution, color = .data[[color_var]]),
    size = 3.3, fontface = "bold", max.overlaps = 12
  ) +
  
  # Titles and labels
  labs(
    title = "Figure 3.2 H3.2 — Public Engagement and Legitimacy",
    subtitle = "IGOs engaging more with societal stakeholders (civil society, NGOs, private sector, science) show higher legitimacy.",
    x = "Engagement Index (standardized)",
    y = "Legitimacy Participation Index (standardized)",
    color = str_replace_all(color_var, "_", " "),
      ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "right")

# Save
ggsave("conjecture_Images/figure_3_2_h3_2_ENG_LPI.png", p_h32, width = 9, height = 5.5, dpi = 300)
print(p_h32)

The figure 3.2 shows the relationship between public engagement (ENG) and the Legitimacy Participation Index (LPI) across IGOs, with points color-coded by founding era. The fitted regression line with a positive slope indicates that IGOs that interact more intensively with societal stakeholders — including civil society organizations, NGOs, private sector actors, and scientific communities — tend to score higher on legitimacy.

The shaded band represents 95% confidence intervals, confirming that the positive relationship is statistically consistent though with some variation.

  • On the higher end of engagement and legitimacy, we see IGOs like ITC (International Trade Centre), which exemplifies strong stakeholder outreach and inclusive practices.

  • On the lower end, the Minamata Convention scores much lower on both engagement and legitimacy, reflecting its relatively limited external participation structures despite being more recent.

Importantly, by differentiating IGOs by their founding eras, the figure highlights that post-Cold War and SDG-era IGOs are more likely to integrate stakeholder engagement into their governance, whereas earlier institutions (e.g., early Cold War) generally cluster lower on both measures. This suggests that legitimacy-building practices are not just a function of density or authority, but are also historically contingent: newer IGOs are structurally designed for participatory governance, while older ones struggle to adapt.

H3.3 IGOs more embedded in inter-institutional networks (IEI) achieve higher legitimacy.

# =========================
# H3.3: Embeddedness → Legitimacy
# =========================
library(dplyr)
library(ggplot2)
library(ggeffects)
library(stringr)

# Ensure EPI is numeric
df <- df %>%
  mutate(EPI = as.numeric(EPI),
         LPI = as.numeric(LPI),
         cumulative_stock = as.numeric(cumulative_stock))

# Run regression model
m_h33 <- lm(LPI ~ EPI + cumulative_stock, data = df)
summary(m_h33)
## 
## Call:
## lm(formula = LPI ~ EPI + cumulative_stock, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.40213 -0.68222 -0.06121  0.71434  1.92618 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)
## (Intercept)      -1.568e-16  1.448e-01   0.000    1.000
## EPI              -4.043e-02  1.588e-01  -0.255    0.800
## cumulative_stock  2.045e-01  1.588e-01   1.288    0.204
## 
## Residual standard error: 1.003 on 45 degrees of freedom
## Multiple R-squared:  0.03703,    Adjusted R-squared:  -0.005766 
## F-statistic: 0.8653 on 2 and 45 DF,  p-value: 0.4278
# Predicted values
pred_h33 <- ggpredict(m_h33, terms = "EPI [all]")

# Plot with IGOs and founding era
p_h33 <- ggplot() +
  geom_point(data = df, aes(x = EPI, y = LPI, color = founding_era_category), size = 3, alpha = 0.7) +
  geom_text(data = df %>% filter(LPI == max(LPI, na.rm = TRUE) | LPI == min(LPI, na.rm = TRUE)), 
            aes(x = EPI, y = LPI, label = institution, color = founding_era_category), 
            vjust = -1, size = 3.2, fontface = "bold") +
  geom_ribbon(data = pred_h33, aes(x = x, ymin = conf.low, ymax = conf.high), fill = "grey70", alpha = 0.25) +
  geom_line(data = pred_h33, aes(x = x, y = predicted), color = "darkblue", size = 1.1) +
  scale_color_brewer(palette = "Set1") +
  labs(
    title = "Figure 3.3 H3.3 — Embeddedness and Legitimacy",
    x = "Embeddedness Index (standardized)",
    y = "Legitimacy Participation Index (standardized)",
    color = "Founding Era",
    caption = str_wrap("IGOs broader inter-institutional networks.", 90)
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "right")

# Save figure
ggsave("conjecture_Images/figure_3_3_h3_3_EPI_LPI.png", p_h33, width = 8.6, height = 5.2, dpi = 300, bg = "white")
print(p_h33)

* X-axis: Embeddedness Index (how well integrated an IGO is within inter-institutional networks, e.g., coordination with UN bodies, treaties, partnerships).

  • Y-axis: Legitimacy Participation Index (LPI), measuring how legitimate and participatory the IGO is perceived to be.

  • Regression Line: This flat line suggests that embeddedness does not show a clear linear relationship with legitimacy, which runs counter to our expectation.

UN DOALOS (representing legal authority and high embeddedness) and UNEP (highly embedded within UN system) are positioned towards the right side, but Minamata appears on the extreme left, showing low legitimacy despite embeddedness.

IGOs from the Early Founding Years (Pre-1900) seem to cluster around low embeddedness but also do not show high legitimacy, suggesting that early organizations did not have the same institutional ties that modern IGOs do.

Interestingly, Globalisation Era IGOs (colored yellow) show moderate embeddedness and cluster mid-range on legitimacy, indicating a mixed success with embeddedness not necessarily guaranteeing legitimacy.

Implication

This suggests that embeddedness alone is not enough to increase legitimacy. Many IGOs with strong inter-institutional ties do not show higher legitimacy scores. The lack of a clear positive slope could indicate that embeddedness (cooperation with other institutions) might not be a sufficient condition for legitimacy, and it might be more context-specific to the issues and regional networks that these IGOs engage with. It also implies that the legitimacy-building process is more nuanced than just inter-institutional cooperation, and factors like democratic governance or inclusive decision-making may play a much stronger role.

Hypothesis 3.7 IGOs that deliver more effectively on their operational mandate have higher legitimacy

odi_cols <- c(70, 80, 71, 72) 
df <- df %>% mutate(ODI = rowMeans(across(all_of(odi_cols)), na.rm = TRUE))

# Categorize IGOs into High vs Low Operational Delivery based on ODI
df <- df %>%
  mutate(operational_delivery_group = ifelse(ODI > median(ODI, na.rm = TRUE), "High", "Low"))

# Select top 5 and bottom 5 IGOs by LPI for labeling
top_bottom_igos <- df %>%
  arrange(desc(LPI)) %>%
  slice_head(n = 5) %>%
  bind_rows(df %>% arrange(LPI) %>% slice_head(n = 5))

# Plotting boxplot for LPI by Operational Delivery Group with labeled extreme IGOs
p_h37_updated <- ggplot(df, aes(x = operational_delivery_group, y = LPI, fill = operational_delivery_group)) +
  geom_boxplot(outlier.shape = 16, outlier.size = 3, outlier.colour = "grey") +
  scale_fill_manual(values = c("High" = "darkgreen", "Low" = "lightgreen")) +
  
  # Labeling the top and bottom 5 IGOs
  geom_text_repel(data = top_bottom_igos, 
                  aes(x = operational_delivery_group, y = LPI, label = institution, color = operational_delivery_group),
                  size = 3.5, fontface = "bold", box.padding = 0.4, max.overlaps = 20) +
  
  labs(
    title = "Figure 3.7 H3.7 — Operational Delivery and Legitimacy",
    x = "Operational Delivery Group",
    y = "Legitimacy Participation Index",
    fill = "Operational Delivery",
    caption = str_wrap("IGOs with higher operational delivery (effective programs and project outcomes) are hypothesized to show higher legitimacy (LPI). Boxplots show the distribution of legitimacy scores (LPI) for IGOs with high and low operational delivery, with outliers marked in gray. The top and bottom 5 IGOs are labeled to highlight extreme cases.", 95)
  ) +
  theme_minimal(base_size = 14) +
  theme(legend.position = "none", plot.caption = element_text(hjust = 0))

# Save the plot
ggsave("conjecture_Images/figure_3_7_h3_7_operational_delivery_LPI.png", p_h37_updated, width = 9, height = 6, dpi = 300)

print(p_h37_updated)

Observation:

  • The boxplot shows a clear distinction in Legitimacy Participation Index (LPI) between IGOs with high operational delivery and those with low operational delivery. IGOs with high operational delivery, such as CITES, UNWTO, and UNEP, have higher LPI values, with most of their legitimacy scores clustered between 0 and 1. In contrast, IGOs with low operational delivery, like ISA, ITC, and OHCHR, tend to have lower LPI values, with their scores often falling below 0. Additionally, the plot highlights outliers, such as CITES in the high delivery group, which shows exceptionally high legitimacy, and Minamata Convention in the low delivery group, which exhibits very low legitimacy.

Interpretation:

  • The data suggests a strong correlation between operational success and legitimacy for IGOs. IGOs that are more effective at delivering on their mandates, whether through successful programs, partnerships, or overall impact, are perceived as more legitimate. This is evident in the high operational delivery group, where IGOs are generally seen as more legitimate, likely due to their capacity to achieve tangible outcomes. On the other hand, IGOs that struggle with operational delivery tend to be perceived as less legitimate, as seen in the low operational delivery group, where operational inefficiencies likely affect the perception of their effectiveness and overall authority.

Implication:

  • The results highlight the importance of effective operational delivery for enhancing the legitimacy of IGOs. IGOs that want to improve their legitimacy should focus on optimizing their programs, partnerships, and overall performance. The plot implies that mere presence or mandate is not enough for gaining legitimacy; IGOs must demonstrate tangible success in their operations to be seen as credible and impactful by their stakeholders. Organizations with inefficient operational delivery should consider revising their strategies or improving their effectiveness to avoid damage to their legitimacy and ensure they maintain global support and influence.