library(readr)
library(ggplot2)
library(dplyr)
library(ggrepel)
library(stringr)
protestData = read_csv("../Data Files/protestData.csv")
Rows: 1833 Columns: 8── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): Country, Unrest Summary, Country_ISO
dbl (5): Year, Days of Protest, Fatalities, Events, Peaceful
ℹ 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.
popData = read_csv("../Data Files/popData.csv")
Rows: 16492 Columns: 5── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): Country Name, Country Code, Country_ISO
dbl (2): Year, Population
ℹ 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.
protestPop = merge(protestData,popData, by = 'Country_ISO')
protestPop = protestPop[, !colnames(protestPop) %in% c("Year.y", "Unrest Summary", "Country Name")]
protestPop$P <- log((1 + protestPop$Peaceful)/(2 + protestPop$Events), 10)
protestPop$F <- log((1 + protestPop$Fatalities)/(1 + protestPop$Population), 10)
protestPop$D <- log((1 + protestPop$`Days of Protest`)/(367), 10)
protestPop$PeaceZ <- scale(protestPop$P)
protestPop$FatalZ <- scale(protestPop$F)
protestPop$DaysZ <- scale(protestPop$D)
protestData[rowSums(is.na(protestData)) > 0, ]
protestPop
zscores = protestPop[c("PeaceZ", "FatalZ", "DaysZ")]
PCA <- psych::principal(zscores, rotate = "varimax", scores = TRUE, nfactors = 2)
PCA
Principal Components Analysis
Call: psych::principal(r = zscores, nfactors = 2, rotate = "varimax",
scores = TRUE)
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2
SS loadings 1.55 1.09
Proportion Var 0.52 0.36
Cumulative Var 0.52 0.88
Proportion Explained 0.59 0.41
Cumulative Proportion 0.59 1.00
Mean item complexity = 1.1
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.11
with the empirical chi square 133.1 with prob < NA
Fit based upon off diagonal values = 0.92
protestPop$`Unrest Severity` <- protestPop$FatalZ - protestPop$PeaceZ
protestPop$`Unrest Intensity` <- protestPop$DaysZ
protestData[rowSums(is.na(protestData)) > 0, ]
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle('Unrest Evaluation Mapping (1900 - 2021)')

#ggsave(path = '../Assets/', filename = 'uem.png', device = 'png', dpi = 600)
tunisia = filter(protestPop, Country == 'Tunisia')
tunisia$`Pre/Post 2011` <- ifelse(tunisia$Year.x > 2011, "Post-2011", "Pre-2011")
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = tunisia, aes(`Unrest Severity`, `Unrest Intensity`, colour = `Pre/Post 2011`), shape = 21, size = 2, fill = 'black', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : Tunisia ({min(tunisia$Year.x)} - {max(tunisia$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'tunisia.png', device = 'png', dpi = 600)
angola = filter(protestPop, Country == 'Angola')
angola$`Pre/Post 2002` <- ifelse(angola$Year.x > 2002, "Post-2002", "Pre-2002")
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = angola, aes(`Unrest Severity`, `Unrest Intensity`, colour = `Pre/Post 2002`), shape = 21, size = 2, fill = 'black', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : Angola ({min(angola$Year.x)} - {max(angola$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'angola.png', device = 'png', dpi = 600)
israel = filter(protestPop, Country == 'Israel')
israel$`Pre/Post 2019` <- ifelse(israel$Year.x > 2019, "Post-2019", "Pre-2019")
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = israel, aes(`Unrest Severity`, `Unrest Intensity`, colour = `Pre/Post 2019`), shape = 21, size = 2, fill = 'black', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : Israel ({min(israel$Year.x)} - {max(israel$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'israel.png', device = 'png', dpi = 600)
japan = filter(protestPop, Country == 'Japan')
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = japan, aes(`Unrest Severity`, `Unrest Intensity`), shape = 21, size = 2, colour = 'black', fill = 'white', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : Japan ({min(japan$Year.x)} - {max(japan$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'japan.png', device = 'png', dpi = 600)
afghan = filter(protestPop, Country == 'Afghanistan')
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = afghan, aes(`Unrest Severity`, `Unrest Intensity`), shape = 21, size = 2, colour = 'black', fill = 'white', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : Afghanistan ({min(afghan$Year.x)} - {max(afghan$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'afghan.png', device = 'png', dpi = 600)
sa = filter(protestPop, Country == 'South Africa')
ggplot() +
geom_point(data = protestPop, aes(`Unrest Severity`, `Unrest Intensity`), alpha = 0.05) +
geom_point(data = sa, aes(`Unrest Severity`, `Unrest Intensity`), shape = 21, size = 2, colour = 'black', fill = 'white', stroke = 2) +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
ggtitle(str_glue('Unrest Evaluation Mapping : South Africa ({min(sa$Year.x)} - {max(sa$Year.x)})'))

#ggsave(path = '../Assets/', filename = 'sa.png', device = 'png', dpi = 600)
LS0tDQp0aXRsZTogIlVucmVzdCBFdmFsdWF0aW9uIE1hcHBpbmciDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShzdHJpbmdyKQ0KYGBgDQoNCmBgYHtyfQ0KcHJvdGVzdERhdGEgPSByZWFkX2NzdigiLi4vRGF0YSBGaWxlcy9wcm90ZXN0RGF0YS5jc3YiKQ0KcG9wRGF0YSA9IHJlYWRfY3N2KCIuLi9EYXRhIEZpbGVzL3BvcERhdGEuY3N2IikNCmBgYA0KDQpgYGB7cn0NCnByb3Rlc3RQb3AgPSBtZXJnZShwcm90ZXN0RGF0YSxwb3BEYXRhLCBieSA9ICdDb3VudHJ5X0lTTycpDQpwcm90ZXN0UG9wID0gcHJvdGVzdFBvcFssICFjb2xuYW1lcyhwcm90ZXN0UG9wKSAlaW4lIGMoIlllYXIueSIsICJVbnJlc3QgU3VtbWFyeSIsICJDb3VudHJ5IE5hbWUiKV0NCmBgYA0KDQpgYGB7cn0NCnByb3Rlc3RQb3AkUCA8LSBsb2coKDEgKyBwcm90ZXN0UG9wJFBlYWNlZnVsKS8oMiArIHByb3Rlc3RQb3AkRXZlbnRzKSwgMTApDQpwcm90ZXN0UG9wJEYgPC0gbG9nKCgxICsgcHJvdGVzdFBvcCRGYXRhbGl0aWVzKS8oMSArIHByb3Rlc3RQb3AkUG9wdWxhdGlvbiksIDEwKQ0KcHJvdGVzdFBvcCREIDwtIGxvZygoMSArIHByb3Rlc3RQb3AkYERheXMgb2YgUHJvdGVzdGApLygzNjcpLCAxMCkNCmBgYA0KDQpgYGB7cn0NCnByb3Rlc3RQb3AkUGVhY2VaIDwtIHNjYWxlKHByb3Rlc3RQb3AkUCkNCnByb3Rlc3RQb3AkRmF0YWxaIDwtIHNjYWxlKHByb3Rlc3RQb3AkRikNCnByb3Rlc3RQb3AkRGF5c1ogPC0gc2NhbGUocHJvdGVzdFBvcCREKQ0KYGBgDQoNCmBgYHtyfQ0KcHJvdGVzdERhdGFbcm93U3Vtcyhpcy5uYShwcm90ZXN0RGF0YSkpID4gMCwgXQ0KYGBgDQoNCmBgYHtyfQ0KcHJvdGVzdFBvcA0KYGBgDQoNCmBgYHtyfQ0KenNjb3JlcyA9IHByb3Rlc3RQb3BbYygiUGVhY2VaIiwgIkZhdGFsWiIsICJEYXlzWiIpXQ0KYGBgDQoNCmBgYHtyfQ0KUENBIDwtIHBzeWNoOjpwcmluY2lwYWwoenNjb3Jlcywgcm90YXRlID0gInZhcmltYXgiLCBzY29yZXMgPSBUUlVFLCBuZmFjdG9ycyA9IDIpDQpQQ0ENCmBgYA0KDQpgYGB7cn0NCnByb3Rlc3RQb3AkYFVucmVzdCBTZXZlcml0eWAgPC0gcHJvdGVzdFBvcCRGYXRhbFogLSBwcm90ZXN0UG9wJFBlYWNlWg0KcHJvdGVzdFBvcCRgVW5yZXN0IEludGVuc2l0eWAgPC0gcHJvdGVzdFBvcCREYXlzWg0KYGBgDQoNCmBgYHtyfQ0KcHJvdGVzdERhdGFbcm93U3Vtcyhpcy5uYShwcm90ZXN0RGF0YSkpID4gMCwgXQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KCkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gcHJvdGVzdFBvcCwgYWVzKGBVbnJlc3QgU2V2ZXJpdHlgLCBgVW5yZXN0IEludGVuc2l0eWApLCBhbHBoYSA9IDAuMikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2d0aXRsZSgnVW5yZXN0IEV2YWx1YXRpb24gTWFwcGluZyAoMTkwMCAtIDIwMjEpJykNCg0KI2dnc2F2ZShwYXRoID0gJy4uL0Fzc2V0cy8nLCBmaWxlbmFtZSA9ICd1ZW0ucG5nJywgZGV2aWNlID0gJ3BuZycsIGRwaSA9IDYwMCkNCmBgYA0KDQpgYGB7cn0NCnR1bmlzaWEgPSBmaWx0ZXIocHJvdGVzdFBvcCwgQ291bnRyeSA9PSAnVHVuaXNpYScpDQp0dW5pc2lhJGBQcmUvUG9zdCAyMDExYCA8LSBpZmVsc2UodHVuaXNpYSRZZWFyLnggPiAyMDExLCAiUG9zdC0yMDExIiwgIlByZS0yMDExIikNCg0KZ2dwbG90KCkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gcHJvdGVzdFBvcCwgYWVzKGBVbnJlc3QgU2V2ZXJpdHlgLCBgVW5yZXN0IEludGVuc2l0eWApLCBhbHBoYSA9IDAuMDUpICsgDQogIGdlb21fcG9pbnQoZGF0YSA9IHR1bmlzaWEsIGFlcyhgVW5yZXN0IFNldmVyaXR5YCwgYFVucmVzdCBJbnRlbnNpdHlgLCBjb2xvdXIgPSBgUHJlL1Bvc3QgMjAxMWApLCBzaGFwZSA9IDIxLCBzaXplID0gMiwgZmlsbCA9ICdibGFjaycsIHN0cm9rZSA9IDIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2d0aXRsZShzdHJfZ2x1ZSgnVW5yZXN0IEV2YWx1YXRpb24gTWFwcGluZyA6IFR1bmlzaWEgKHttaW4odHVuaXNpYSRZZWFyLngpfSAtIHttYXgodHVuaXNpYSRZZWFyLngpfSknKSkNCg0KI2dnc2F2ZShwYXRoID0gJy4uL0Fzc2V0cy8nLCBmaWxlbmFtZSA9ICd0dW5pc2lhLnBuZycsIGRldmljZSA9ICdwbmcnLCBkcGkgPSA2MDApDQpgYGANCg0KYGBge3J9DQphbmdvbGEgPSBmaWx0ZXIocHJvdGVzdFBvcCwgQ291bnRyeSA9PSAnQW5nb2xhJykNCmFuZ29sYSRgUHJlL1Bvc3QgMjAwMmAgPC0gaWZlbHNlKGFuZ29sYSRZZWFyLnggPiAyMDAyLCAiUG9zdC0yMDAyIiwgIlByZS0yMDAyIikNCg0KZ2dwbG90KCkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gcHJvdGVzdFBvcCwgYWVzKGBVbnJlc3QgU2V2ZXJpdHlgLCBgVW5yZXN0IEludGVuc2l0eWApLCBhbHBoYSA9IDAuMDUpICsgDQogIGdlb21fcG9pbnQoZGF0YSA9IGFuZ29sYSwgYWVzKGBVbnJlc3QgU2V2ZXJpdHlgLCBgVW5yZXN0IEludGVuc2l0eWAsIGNvbG91ciA9IGBQcmUvUG9zdCAyMDAyYCksIHNoYXBlID0gMjEsIHNpemUgPSAyLCBmaWxsID0gJ2JsYWNrJywgc3Ryb2tlID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwKSArIA0KICBnZ3RpdGxlKHN0cl9nbHVlKCdVbnJlc3QgRXZhbHVhdGlvbiBNYXBwaW5nIDogQW5nb2xhICh7bWluKGFuZ29sYSRZZWFyLngpfSAtIHttYXgoYW5nb2xhJFllYXIueCl9KScpKQ0KDQojZ2dzYXZlKHBhdGggPSAnLi4vQXNzZXRzLycsIGZpbGVuYW1lID0gJ2FuZ29sYS5wbmcnLCBkZXZpY2UgPSAncG5nJywgZHBpID0gNjAwKQ0KYGBgDQoNCmBgYHtyfQ0KaXNyYWVsID0gZmlsdGVyKHByb3Rlc3RQb3AsIENvdW50cnkgPT0gJ0lzcmFlbCcpDQppc3JhZWwkYFByZS9Qb3N0IDIwMTlgIDwtIGlmZWxzZShpc3JhZWwkWWVhci54ID4gMjAxOSwgIlBvc3QtMjAxOSIsICJQcmUtMjAxOSIpDQoNCmdncGxvdCgpICsgDQogIGdlb21fcG9pbnQoZGF0YSA9IHByb3Rlc3RQb3AsIGFlcyhgVW5yZXN0IFNldmVyaXR5YCwgYFVucmVzdCBJbnRlbnNpdHlgKSwgYWxwaGEgPSAwLjA1KSArIA0KICBnZW9tX3BvaW50KGRhdGEgPSBpc3JhZWwsIGFlcyhgVW5yZXN0IFNldmVyaXR5YCwgYFVucmVzdCBJbnRlbnNpdHlgLCBjb2xvdXIgPSBgUHJlL1Bvc3QgMjAxOWApLCBzaGFwZSA9IDIxLCBzaXplID0gMiwgZmlsbCA9ICdibGFjaycsIHN0cm9rZSA9IDIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCkgKyANCiAgZ2d0aXRsZShzdHJfZ2x1ZSgnVW5yZXN0IEV2YWx1YXRpb24gTWFwcGluZyA6IElzcmFlbCAoe21pbihpc3JhZWwkWWVhci54KX0gLSB7bWF4KGlzcmFlbCRZZWFyLngpfSknKSkNCg0KI2dnc2F2ZShwYXRoID0gJy4uL0Fzc2V0cy8nLCBmaWxlbmFtZSA9ICdpc3JhZWwucG5nJywgZGV2aWNlID0gJ3BuZycsIGRwaSA9IDYwMCkNCmBgYA0KDQpgYGB7cn0NCmphcGFuID0gZmlsdGVyKHByb3Rlc3RQb3AsIENvdW50cnkgPT0gJ0phcGFuJykNCg0KZ2dwbG90KCkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gcHJvdGVzdFBvcCwgYWVzKGBVbnJlc3QgU2V2ZXJpdHlgLCBgVW5yZXN0IEludGVuc2l0eWApLCBhbHBoYSA9IDAuMDUpICsgDQogIGdlb21fcG9pbnQoZGF0YSA9IGphcGFuLCBhZXMoYFVucmVzdCBTZXZlcml0eWAsIGBVbnJlc3QgSW50ZW5zaXR5YCksIHNoYXBlID0gMjEsIHNpemUgPSAyLCBjb2xvdXIgPSAnYmxhY2snLCBmaWxsID0gJ3doaXRlJywgc3Ryb2tlID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwKSArIA0KICBnZ3RpdGxlKHN0cl9nbHVlKCdVbnJlc3QgRXZhbHVhdGlvbiBNYXBwaW5nIDogSmFwYW4gKHttaW4oamFwYW4kWWVhci54KX0gLSB7bWF4KGphcGFuJFllYXIueCl9KScpKQ0KDQojZ2dzYXZlKHBhdGggPSAnLi4vQXNzZXRzLycsIGZpbGVuYW1lID0gJ2phcGFuLnBuZycsIGRldmljZSA9ICdwbmcnLCBkcGkgPSA2MDApDQpgYGANCg0KYGBge3J9DQphZmdoYW4gPSBmaWx0ZXIocHJvdGVzdFBvcCwgQ291bnRyeSA9PSAnQWZnaGFuaXN0YW4nKQ0KDQpnZ3Bsb3QoKSArIA0KICBnZW9tX3BvaW50KGRhdGEgPSBwcm90ZXN0UG9wLCBhZXMoYFVucmVzdCBTZXZlcml0eWAsIGBVbnJlc3QgSW50ZW5zaXR5YCksIGFscGhhID0gMC4wNSkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gYWZnaGFuLCBhZXMoYFVucmVzdCBTZXZlcml0eWAsIGBVbnJlc3QgSW50ZW5zaXR5YCksIHNoYXBlID0gMjEsIHNpemUgPSAyLCBjb2xvdXIgPSAnYmxhY2snLCBmaWxsID0gJ3doaXRlJywgc3Ryb2tlID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwKSArIA0KICBnZ3RpdGxlKHN0cl9nbHVlKCdVbnJlc3QgRXZhbHVhdGlvbiBNYXBwaW5nIDogQWZnaGFuaXN0YW4gKHttaW4oYWZnaGFuJFllYXIueCl9IC0ge21heChhZmdoYW4kWWVhci54KX0pJykpDQoNCiNnZ3NhdmUocGF0aCA9ICcuLi9Bc3NldHMvJywgZmlsZW5hbWUgPSAnYWZnaGFuLnBuZycsIGRldmljZSA9ICdwbmcnLCBkcGkgPSA2MDApDQpgYGANCg0KYGBge3J9DQpzYSA9IGZpbHRlcihwcm90ZXN0UG9wLCBDb3VudHJ5ID09ICdTb3V0aCBBZnJpY2EnKQ0KDQpnZ3Bsb3QoKSArIA0KICBnZW9tX3BvaW50KGRhdGEgPSBwcm90ZXN0UG9wLCBhZXMoYFVucmVzdCBTZXZlcml0eWAsIGBVbnJlc3QgSW50ZW5zaXR5YCksIGFscGhhID0gMC4wNSkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gc2EsIGFlcyhgVW5yZXN0IFNldmVyaXR5YCwgYFVucmVzdCBJbnRlbnNpdHlgKSwgc2hhcGUgPSAyMSwgc2l6ZSA9IDIsIGNvbG91ciA9ICdibGFjaycsIGZpbGwgPSAnd2hpdGUnLCBzdHJva2UgPSAyKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsgDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDApICsgDQogIGdndGl0bGUoc3RyX2dsdWUoJ1VucmVzdCBFdmFsdWF0aW9uIE1hcHBpbmcgOiBTb3V0aCBBZnJpY2EgKHttaW4oc2EkWWVhci54KX0gLSB7bWF4KHNhJFllYXIueCl9KScpKQ0KDQojZ2dzYXZlKHBhdGggPSAnLi4vQXNzZXRzLycsIGZpbGVuYW1lID0gJ3NhLnBuZycsIGRldmljZSA9ICdwbmcnLCBkcGkgPSA2MDApDQpgYGANCg==