This vignette provides a visual introduction to the igoR package.

The analysis is based on examples from Pevehouse et al. (2020). For more information about the IGO data sets and additional downloads, see Intergovernmental Organizations (v3).

The dyadic data set is not included in the package due to its size (~500 MB in Stata `.dta` format). However, `igo_dyadic()` provides similar results.

## Definitions

From Pevehouse et al. (2019):

> ### What is an IGO?

> The definition of an Intergovernmental Organization (IGO) in the original data set is based on the following criteria:

> 1. An IGO must consist of at least three members of the COW-defined state system.
> 2. An IGO must hold regular plenary sessions at least once every ten years.
> 3. An IGO must possess a permanent secretariat and corresponding headquarters.

> ### When does an IGO actually begin?

> The data set begins to code an IGO by identifying the first year in which the organization functions. In some cases, individual members are listed by year of accession or signature.

> ### When does an IGO die?

> Version 3.0 of the IGO data set uses the following criteria:

> - An organization is considered terminated when the following words describe the context of the organization: replaced, succeeded, superseded, integrated, merged or dies.

## Analysis

This section provides a quick analysis based on the figures in Pevehouse et al. (2020).

### Initial setup

    library(igoR)

    # Load helper packages.
    library(ggplot2)
    library(dplyr)

First, we create a custom `ggplot2::theme()` named `theme_igor`, which is applied to all figures:

    theme_igor <- theme(
      axis.title = element_blank(),
      axis.line.x.bottom = element_line("black"),
      axis.line.y.left = element_line("black"),
      axis.text = element_text(color = "black", family = "sans"),
      axis.text.y.left = element_text(angle = 90, hjust = 0.5),
      legend.position = "bottom",
      legend.title = element_blank(),
      legend.key = element_blank(),
      legend.key.width = unit(2, "cm"),
      legend.text = element_text(family = "sans", size = 11.5),
      legend.box.background = element_rect(color = "black", linewidth = 1),
      legend.spacing = unit(1.2 / 100, "npc"),
      plot.background = element_rect("grey90"),
      plot.margin = unit(rep(0.5, 4), "cm"),
      panel.background = element_rect("white"),
      panel.grid = element_blank(),
      panel.border = element_rect(fill = NA, colour = "grey90"),
      panel.grid.major.y = element_line("grey90")
    )

### IGOs overview

The following code extracts the number of IGOs and states included in this package. The years available are 1816 to 2014.

    # Summarize values by year.
    igos_by_year <- igo_year_format3 %>%
      group_by(year) %>%
      summarise(value = n(), .groups = "keep") %>%
      mutate(variable = "Total IGOs")

    countries_by_year <- state_year_format3 %>%
      group_by(year) %>%
      summarise(value = n(), .groups = "keep") %>%
      mutate(variable = "Number of COW states")

    all_by_year <- igos_by_year %>%
      bind_rows(countries_by_year) %>%
      # Label the plot.
      mutate(
        variable = factor(
          variable,
          levels = c("Total IGOs", "Number of COW states")
        )
      )

    # Plot the results.
    ggplot(all_by_year, aes(x = year, y = value)) +
      geom_line(color = "black", aes(linetype = variable)) +
      scale_x_continuous(limits = c(1800, 2014)) +
      scale_linetype_manual(values = c("solid", "dashed")) +
      geom_vline(xintercept = c(1945, 1989)) +
      ylim(0, 400) +
      theme_igor

Figure 1: IGOs and states in the world system, 1816-2014

### IGO births and deaths

This plot shows how many IGOs were born or died in each year.

    # Summarize births and deaths by year.

    df <- igo_search()

    births <- df %>%
      mutate(year = sdate) %>%
      group_by(year) %>%
      summarise(value = n(), .groups = "keep") %>%
      mutate(variable = "IGO Births")

    deads <- df %>%
      mutate(year = deaddate) %>%
      group_by(year) %>%
      summarise(value = n(), .groups = "keep") %>%
      mutate(variable = "IGO Deaths")

    births_and_deads <- births %>%
      bind_rows(deads) %>%
      filter(!is.na(year))

    # Plot the results.
    ggplot(births_and_deads, aes(x = year, y = value)) +
      geom_line(color = "black", aes(linetype = variable)) +
      scale_linetype_manual(values = c("solid", "dashed")) +
      scale_x_continuous(
        limits = c(1815, 2015),
        breaks = seq(1815, 2015, by = 25)
      ) +
      ylim(0, 15) +
      theme_igor

Figure 2: Birth and death rates of IGOs, 1816-2014

### IGOs across regions

This plot shows the number of IGOs by region. The region definitions are based on Pevehouse et al. (2020) and the complementary replication data set (PRIO 2020):

IGOs across regions: codes

    # Cross-regional and universal codes are not included.

    asia <- c(
      550,
      560,
      570,
      580,
      590,
      600,
      610,
      640,
      650,
      660,
      670,
      725,
      750,
      825,
      1030,
      1345,
      1400,
      1530,
      1532,
      2300,
      2770,
      3185,
      3330,
      3560,
      3930,
      4115,
      4150,
      4160,
      4170,
      4190,
      4200,
      4220,
      4265,
      4440
    )

    middle_east <- c(
      370,
      380,
      390,
      400,
      410,
      420,
      430,
      440,
      450,
      460,
      470,
      490,
      500,
      510,
      520,
      1110,
      1410,
      1990,
      2000,
      2220,
      3450,
      3800,
      4140,
      4270,
      4380
    )

    europe <- c(
      20,
      300,
      780,
      800,
      832,
      840,
      860,
      1020,
      1050,
      1070,
      1080,
      1125,
      1140,
      1390,
      1420,
      1440,
      1563,
      1565,
      1580,
      1585,
      1590,
      1600,
      1610,
      1620,
      1630,
      1640,
      1645,
      1653,
      1660,
      1670,
      1675,
      1680,
      1690,
      1700,
      1710,
      1715,
      1720,
      1730,
      1740,
      1750,
      1760,
      1770,
      1780,
      1790,
      1800,
      1810,
      1820,
      1830,
      1930,
      1970,
      1980,
      2310,
      2325,
      2345,
      2440,
      2450,
      2550,
      2575,
      2610,
      2650,
      2705,
      2890,
      2972,
      3010,
      3095,
      3230,
      3290,
      3360,
      3485,
      3505,
      3585,
      3590,
      3600,
      3610,
      3620,
      3630,
      3640,
      3650,
      3655,
      3660,
      3665,
      3762,
      3810,
      3855,
      3860,
      3910,
      4000,
      4350,
      4450,
      4460,
      4510,
      4520,
      4540
    )

    africa <- c(
      30,
      40,
      50,
      60,
      80,
      90,
      100,
      110,
      115,
      120,
      125,
      130,
      140,
      150,
      155,
      160,
      170,
      180,
      190,
      200,
      210,
      225,
      240,
      250,
      260,
      280,
      290,
      690,
      700,
      710,
      940,
      1060,
      1150,
      1170,
      1260,
      1290,
      1310,
      1320,
      1330,
      1340,
      1355,
      1430,
      1450,
      1460,
      1470,
      1475,
      1480,
      1500,
      1510,
      1520,
      1870,
      2080,
      2090,
      2230,
      2330,
      2795,
      3300,
      3310,
      3470,
      3480,
      3510,
      3520,
      3570,
      3740,
      3760,
      3761,
      3790,
      3820,
      3875,
      3905,
      3970,
      4010,
      4030,
      4050,
      4055,
      4080,
      4110,
      4120,
      4130,
      4230,
      4240,
      4250,
      4251,
      4340,
      4365,
      4480,
      4485,
      4490,
      4500,
      4501,
      4503
    )

    americas <- c(
      310,
      320,
      330,
      340,
      720,
      760,
      815,
      875,
      880,
      890,
      900,
      910,
      912,
      913,
      920,
      950,
      970,
      980,
      990,
      1000,
      1010,
      1095,
      1130,
      1486,
      1489,
      1490,
      1860,
      1890,
      1920,
      1950,
      2070,
      2110,
      2120,
      2130,
      2140,
      2150,
      2160,
      2170,
      2175,
      2180,
      2190,
      2200,
      2203,
      2206,
      2210,
      2260,
      2340,
      2490,
      2560,
      2980,
      3060,
      3340,
      3370,
      3380,
      3390,
      3400,
      3410,
      3420,
      3428,
      3430,
      3670,
      3680,
      3812,
      3830,
      3880,
      3890,
      3900,
      3925,
      3980,
      4070,
      4100,
      4260,
      4280,
      4370
    )

    # `africa`, `americas`, `asia`, `europe` and `middle_east` were created in the
    # previous chunk, which is collapsed for readability.

    regions <- igo_search() %>%
      mutate(
        region = case_when(
          ionum %in% africa ~ "Africa",
          ionum %in% americas ~ "Americas",
          ionum %in% asia ~ "Asia",
          ionum %in% europe ~ "Europe",
          ionum %in% middle_east ~ "Middle East",
          TRUE ~ NA
        )
      ) %>%
      select(ioname, region)

After creating a data frame with the regions, we can classify IGOs by region.

    # The `regions` data set was created in the previous chunk.

    # Select all IGOs.
    alligos <- igo_year_format3 %>%
      select(ioname, year)

    regionsum <- alligos %>%
      left_join(regions) %>%
      group_by(year, region) %>%
      summarise(value = n(), .groups = "keep") %>%
      filter(!is.na(region)) %>%
      # Prepare for plotting.
      mutate(
        region = factor(
          region,
          levels = c(
            "Asia",
            "Europe",
            "Africa",
            "Americas",
            "Middle East"
          )
        )
      )

    # Plot the results.
    ggplot(regionsum, aes(x = year, y = value)) +
      geom_line(color = "black", aes(linetype = region)) +
      scale_linetype_manual(
        values = c("solid", "dashed", "dotted", "dotdash", "longdash")
      ) +
      guides(linetype = guide_legend(ncol = 2, byrow = TRUE)) +
      ylim(0, 80) +
      scale_x_continuous(
        limits = c(1815, 2015),
        breaks = seq(1815, 2015, by = 25)
      ) +
      theme_igor

Figure 3: IGO counts across regions, 1816-2014

### Selected countries in Asia

This plot shows the number of memberships for five countries in Asia: India, China, Pakistan, Indonesia and Bangladesh.

    asia5_cntries <- c("China", "India", "Pakistan", "Indonesia", "Bangladesh")

    # Use five countries in Asia.
    asia5_igos <- igo_state_membership(
      state = asia5_cntries,
      year = 1865:2014,
      status = "Full Membership"
    )

    asia5 <- asia5_igos %>%
      group_by(statenme, year) %>%
      summarise(values = n(), .groups = "keep") %>%
      mutate(statenme = factor(statenme, levels = asia5_cntries))

    # Plot the results.
    ggplot(asia5, aes(x = year, y = values)) +
      geom_line(color = "black", aes(linetype = statenme)) +
      scale_linetype_manual(
        values = c("solid", "dashed", "dotted", "dotdash", "longdash")
      ) +
      guides(linetype = guide_legend(ncol = 3, byrow = TRUE)) +
      theme(
        axis.title.y.left = element_text(
          family = "sans",
          size = 12,
          margin = margin(r = 6)
        )
      ) +
      scale_x_continuous(
        limits = c(1865, 2015),
        breaks = seq(1865, 2015, by = 25)
      ) +
      scale_y_continuous(
        "Number of memberships",
        breaks = seq(0, 100, 20),
        limits = c(0, 100)
      ) +
      theme_igor

Figure 4: IGO membership: five states in Asia, 1865-2014

### Shared memberships

Number of shared full memberships between Spain and four selected countries:

    selected_countries <- c("France", "Morocco", "China", "USA")

    spain_selected <- igo_dyadic("Spain", selected_countries)

    # Compute the number of shared memberships.
    spain_selected <- spain_selected %>%
      rowwise() %>%
      mutate(values = sum(c_across(aaaid:wassen) == 1))

    # Plot the results.
    ggplot(spain_selected, aes(x = year, y = values)) +
      geom_line(color = "black", aes(linetype = statenme2)) +
      scale_linetype_manual(values = c("solid", "dashed", "dotted", "dotdash")) +
      guides(linetype = guide_legend(ncol = 2, byrow = TRUE)) +
      theme(
        axis.title.y.left = element_text(
          family = "sans",
          size = 10,
          margin = margin(r = 6)
        )
      ) +
      scale_x_continuous(
        limits = c(1815, 2015),
        breaks = seq(1815, 2015, by = 25)
      ) +
      scale_y_continuous(
        "Number of memberships",
        breaks = seq(0, 110, 20),
        limits = c(0, 110)
      ) +
      theme_igor +
      geom_vline(xintercept = 1939, alpha = 0.2) +
      annotate("label", x = 1938, y = 60, size = 3, label = "Spanish \nCivil War") +
      geom_vline(xintercept = 1978, alpha = 0.2) +
      annotate(
        "label",
        x = 1970,
        y = 100,
        size = 3,
        label = "Constitution \nof Spain"
      )

Figure 5: Number of IGOs with full shared memberships with Spain (selected countries), 1816-2014

## References

Pevehouse, Jon CW, Timothy Nordstrom, Roseanne W McManus, and Anne Spencer Jamison. 2020. “Tracking Organizations in the World: The Correlates of War IGO Version 3.0 Datasets.” Journal of Peace Research 57 (3): 492–503. https://doi.org/10.1177/0022343319881175.
Pevehouse, Jon, Roseanne McManus, and Timothy Nordstrom. 2019. Codebook for Correlates of War 3 International Governmental Organizations Data Set Version 3.0.https://correlatesofwar.org/wp-content/uploads/IGO-Codebook_v3_short-copy.pdf .
PRIO. 2020. Replication Datasets: Journal of Peace Research. Peace Research Institute Oslo; Online. https://www.prio.org/journals/jpr/replicationdata.