Whittle Duplicate Conflict-Years by Conflict Reciprocation
Source:R/whittle_conflicts_reciprocation.R
whittle_conflicts_reciprocation.Rd
whittle_conflicts_reciprocation()
is in a class of
do-it-yourself functions for coercing (i.e. "whittling") conflict-year
data with cross-sectional units to unique conflict-year data by
cross-sectional unit. The inspiration here is clearly the problem
of whittling dyadic dispute-year data into true dyad-year data (like in
the Gibler-Miller-Little conflict data). This particular function will
keep the observations that are reciprocated (i.e. have militarized actions
on both sides of the conflict).
Arguments
- data
a data frame with a declared conflict attribute type.
- ...
optional, only to make the shortcut work
Value
whittle_conflicts_reciprocation()
takes a dyad-year data
frame or leader-dyad-year data frame with a declared conflict attribute
type and, grouping by the dyad and year, returns just those observations
that have militarized actions on both sides of the conflict. This will not
eliminate all duplicates, far from it, but it's a sensible cut later into
the procedure (after whittling onsets in whittle_conflicts_onsets()
the extent to which dispute-level reciprocation is a heuristic for dispute-level severity/importance (after some other considerations).
Details
Dyads are capable of having multiple disputes in a given year,
which can create a problem for merging into a complete dyad-year
data frame. Consider the case of France and Italy in 1860, which
had three separate dispute onsets that year (MID#0112, MID#0113, MID#0306),
as illustrative of the problem. The default process in peacesciencer
employs several rules to whittle down these duplicate dyad-years for
merging into a dyad-year data frame. These are available in
add_cow_mids()
and add_gml_mids()
.
Scholars are free to use this as a heuristic for whittling conflict-year data to be coerced into true dyad-year data, but I would be remiss if I did not offer a caveat about the reciprocation variable in inter-state dispute data. Namely, it is noisy and is not doing what scholars often think it's doing in the inter-state dispute data. Reciprocation is observed only when there is a militarized action on both sides of the conflict. By definition, someone on Side A will have a militarized action. Not every state on Side B does. However, scholars should not interpret that as the absence of militarized responses. In a forthcoming article in Journal of Conflict Resolution, Doug Gibler and I make the case that reciprocation isn't a useful variable to maintain at all because it can only invite errors (as is often the case in the CoW-MID data) and will obscure the fact that states that are attacked by another side routinely fight back. On many occasions, they also successfully repel the attack. Scholars who uncritically use this variable, certainly for hypothesis-testing on audience costs, are borrowing trouble with this measure.
wc_recip()
is a simple, less wordy, shortcut for the same function.
References
Miller, Steven V. 2021. "How peacesciencer Coerces Dispute-Year Data into Dyad-Year Data". URL: http://svmiller.com/peacesciencer/articles/coerce-dispute-year-dyad-year.html
Examples
# \donttest{
# just call `library(tidyverse)` at the top of the your script
library(magrittr)
gml_dirdisp %>% whittle_conflicts_onsets() %>% whittle_conflicts_reciprocation()
#> # A tibble: 9,640 × 39
#> dispnum ccode1 ccode2 year midongoing midonset sidea1 sidea2 revstate1
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2968 2 20 1979 1 1 0 1 0
#> 2 3900 2 20 1989 1 1 0 1 0
#> 3 3972 2 20 1991 1 1 1 0 1
#> 4 4183 2 20 1997 1 1 0 1 0
#> 5 1665 2 40 1921 1 1 1 0 1
#> 6 1677 2 40 1933 1 1 1 0 1
#> 7 1677 2 40 1934 1 0 1 0 1
#> 8 246 2 40 1960 1 1 1 0 1
#> 9 246 2 40 1961 1 0 1 0 1
#> 10 61 2 40 1962 1 1 1 0 1
#> # ℹ 9,630 more rows
#> # ℹ 30 more variables: revstate2 <dbl>, revtype11 <dbl>, revtype12 <dbl>,
#> # revtype21 <dbl>, revtype22 <dbl>, fatality1 <dbl>, fatality2 <dbl>,
#> # fatalpre1 <dbl>, fatalpre2 <dbl>, hiact1 <dbl>, hiact2 <dbl>,
#> # hostlev1 <dbl>, hostlev2 <dbl>, orig1 <dbl>, orig2 <dbl>, hiact <dbl>,
#> # hostlev <dbl>, mindur <dbl>, maxdur <dbl>, outcome <dbl>, settle <dbl>,
#> # fatality <dbl>, fatalpre <dbl>, stmon <dbl>, endmon <dbl>, recip <dbl>, …
cow_mid_dirdisps %>% whittle_conflicts_onsets() %>% whittle_conflicts_reciprocation()
#> Joining with `by = join_by(dispnum)`
#> # A tibble: 10,590 × 19
#> dispnum ccode1 ccode2 year dispongoing disponset sidea1 sidea2 fatality1
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2968 2 20 1979 1 1 0 1 0
#> 2 3900 2 20 1989 1 1 0 1 0
#> 3 3972 2 20 1991 1 1 1 0 0
#> 4 4183 2 20 1997 1 1 0 1 0
#> 5 1665 2 40 1921 1 1 1 0 0
#> 6 1677 2 40 1933 1 1 1 0 0
#> 7 1677 2 40 1934 1 0 1 0 0
#> 8 246 2 40 1960 1 1 0 1 0
#> 9 246 2 40 1961 1 0 0 1 0
#> 10 61 2 40 1962 1 1 1 0 0
#> # ℹ 10,580 more rows
#> # ℹ 10 more variables: fatality2 <dbl>, fatalpre1 <dbl>, fatalpre2 <dbl>,
#> # hiact1 <dbl>, hiact2 <dbl>, hostlev1 <dbl>, hostlev2 <dbl>, orig1 <dbl>,
#> # orig2 <dbl>, recip <dbl>
# }