Last updated: 2021-03-24
Checks: 5 1
Knit directory:
thesis/analysis/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20210321)
was run prior to running the code in the R Markdown file.
Setting a seed ensures that any results that rely on randomness,
e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Tracking code development and connecting the code version to the results is
critical for reproducibility. To start using Git, open the Terminal and type
git init
in your project directory.
This project is not being versioned with Git. To obtain the full
reproducibility benefits of using workflowr, please see
?wflow_start
.
var_iter = c("**cb**", "**sb**", "**ns**", "**os**")
unit_iter = c("*adm*", "*bas*")
combi = expand.grid(unit_iter, var_iter)
names_unit = combi$Var1
names_var = combi$Var2
files <- list.files("../output/acc/", pattern = ".rds", full.names = T)
data <- lapply(files, function(x){
out = vars_detect(x)
tmp = readRDS(x)
thres_df = readRDS(
paste0(
"../output/test-results/test-results-",
paste(out$type, out$unit, out$var, sep = "-"),
".rds")
)
if(out$var == "all"){
for(i in 1:length(tmp)){
tmp[[i]]$df$var = "cb"
out$var = "cb"
}
}
thres_df %>%
filter(name == "f2", month == 0) %>%
filter(score == max(score, na.rm = T)) %>%
pull(rep) -> rep
thres_df %>%
filter(name == "threshold", rep == !!rep) %>%
pull(score) -> threshold
list(unit = out$unit, type = out$type, var = out$var, thres = threshold, df = tmp[[rep]]$df)
})
units <- unlist(lapply(data, `[[`, 1))
types <- unlist(lapply(data, `[[`, 2))
vars <- unlist(lapply(data, `[[`, 3))
dfs <- lapply(data, `[[`, 4)
var_iter = c("cb", "sb", "ns", "os")
unit_iter = c("states", "basins")
type_iter = c("baseline", "structural", "environmental")
for(var in var_iter){
tmp1 = data[vars == var]
for(unit in unit_iter){
unit_lab = if_else(unit == "states", "adm", "bas")
units = unlist(lapply(tmp1, `[[`, 1))
tmp2 = tmp1[units == unit]
types = unlist(lapply(tmp2, `[[`, 2))
thresholds = unlist(lapply(tmp2, `[[`, 4))
thresholds = data.frame(type = factor(types,
levels = c("baseline", "structural", "environmental"),
labels = c("CH", "SV", "EV")),
thresholds = thresholds)
df = do.call(rbind, lapply(tmp2, `[[`, 5))
opts_current$set(label = paste("dens", unit,var, sep = "-")) # setting label
df %>%
mutate(type = factor(type,
levels = c("baseline", "structural", "environmental"),
labels = c("CH", "SV", "EV")),
unit = factor(unit,
levels = c("states", "basins"),
labels = c("adm", "bas")),
obsv = factor(obsv,
levels = c("peace", "conflict"),
labels = c("Peace", "Conflict"))) %>%
ggplot() +
geom_density(aes(x=pred, fill = obsv), alpha = .4) +
geom_vline(data = thresholds, aes(xintercept=thresholds), linetype=2) +
xlim(0,1) +
labs(fill = "", x = "Predicted Probability", y = "Density",
subtitle = paste0("Unit: *", unit_lab, "* Variable: **",var,"**")) +
scale_fill_brewer(palette="Dark2") +
facet_wrap(~type, scales = "free_y")+
my_theme +
theme(plot.subtitle = element_markdown(size = 10)) -> plt_out
print(plt_out)
}
}
#files <- list.files("../output/acc/", pattern = ".rds", full.names = T)
files <- list.files("../output/test-results/", pattern = "test-results", full.names = T)
# files <- files[-grep("test-results-regression-basins", files)]
acc_data <- lapply(files, function(x){
out <- vars_detect(x)
tmp = readRDS(x)
tmp %>%
filter(month == 0) %>%
group_by(name) %>%
summarise(mean = mean(score, na.rm = T),
median = median(score, na.rm = TRUE),
sd = sd(score, na.rm = T),
type = out$type,
unit = out$unit,
var = out$var) %>%
ungroup()
})
acc_data = do.call(rbind, acc_data)
acc_data %<>%
mutate(var = factor(var,
levels = c("all", "sb", "ns", "os"),
labels = c("cb", "sb", "ns", "os")),
type = factor(type,
labels = c("LR", "CH", "SV", "EV"),
levels = c("regression", "baseline", "structural", "environmental")),
unit = if_else(unit == "basins", "bas", "adm"),
unit = factor(unit, levels = c("adm", "bas"), labels = c("adm", "bas")))
pd <- position_dodge(0.1)
score = "median"
labs.unit = c("_adm_", "_bas_")
names(labs.unit) = c("adm", "bas")
labs.name = c("", "")
names(labs.name) = c("AUC", "AUC")
plt_auc = acc_data %>%
dplyr::filter(name == "auc") %>%
dplyr::select(type, unit, var, name, score = !!score, sd) %>%
ggplot(aes(color=var, x=type, shape=var)) +
geom_point(aes(y=score), position = position_dodge2(width = .5)) +
geom_errorbar(aes(ymin=score-sd, ymax=score+sd, x=type), width=.5, position = position_dodge2(width = .5)) +
scale_color_brewer(palette = "Dark2") +
labs(x="", y = "AUC", color = "Conflict Class", shape = "Conflict Class") +
ylim(0,1) +
facet_wrap(~unit+name, labeller = labeller(unit = labs.unit, name = labs.name)) +
guides(color=guide_legend(ncol=4)) +
my_theme
plt_spec = acc_data %>%
filter(name == "specificity") %>%
dplyr::select(type, unit, var, name, score = !!score, sd) %>%
ggplot(aes(color=var, x=type, shape=var)) +
geom_point(aes(y=score), position = position_dodge2(width = .5)) +
geom_errorbar(aes(ymin=score-sd, ymax=score+sd, x=type), width=.5, position = position_dodge2(width = .5)) +
scale_color_brewer(palette = "Dark2") +
labs(x="Model type", y = "Specificity", color = "Conflict Class", shape = "Conflict Class") +
ylim(0,1) +
facet_wrap(~unit+name, labeller = labeller(unit = labs.unit, name = labs.name)) +
guides(color=guide_legend(ncol=4)) +
my_theme
if(knitr::is_latex_output()){
ggarrange(plt_auc, plt_spec, ncol = 1, common.legend = T, legend = "bottom")
} else {
require(plotly)
subplot(plt_auc, plt_spec, nrows = 2) %>%
layout(legend = list(orientation = "h",
xanchor = "center",
x = 0.5, y = -.1))
}
#files <- list.files("../output/acc/", pattern = ".rds", full.names = T)
files <- list.files("../output/test-results/", pattern = "test-results", full.names = T)
# files <- files[-grep("test-results-regression-basins", files)]
acc_data <- lapply(files, function(x){
out <- vars_detect(x)
tmp = readRDS(x)
tmp$type = out$type
tmp %>%
filter(month != 0)
})
acc_data = do.call(rbind, acc_data)
acc_data %<>%
mutate(var = factor(var, labels = c("all", "sb", "ns", "os"),
levels = c("all", "sb", "ns", "os")),
type = factor(type,
labels = c("LR", "CH", "SV", "EV"),
levels = c("regression", "baseline", "structural", "environmental")),
unit = if_else(unit == "basins", "bas", "adm"),
unit = factor(unit, levels = c("adm", "bas"), labels = c("adm", "bas")))
labs.unit = c("_adm_", "_bas_")
names(labs.unit) = c("adm", "bas")
labs.var = c("__cb__", "__sb__", "__ns__", "__os__")
names(labs.var) = c("all", "sb", "ns", "os")
acc_data %>%
filter(name == "auc") %>%
dplyr::select(name, score, month, var, unit, type) %>%
ggplot(aes(x=month, y=score, color=type, linetype=type))+
stat_smooth(geom='line', alpha=.4, size=.5, se=FALSE, lwd=1)+
facet_grid(unit~var, labeller = labeller(unit = labs.unit, var = labs.var)) +
scale_x_continuous(breaks=c(1:12)) +
ylim(0,1) +
theme_classic() +
scale_color_brewer(palette="Dark2") +
labs(subtitle = "AUC", x = "Prediction window (in months)", y = "Score", color = "Model", linetype = "Model") +
guides(color=guide_legend(ncol=4)) +
my_theme -> plt_out
plot_output(plt_out)
acc_data %>%
filter(name == "specificity") %>%
dplyr::select(name, score, month, var, unit, type) %>%
ggplot(aes(x=month, y=score, color=type, linetype=type))+
stat_smooth(geom='line', alpha=.4, size=.5, se=FALSE, lwd=1)+
facet_grid(unit~var, labeller = labeller(unit = labs.unit, var = labs.var)) +
scale_x_continuous(breaks=c(1:12)) +
ylim(0,1) +
theme_classic() +
scale_color_brewer(palette="Dark2") +
labs(subtitle = "Specificity", x = "Prediction window (in months)", y = "Score", color = "Model", linetype="Model") +
guides(color=guide_legend(ncol=4)) +
my_theme -> plt_out
plot_output(plt_out)
files <- list.files("../output/acc/", pattern = ".rds", full.names = T)
auc_data <- lapply(files, function(x){
out <- vars_detect(x)
tmp = readRDS(x)
df_auc <- lapply(1:length(tmp), function(i){
rep = tmp[[i]]$rep
FPR = tmp[[i]]$auc$curve[,1]
recall = tmp[[i]]$auc$curve[,2]
FPR = FPR[ c(rep(FALSE, 3), TRUE)] # reduce to every 4th entry to reduce file size
recall = recall[ c(rep(FALSE, 3), TRUE)] # reduce to every 4th entry to reduce file size
auc <- tibble(type = out$type,
unit = out$unit,
var = out$var,
rep = rep,
FPR = FPR,
recall = recall)
})
df_auc = do.call(rbind, df_auc)
})
auc_data <- do.call(rbind, auc_data)
auc_data %<>%
mutate(var = factor(var,
labels = c("__cb__", "__sb__", "__ns__", "__os__"),
levels = c("all", "sb", "ns", "os")),
type = factor(type,
labels = c("CH", "SV", "EV"),
levels = c("baseline", "structural", "environmental")),
unit = factor(unit, levels = c("states", "basins"), labels = c("adm", "bas")))
auc_data %>%
filter(unit == "adm") %>%
mutate(group = paste(type,var,rep,sep="-")) %>%
ggplot(aes(x=FPR, y=recall,color=type,linetype=type)) +
geom_line(aes(group=group), size=.1, alpha = .5) +
geom_smooth(alpha=1, size=.5, se=FALSE) +
scale_color_manual(values = RColorBrewer::brewer.pal(n=4, name = "Dark2")[2:4]) +
facet_wrap(~var, ncol = 2) +
labs(color = "Model", linetype="Model", y = "Sensitivity", x = "FPR", subtitle = "adm") +
guides(color=guide_legend(override.aes = list(alpha = 1, ncol = 3))) +
my_theme +
theme(
plot.subtitle = element_markdown(size = 10, face = "italic")
)
auc_data %>%
filter(unit == "bas") %>%
mutate(group = paste(type,var,rep,sep="-")) %>%
ggplot(aes(x=FPR, y=recall,color=type,linetype=type)) +
geom_line(aes(group=group), size=.1, alpha = .5) +
geom_smooth(alpha=1, size=.5, se=FALSE) +
scale_color_manual(values = RColorBrewer::brewer.pal(n=4, name = "Dark2")[2:4]) +
facet_wrap(~var, ncol = 2) +
labs(color = "Model", linetype="Model", y = "Sensitivity", x = "FPR", subtitle = "bas") +
guides(color=guide_legend(override.aes = list(alpha = 1, ncol = 3))) +
my_theme +
theme(
plot.subtitle = element_markdown(size = 10, face = "italic")
)
adm <- st_read("../data/vector/states_mask.gpkg", quiet = T)
adm <- select(adm, geom)
adm <- st_make_valid(adm)
bas <- st_read("../data/vector/basins_simple.gpkg", quiet = T)
bas <- select(bas, geom)
bas <- st_make_valid(bas)
crs <- st_crs("EPSG:3857")
adm <- st_transform(adm, crs)
adm <- st_simplify(adm, dTolerance = 1500, preserveTopology = T)
bas <- st_transform(bas, crs)
bas <- st_simplify(bas, dTolerance = 1000, preserveTopology = T)
files = list.files("../output/test-results/", pattern ="cnfrisk", full.names = T)
map_data = lapply(files, function(x){
out = vars_detect(x)
tmp = st_read(x, quiet = T)
tmp = st_drop_geometry(tmp)
tmp$unit = out$unit
tmp$type = out$type
tmp$var = out$var
tmp %<>%
select(unit,type,var,mean,obsv)
if(out$unit == "basins") {
st_as_sf(bind_cols(bas, tmp))
} else {
st_as_sf(bind_cols(adm, tmp))
}
})
map_data = do.call(rbind, map_data)
map_data %>%
filter(unit == "states", var == "sb") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
map_data %>%
filter(unit == "states", var == "ns") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
map_data %>%
filter(unit == "states", var == "os") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
map_data %>%
filter(unit == "basins", var == "sb") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
map_data %>%
filter(unit == "basins", var == "ns") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
map_data %>%
filter(unit == "basins", var == "os") -> plt_data
breaks = seq(0,1,0.1)
plt_data %>%
filter(type == "baseline") %>%
dplyr::select(obsv) %>%
mutate(obsv = ifelse(obsv > 0, obsv, NA)) -> obsv_data
obsv_data %>%
tm_shape() +
tm_polygons("obsv",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
breaks = 0:12,
style = "fixed",
title = "Conflict Months",
showNA = FALSE,
legend.hist = TRUE,
labels = as.character(1:12)) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Observation",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_obsv
plt_data %>%
filter(type == "baseline") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Conflict History (CH)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_bas
plt_data %>%
filter(type == "structural") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Structural Variables (SV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_str
plt_data %>%
filter(type == "environmental") %>%
tm_shape() +
tm_polygons("mean",
palette = "PuBu",
lwd=.01,
border.col = "grey90",
title = "Probability of conflict",
breaks = breaks,
style = "fixed",
legend.hist = TRUE) +
tm_legend(stack = "horizontal") +
tm_layout(title = "Environmental Variables (EV)",
title.position = c("right", "top"),
title.size = 0.7,
legend.title.size = 0.7,
legend.text.size = 0.45,
legend.position = c("left", "bottom"),
legend.outside.position = "bottom",
legend.bg.color = "white",
legend.bg.alpha = 0,
legend.outside = TRUE,
legend.hist.width = 1,
legend.hist.height = .8,
legend.hist.size = .5) -> map_env
tmap_arrange(map_obsv, map_bas, map_str, map_env, ncol = 2)
\end{tiny}
files <- list.files("../output/test-results/", pattern = "test-results", full.names = T)
acc_data <- lapply(files, function(x){
out <- vars_detect(x)
tmp = readRDS(x)
tmp %<>%
filter(name == "f2",
month == 0)
tmp$type = out$type
tmp
})
acc_data = do.call(rbind, acc_data)
acc_data %<>%
mutate(type = factor(type,
levels = c("regression", "baseline", "structural", "environmental"),
labels = c("LR", "CH", "SV", "EV")),
var = factor(var,
levels = c("all", "sb", "ns", "os"),
labels = c("cb", "sb", "ns", "os")),
unit = factor(unit,
levels = c("states", "basins"),
labels = c("adm", "bas")))
acc_data %>%
# filter(type != "LR") %>%
group_by(var) %>%
nest() %>%
mutate(model = map(data, ~lm(score ~ unit*type, data = .x)),
model = map(model, ~augment(.x)),
plots_resid= map(model,
~ggplot(data = .x, aes(x=.fitted, y =.resid, shape = unit, color = type)) +
geom_point(alpha = .5) +
xlim(0.15,.7) +
labs(x="Fitted values",
y = "Residuals",
color = "Aggregation unit",
shape = "Predictor set",
subtitle = var) +
scale_color_brewer(palette = "Dark2") +
guides(colour = guide_legend(override.aes = list(alpha = 1)),
shape = guide_legend(override.aes = list(alpha = 1))) +
theme_classic() +
theme(
plot.subtitle=element_markdown(face = "bold", hjust = .5),
plot.title = element_markdown(size = 10),
plot.caption = element_markdown(size = 10),
plot.tag = element_markdown(size = 10),
strip.background = element_blank(),
strip.text = element_markdown(size = 10),
strip.text.x = element_markdown(size = 10),
strip.text.y = element_markdown(size = 10),
legend.position = "bottom",
legend.key.size = unit(0.4, "cm"),
legend.text = element_markdown(size = 9),
legend.title = element_markdown(size=10),
axis.text = element_markdown(size = 7),
axis.title=element_markdown(size=10)
)),
plots_qq = map(model,
~ggplot(data = .x, aes(sample = score, shape = unit, color = type)) +
stat_qq(alpha = .55) +
ylim(0.05, 0.85) +
labs(x="Theoretical quantiles",
y = "Sample quantiles",
color = "Aggregation unit",
shape = "Predictor set",
subtitle = var) +
scale_color_brewer(palette = "Dark2") +
guides(colour = guide_legend(override.aes = list(alpha = 1)),
shape = guide_legend(override.aes = list(alpha = 1))) +
theme_classic() +
theme(
plot.subtitle=element_markdown(face = "bold", hjust = .5),
plot.title = element_markdown(size = 10),
plot.caption = element_markdown(size = 10),
plot.tag = element_markdown(size = 10),
strip.background = element_blank(),
strip.text = element_markdown(size = 10),
strip.text.x = element_markdown(size = 10),
strip.text.y = element_markdown(size = 10),
legend.position = "bottom",
legend.key.size = unit(0.4, "cm"),
legend.text = element_markdown(size = 9),
legend.title = element_markdown(size=10),
axis.text = element_markdown(size = 7),
axis.title=element_markdown(size=10)
)
)
) -> lm_plots
qqplots = lm_plots$plots_qq
if(knitr::is_latex_output()){
ggarrange(qqplots[[1]] +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.line.x = element_blank()),
qqplots[[4]]+
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.line.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.line.y = element_blank()),
qqplots[[2]],
qqplots[[3]] +
theme(axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.line.y = element_blank()),
ncol = 2, nrow = 2, common.legend = TRUE, legend="bottom")
} else {
for (i in 1:length(qqplots)){
var = as.character(qqplots[[i]]$labels$subtitle)
require(plotly)
ggplotly(qqplots[[i]] + ggtitle(var) + theme(plot.title = element_markdown(face = "bold"))) %>%
layout(legend = list(orientation = "h",
xanchor = "center",
x = 0.5, y = -.2)) -> plt_out
print(plt_out)
}
}
residplots = lm_plots$plots_resid
if(knitr::is_latex_output()){
ggarrange(residplots[[1]] +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.line.x = element_blank()),
residplots[[4]]+
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.line.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.line.y = element_blank()),
residplots[[2]],
residplots[[3]] +
theme(axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.line.y = element_blank()),
ncol = 2, nrow = 2, common.legend = TRUE, legend="bottom")
} else {
for (i in 1:length(residplots)){
var = as.character(residplots[[i]]$labels$subtitle)
require(plotly)
ggplotly(residplots[[i]] + ggtitle(var) + theme(plot.title = element_markdown(face = "bold"))) %>%
layout(legend = list(orientation = "h",
xanchor = "center",
x = 0.5, y = -.2)) -> plt_out
print(plt_out)
}
}
predictors = readRDS("../data/vector/predictor_cube.rds")
vars = c("AGRET", "AGRGPP", "AGRLST", "AGRPREC", "AGRANOM", "AGRSPI1", "AGRSPI3", "AGRSPI6", "AGRSPI12", "AGRSPEI1", "AGRSPEI3", "AGRSPEI6", "AGRSPEI12")
predictors %>%
filter(var %in% vars) %>%
as_tibble() %>%
mutate(var = factor(var,
labels = vars,
levels = vars)) %>%
dplyr::select(id, unit, var, value) %>%
filter(!(unit == "states" & id > 847)) %>%
group_by(unit, var) %>%
summarise("Min." = round(min(value, na.rm = T),3),
"1st Qu." = round(quantile(value, 0.25, na.rm = T),3),
"Median" = round(median(value, na.rm = T),3),
"Mean" = round(mean(value, na.rm = T),3),
"3rd Qu." = round(quantile(value, 0.75, na.rm = T),3),
"Max." = round(max(value, na.rm = T),3),
"NA's" = round(sum(is.na(value)),3)) %>%
ungroup() %>%
mutate(unit = if_else(unit == "basins","*bas*", "*adm*")) %>%
mutate(unit = factor(unit, levels = c("*adm*", "*bas*"),
labels = c("*adm*", "*bas*"))) %>%
arrange(var, unit) %>%
dplyr::select(-var) %>%
rename("Spatial Unit" = unit) %>%
thesis_kable(escape = FALSE,
caption = "Descriptive statistics of agricultural interaction variables. (Unit of measurment: AGRET - kg/m²; AGRGPP - kg C/m²; AGRLST - K; AGRPREC - mm AGRANOM - mm; others - dimensionless)",
caption.short = "Descriptive statistics of agricultural interaction variables.",
linesep = c("", "\\addlinespace"),
longtable = T) %>%
kable_styling(latex_options = c("HOLD_position", "repeat_header")) %>%
group_rows("AGRET", 1, 2) %>%
group_rows("AGRGPP", 3, 4) %>%
group_rows("AGRLST", 5, 6) %>%
group_rows("AGRPREC", 7, 8) %>%
group_rows("AGRANOM", 9, 10) %>%
group_rows("AGRSPI1", 11, 12) %>%
group_rows("AGRSPI3", 13, 14) %>%
group_rows("AGRSPI6", 15, 16) %>%
group_rows("AGRSPI12", 17, 18) %>%
group_rows("AGRSPEI1", 19, 20) %>%
group_rows("AGRSPEI3", 21, 22) %>%
group_rows("AGRSPEI6", 23, 24) %>%
group_rows("AGRSPEI12", 25, 26)
Spatial Unit | Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. | NA’s |
---|---|---|---|---|---|---|---|
AGRET | |||||||
adm | 0.000 | 0.253 | 9.996 | 118.725 | 138.828 | 1273.573 | 643 |
bas | 0.000 | 0.000 | 0.647 | 28.715 | 12.693 | 973.495 | 39358 |
AGRGPP | |||||||
adm | 0.000 | 0.491 | 20.158 | 232.349 | 272.386 | 6251.350 | 478 |
bas | 0.000 | 0.000 | 1.337 | 55.510 | 27.987 | 2465.299 | 38957 |
AGRLST | |||||||
adm | 0.000 | 0.137 | 8.428 | 60.278 | 104.179 | 312.276 | 0 |
bas | 0.000 | 0.000 | 0.066 | 18.272 | 7.486 | 279.603 | 0 |
AGRPREC | |||||||
adm | 0.000 | 0.003 | 0.526 | 17.237 | 13.174 | 429.346 | 0 |
bas | 0.000 | 0.000 | 0.001 | 4.473 | 0.500 | 304.854 | 0 |
AGRANOM | |||||||
adm | -154.115 | -0.148 | 0.000 | 0.535 | 0.050 | 265.607 | 0 |
bas | -138.119 | -0.001 | 0.000 | 0.082 | 0.000 | 125.800 | 0 |
AGRSPI1 | |||||||
adm | -3.554 | -0.006 | 0.000 | 0.011 | 0.004 | 5.854 | 1100 |
bas | -3.471 | 0.000 | 0.000 | 0.003 | 0.000 | 4.494 | 2571 |
AGRSPI3 | |||||||
adm | -4.829 | -0.004 | 0.000 | 0.012 | 0.007 | 5.773 | 2654 |
bas | -2.411 | 0.000 | 0.000 | 0.003 | 0.000 | 3.517 | 3331 |
AGRSPI6 | |||||||
adm | -3.935 | -0.003 | 0.000 | 0.012 | 0.008 | 4.157 | 5180 |
bas | -2.596 | 0.000 | 0.000 | 0.003 | 0.000 | 3.035 | 6005 |
AGRSPI12 | |||||||
adm | -4.750 | -0.003 | 0.000 | 0.012 | 0.008 | 3.555 | 10233 |
bas | -2.481 | 0.000 | 0.000 | 0.003 | 0.000 | 2.726 | 12059 |
AGRSPEI1 | |||||||
adm | -4.126 | -0.005 | 0.000 | 0.007 | 0.006 | 3.306 | 973 |
bas | -2.446 | 0.000 | 0.000 | 0.002 | 0.000 | 2.427 | 2230 |
AGRSPEI3 | |||||||
adm | -2.740 | -0.005 | 0.000 | 0.008 | 0.006 | 5.006 | 2651 |
bas | -1.819 | 0.000 | 0.000 | 0.002 | 0.000 | 2.636 | 3310 |
AGRSPEI6 | |||||||
adm | -2.423 | -0.004 | 0.000 | 0.008 | 0.007 | 4.259 | 5183 |
bas | -1.856 | 0.000 | 0.000 | 0.002 | 0.000 | 2.730 | 6005 |
AGRSPEI12 | |||||||
adm | -3.134 | -0.004 | 0.000 | 0.007 | 0.007 | 3.558 | 10246 |
bas | -2.689 | 0.000 | 0.000 | 0.002 | 0.000 | 2.668 | 12059 |
#files <- list.files("../output/acc/", pattern = ".rds", full.names = T)
files <- list.files("../output/test-results/", pattern = "test-results", full.names = T)
# files <- files[-grep("test-results-regression-basins", files)]
acc_data <- lapply(files, function(x){
out <- vars_detect(x)
tmp = readRDS(x)
tmp %>%
filter(month == 0) %>%
group_by(name) %>%
summarise(target = mean(score, na.rm = T),
sd = sd(score, na.rm = T),
type = out$type,
unit = out$unit,
var = out$var) %>%
ungroup()
})
acc_data = do.call(rbind, acc_data)
acc_data %<>%
mutate(var = factor(var, labels = c("**cb**", "**sb**", "**ns**", "**os**"),
levels = c("all", "sb", "ns", "os")),
type = factor(type, labels = c("LR", "CH", "SV", "EV"),
levels = c("regression", "baseline", "structural", "environmental")),
unit = if_else(unit == "basins", "bas", "adm"),
unit = factor(unit, levels = c("adm", "bas"), labels = c("\\emph{adm}", "\\emph{bas}")))
acc_data %>%
filter(name %in% c("f2", "auc", "aucpr", "sensitivity", "specificity", "precision")) %>%
mutate(
sd = paste0("(", as.character(round(sd,3)), ")"),
score = paste0(round(target,3), " +/- ", sd)) %>%
dplyr::select(type, unit, var, name, score, target) %>%
group_by(name, var) %>%
mutate(score = if_else(target == max(target), paste0("**", score, "**"), score )) %>%
dplyr::select(-target) %>%
ungroup() %>%
pivot_wider(names_from = name, values_from = c(score),
id_cols = c(type, unit, var)) %>%
arrange(type, unit, var) %>%
rename("F2" = f2, "AUC" = auc, "AUPR" = aucpr, "Precision" = precision, "Sensitivity" = sensitivity, "Specificity" = specificity) %>%
rename(Theme = type, Unit = "unit", Variable = var) %>%
relocate(Theme, Unit, Variable, F2, AUC, AUPR, Precision, Sensitivity, Specificity) %>%
ungroup %>%
thesis_kable(escape = F,
align = "ccccccccc",
longtable = T,
linesep = c("", "", "","\\addlinespace"),
caption.short = "Global performance metrics for all model configurations.",
caption = "Global performance metrics for all models configurations. Bold number indicate the best performance of the respective performance metric per conflict class. Standard deviation is given in brackets.") %>%
kable_styling(latex_options = c("HOLD_position", "repeat_header"))
Theme | Unit | Variable | F2 | AUC | AUPR | Precision | Sensitivity | Specificity |
---|---|---|---|---|---|---|---|---|
LR | cb | 0.325 +/- (0.001) | 0.671 +/- (0.001) | 0.128 +/- (0.001) | 0.11 +/- (0.002) | 0.668 +/- (0.007) | 0.598 +/- (0.007) | |
LR | sb | 0.242 +/- (0.003) | 0.703 +/- (0.003) | 0.084 +/- (0.002) | 0.08 +/- (0.002) | 0.541 +/- (0.02) | 0.751 +/- (0.014) | |
LR | ns | 0.183 +/- (0.002) | 0.739 +/- (0.002) | 0.049 +/- (0.001) | 0.055 +/- (0.002) | 0.468 +/- (0.032) | 0.842 +/- (0.019) | |
LR | os | 0.226 +/- (0.002) | 0.681 +/- (0.002) | 0.072 +/- (0.001) | 0.075 +/- (0.001) | 0.494 +/- (0.02) | 0.777 +/- (0.014) | |
LR | cb | 0.389 +/- (0.001) | 0.758 +/- (0.001) | 0.168 +/- (0.001) | 0.141 +/- (0.003) | 0.708 +/- (0.016) | 0.687 +/- (0.014) | |
LR | sb | 0.302 +/- (0.002) | 0.775 +/- (0.003) | 0.121 +/- (0.002) | 0.105 +/- (0.003) | 0.592 +/- (0.019) | 0.8 +/- (0.012) | |
LR | ns | 0.216 +/- (0.002) | 0.779 +/- (0.003) | 0.069 +/- (0.002) | 0.073 +/- (0.003) | 0.477 +/- (0.022) | 0.867 +/- (0.013) | |
LR | os | 0.287 +/- (0.003) | 0.774 +/- (0.003) | 0.105 +/- (0.002) | 0.1 +/- (0.002) | 0.549 +/- (0.012) | 0.83 +/- (0.007) | |
CH | cb | 0.59 +/- (0.027) | 0.918 +/- (0.002) | 0.6 +/- (0.008) | 0.283 +/- (0.046) | 0.824 +/- (0.041) | 0.845 +/- (0.045) | |
CH | sb | 0.604 +/- (0.045) | 0.943 +/- (0.006) | 0.634 +/- (0.019) | 0.297 +/- (0.069) | 0.832 +/- (0.022) | 0.923 +/- (0.023) | |
CH | ns | 0.467 +/- (0.044) | 0.943 +/- (0.003) | 0.359 +/- (0.024) | 0.178 +/- (0.043) | 0.828 +/- (0.073) | 0.922 +/- (0.029) | |
CH | os | 0.486 +/- (0.022) | 0.909 +/- (0.003) | 0.472 +/- (0.01) | 0.207 +/- (0.027) | 0.743 +/- (0.031) | 0.902 +/- (0.021) | |
CH | cb | 0.664 +/- (0.014) | 0.942 +/- (0.013) | 0.573 +/- (0.107) | 0.395 +/- (0.084) | 0.822 +/- (0.073) | 0.916 +/- (0.034) | |
CH | sb | 0.607 +/- (0.087) | 0.954 +/- (0.003) | 0.518 +/- (0.048) | 0.552 +/- (0.08) | 0.635 +/- (0.125) | 0.982 +/- (0.01) | |
CH | ns | 0.375 +/- (0.107) | 0.92 +/- (0.047) | 0.266 +/- (0.04) | 0.335 +/- (0.054) | 0.404 +/- (0.151) | 0.986 +/- (0.007) | |
CH | os | 0.5 +/- (0.039) | 0.925 +/- (0.006) | 0.42 +/- (0.05) | 0.295 +/- (0.114) | 0.683 +/- (0.151) | 0.937 +/- (0.048) | |
SV | cb | 0.616 +/- (0.009) | 0.92 +/- (0.007) | 0.599 +/- (0.011) | 0.402 +/- (0.036) | 0.715 +/- (0.037) | 0.923 +/- (0.015) | |
SV | sb | 0.633 +/- (0.022) | 0.947 +/- (0.006) | 0.613 +/- (0.022) | 0.455 +/- (0.044) | 0.706 +/- (0.044) | 0.968 +/- (0.008) | |
SV | ns | 0.398 +/- (0.085) | 0.933 +/- (0.006) | 0.322 +/- (0.021) | 0.345 +/- (0.09) | 0.45 +/- (0.155) | 0.98 +/- (0.014) | |
SV | os | 0.493 +/- (0.026) | 0.906 +/- (0.01) | 0.426 +/- (0.016) | 0.275 +/- (0.048) | 0.638 +/- (0.1) | 0.94 +/- (0.023) | |
SV | cb | 0.649 +/- (0.014) | 0.948 +/- (0.003) | 0.625 +/- (0.011) | 0.32 +/- (0.021) | 0.876 +/- (0.016) | 0.886 +/- (0.013) | |
SV | sb | 0.671 +/- (0.026) | 0.963 +/- (0.004) | 0.617 +/- (0.028) | 0.356 +/- (0.036) | 0.865 +/- (0.025) | 0.948 +/- (0.01) | |
SV | ns | 0.452 +/- (0.02) | 0.94 +/- (0.005) | 0.275 +/- (0.026) | 0.191 +/- (0.022) | 0.696 +/- (0.046) | 0.95 +/- (0.009) | |
SV | os | 0.518 +/- (0.033) | 0.941 +/- (0.006) | 0.48 +/- (0.026) | 0.241 +/- (0.041) | 0.747 +/- (0.074) | 0.928 +/- (0.031) | |
EV | cb | 0.618 +/- (0.009) | 0.924 +/- (0.003) | 0.609 +/- (0.007) | 0.401 +/- (0.044) | 0.72 +/- (0.048) | 0.922 +/- (0.02) | |
EV | sb | 0.647 +/- (0.026) | 0.947 +/- (0.005) | 0.65 +/- (0.012) | 0.394 +/- (0.072) | 0.783 +/- (0.039) | 0.953 +/- (0.015) | |
EV | ns | 0.438 +/- (0.038) | 0.936 +/- (0.007) | 0.298 +/- (0.058) | 0.275 +/- (0.091) | 0.565 +/- (0.144) | 0.967 +/- (0.018) | |
EV | os | 0.508 +/- (0.012) | 0.903 +/- (0.008) | 0.431 +/- (0.02) | 0.237 +/- (0.027) | 0.719 +/- (0.042) | 0.921 +/- (0.016) | |
EV | cb | 0.689 +/- (0.006) | 0.951 +/- (0.003) | 0.639 +/- (0.021) | 0.418 +/- (0.026) | 0.824 +/- (0.017) | 0.93 +/- (0.009) | |
EV | sb | 0.67 +/- (0.021) | 0.963 +/- (0.003) | 0.616 +/- (0.021) | 0.42 +/- (0.036) | 0.791 +/- (0.038) | 0.964 +/- (0.007) | |
EV | ns | 0.487 +/- (0.016) | 0.947 +/- (0.004) | 0.305 +/- (0.025) | 0.249 +/- (0.028) | 0.647 +/- (0.051) | 0.967 +/- (0.007) | |
EV | os | 0.553 +/- (0.014) | 0.944 +/- (0.003) | 0.5 +/- (0.011) | 0.308 +/- (0.035) | 0.697 +/- (0.04) | 0.954 +/- (0.01) |
sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 10 (buster)
Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.3.5.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] plotly_4.9.2.1 lubridate_1.7.9.2 rgdal_1.5-18 countrycode_1.2.0
[5] welchADF_0.3.2 rstatix_0.6.0 ggpubr_0.4.0 scales_1.1.1
[9] RColorBrewer_1.1-2 latex2exp_0.4.0 cubelyr_1.0.0 gridExtra_2.3
[13] ggtext_0.1.1 magrittr_2.0.1 tmap_3.2 sf_0.9-7
[17] raster_3.4-5 sp_1.4-4 forcats_0.5.0 stringr_1.4.0
[21] purrr_0.3.4 readr_1.4.0 tidyr_1.1.2 tibble_3.0.6
[25] tidyverse_1.3.0 huwiwidown_0.0.1 kableExtra_1.3.1 knitr_1.31
[29] rmarkdown_2.7.3 bookdown_0.21 ggplot2_3.3.3 dplyr_1.0.2
[33] devtools_2.3.2 usethis_2.0.0
loaded via a namespace (and not attached):
[1] readxl_1.3.1 backports_1.2.0 workflowr_1.6.2
[4] lwgeom_0.2-5 lazyeval_0.2.2 splines_3.6.3
[7] crosstalk_1.1.0.1 leaflet_2.0.3 digest_0.6.27
[10] htmltools_0.5.1.1 memoise_1.1.0 openxlsx_4.2.3
[13] remotes_2.2.0 modelr_0.1.8 prettyunits_1.1.1
[16] colorspace_2.0-0 rvest_0.3.6 haven_2.3.1
[19] xfun_0.21 leafem_0.1.3 callr_3.5.1
[22] crayon_1.4.0 jsonlite_1.7.2 lme4_1.1-26
[25] glue_1.4.2 stars_0.4-3 gtable_0.3.0
[28] webshot_0.5.2 car_3.0-10 pkgbuild_1.2.0
[31] abind_1.4-5 DBI_1.1.0 Rcpp_1.0.5
[34] viridisLite_0.3.0 gridtext_0.1.4 units_0.6-7
[37] foreign_0.8-71 htmlwidgets_1.5.3 httr_1.4.2
[40] ellipsis_0.3.1 farver_2.0.3 pkgconfig_2.0.3
[43] XML_3.99-0.3 dbplyr_2.0.0 labeling_0.4.2
[46] tidyselect_1.1.0 rlang_0.4.10 later_1.1.0.1
[49] tmaptools_3.1 munsell_0.5.0 cellranger_1.1.0
[52] tools_3.6.3 cli_2.3.0 generics_0.1.0
[55] broom_0.7.2 evaluate_0.14 yaml_2.2.1
[58] processx_3.4.5 leafsync_0.1.0 fs_1.5.0
[61] zip_2.1.1 nlme_3.1-150 xml2_1.3.2
[64] compiler_3.6.3 rstudioapi_0.13 curl_4.3
[67] png_0.1-7 e1071_1.7-4 testthat_3.0.1
[70] ggsignif_0.6.0 reprex_0.3.0 statmod_1.4.35
[73] stringi_1.5.3 highr_0.8 ps_1.5.0
[76] desc_1.2.0 lattice_0.20-41 Matrix_1.2-18
[79] markdown_1.1 nloptr_1.2.2.2 classInt_0.4-3
[82] vctrs_0.3.6 pillar_1.4.7 lifecycle_0.2.0
[85] data.table_1.13.2 httpuv_1.5.5 R6_2.5.0
[88] promises_1.1.1 KernSmooth_2.23-18 rio_0.5.16
[91] sessioninfo_1.1.1 codetools_0.2-16 dichromat_2.0-0
[94] boot_1.3-25 MASS_7.3-53 assertthat_0.2.1
[97] pkgload_1.1.0 rprojroot_2.0.2 withr_2.4.1
[100] mgcv_1.8-33 parallel_3.6.3 hms_1.0.0
[103] grid_3.6.3 minqa_1.2.4 class_7.3-17
[106] carData_3.0-4 git2r_0.27.1 base64enc_0.1-3