Add Alliance Treaty Obligations and Provisions (ATOP) alliance data to a dyad-year data frame
Source:R/add_atop_alliance.R
add_atop_alliance.Rd
add_atop_alliance()
allows you to add Alliance Treaty
Obligations and Provisions (ATOP) data to a (dyad-year, leader-dyad-year)
data frame.
Value
add_atop_alliance()
takes a (dyad-year, leader-dyad-year) data
frame and adds information about the alliance pledge in that given dyad-year
from the ATOP data. These include whether there was an alliance with a
defense pledge, an offense pledge, neutrality pledge, non-aggression pledge,
or pledge for consultation in time of crisis. It also includes a simple
indicator communicating whether there was an alliance of any kind whatsoever.
Details
Data are from version 5.1 of ATOP.
This function will also work with leader-dyad-years, though users should be careful with leader-level applications of alliance data. Alliance data are primarily communicated yearly, making it possible—even likely—that at least one leader-dyad in a given year is credited with an alliance that was not active in the particular leader-dyad. The ATOP alliance data are not communicated with time measurements more granular than the year, at least for dyad-years. The alliance-level data provided by ATOP do have termination dates, but I am unaware how well these start and termination dates coincide with particular members joining after the fact or exiting early. The alliance phase data appear to communicate that "phases" are understood as beginning or ending when the underlying document is amended in such a way that it affects one of their variable codings, but this may or may not be because of a signatory joining after the fact or exiting early. More guidance will be useful going forward, but use these data for leader-level analyses with that in mind.
It's conceivable that the simple alliance dummy can be 1 but all the provisions can be 0. See the section below for a case when this happens.
On the ndir
Argument
Consider this Belgium-France directed dyad-year from 1832 as illustrative of
what you'll want to consider in the ndir
argument. This is an interesting
case where it's an alliance with Belgium making no pledge of any kind to
France. France, instead, is making a defensive pledge to Belgium.
ccode1 | ccode2 | year | atop_defense | atop_offense | atop_neutral | atop_nonagg | atop_consul |
211 | 220 | 1832 | 0 | 0 | 0 | 0 | 0 |
220 | 211 | 1832 | 1 | 0 | 0 | 0 | 0 |
A lot of peacesciencer functionality prior to version 1.2 had leaned on
collapsing directed dyad-year data to non-directed dyad-year data through
simple subsets of the data where ccode2
is larger than ccode1
. Here,
that is a questionable decision absent clarification from the user. In this
case, Belgium (211) has made no pledge to defend France (220), though France
has made a pledge to defend Belgium in the event of an attack.
If the data supplied in the data
argument in this function are directed
dyad-years, there is no issue for merging. add_atop_alliance()
performs a
quick assessment of whether there is any instance in which ccode1
is greater
than ccode2
. If there are such observations, the data are assumed to be
directed dyad-year and the merging proceeds without further consideration. If
there are no instances in which ccode1
is greater than ccode2
, the data
are assumed to be non-directed dyad-years and the behavior of this function
hinges on the logical condition supplied to the ndir
argument.
If
ndir
isTRUE
(default): the function assumes you are aware the data you have are non-directed while the alliance data are directed. It will then summarize the directed dyad-year data looking for the highest observed value in the dyad-year in either direction. In the above illustration, it would mean that the Belgium-France dyad would have a defense pledge in 1832 no matter how the non-directed dyad is entered in the data. Belgium may not be pledging to defend France, but that is immaterial because the non-directed version of the directed dyad has a defense pledge in it.If
ndir
isFALSE
, the function performs a simple merge on matching dyad-year keys. In the above illustration, it would mean a Belgium-France dyad in 1832 would have no defense pledge because it was incidentally the case that the defense pledge that does appear in that dyad is made by the state with the higher state code. Use this argument with that in mind if your data are non-directed.
The impetus behind this argument comes by way of an issue raised by Kevin Galambos and J. Andrés Gannon. You can read about it here.
References
Leeds, Brett Ashley, Jeffrey M. Ritter, Sara McLaughlin Mitchell, and Andrew G. Long. 2002. "Alliance Treaty Obligations and Provisions, 1815-1944." International Interactions 28: 237-60.
Examples
# just call `library(tidyverse)` at the top of the your script
library(magrittr)
cow_ddy %>% add_atop_alliance()
#> Joining with `by = join_by(ccode1, ccode2, year)`
#> # A tibble: 2,214,930 × 9
#> ccode1 ccode2 year atop_alliance atop_defense atop_offense atop_neutral
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2 20 1920 0 0 0 0
#> 2 2 20 1921 0 0 0 0
#> 3 2 20 1922 0 0 0 0
#> 4 2 20 1923 0 0 0 0
#> 5 2 20 1924 0 0 0 0
#> 6 2 20 1925 0 0 0 0
#> 7 2 20 1926 0 0 0 0
#> 8 2 20 1927 0 0 0 0
#> 9 2 20 1928 0 0 0 0
#> 10 2 20 1929 0 0 0 0
#> # ℹ 2,214,920 more rows
#> # ℹ 2 more variables: atop_nonagg <dbl>, atop_consul <dbl>