One can argue that contentiousR bundles several
campaign/episode datasets that all aim to record the same broad
phenomenon — mass anti-regime contention — but differ in coding rules,
sourcing, and scope. Guseinov, Ustyuzhanin, and Korotayev (2026) compare
such kinds of datasets and find that, while not conceptually identical,
the major sources are empirically highly convergent in their regional
and temporal coverage — CNTS being the main exception, since it appears
to record coups and coup attempts rather than the same underlying
concept of revolution.
This section follows Guseinov, Ustyuzhanin, and Korotayev (2026) —
see the Reference below — on the comparison of
revolutionary-event datasets. plot_regional_coverage() and
plot_temporal_coverage() reproduce that paper’s core
descriptive exercise (its Figures 1-5) for any set of
conflict_data() campaign/episode datasets you choose — not
a fixed pair, so you can compare two, three, or all five at once.
For each dataset, this shows what share of its events falls in each
region, so datasets of very different total size remain comparable. Pass
metric = "count" instead of the default
"share" for raw counts.
library(contentiousR)
plot_regional_coverage(
datasets = c("navco1.3", "navco2.1", "beissinger", "csra", "mec"),
start_year = 1950,
end_year = 2013,
coding_system = "cow"
)Sub-Saharan Africa and Europe & Central Asia account for a large share of events across every dataset here, broadly matching the source article’s Figure 1.
The same idea over time, binned into (by default) 5-year periods.
With by_region = FALSE (the default) it plots one global
panel, as in the article’s Figure 5:
plot_temporal_coverage(
datasets = c("navco1.3", "navco2.1", "beissinger", "csra", "mec"),
start_year = 1950,
end_year = 2013,
coding_system = "cow"
)MEC sits well above the other four here. This is expected: MEC’s underlying definition of a contentious episode is broader — reformist as well as maximalist claims — than the “revolution” concept the other datasets target, so it picks up substantially more episodes across every period. (NAVCO 2.1 is compared here at the same campaign-onset level as the other datasets).
With by_region = TRUE, the same data is faceted by
region, as in the article’s Figure 4:
plot_temporal_coverage(
datasets = c("navco1.3", "navco2.1", "beissinger", "csra", "mec"),
start_year = 1950,
end_year = 2013,
coding_system = "cow",
by_region = TRUE
)Both functions take any subset of conflict_data()’s
campaign/episode datasets ("navco1.3",
"navco2.1", "beissinger", "csra",
"mec"), so a narrower comparison is also possible:
Guseinov, R., Ustyuzhanin, V., & Korotayev, A. (2026). Talking about the [same] revolution? A comparative analysis of main datasets of revolutionary events. Defence and Peace Economics, 1–31. doi:10.1080/10242694.2026.2704178