The goal of riskviewer is to provide a modern implementation of the “Risk Characterisation Theatre” originally proposed by Erik Rifkin and Edward Bouwer in their 2007 book “The illusion of certainty: Health Benefits and Risks”.
- uncertainty, embedded
- instinctive understanding of risk assessment figures based on real-world-scenarios
More context in the package vignette.
The package has been created as a quick experimentation of how it would be possible to implement the risk characterisation theatre. At this stage, the codebase is still messy and poorly documented. Customisation of parameters is largely untested, so anything differing significantly from the examples documented in the README and vignette will likley not work. The package will however be improved in the coming weeks and months.
You can install riskviewer
from
GitHub with:
# install.packages("remotes")
remotes::install_github("EDJNet/riskviewer)
At this stage, this package provides two formats for representing risk.
library("riskviewer")
library("patchwork")
plane_1 <- rv_create_airplane(risk_ratio = 0.1,
rows = 33,
title = "Scenario A",
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono")
plane_2 <- rv_create_airplane(risk_ratio = 0.3,
rows = 33,
title = "Scenario B",
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono")
plane_1 + plane_2
If more than one airplane is needed:
rv_create_airplane_combo(risk_ratio = 0.01,
number_of_planes = 3,
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono", guides = NULL)
rv_create_airplane_combo(risk_ratio = 0.001,
number_of_planes = 5,
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono",
legend_position = "none",
ncol = 3,
nrow = 2, guides = NULL)
Or, using more than one risk consideration:
risk_ratio <- tibble::tribble(~Risk, ~Ratio,
"Hospitalization", 0.3,
"Death", 0.1)
combo_gg <- rv_create_airplane_combo(risk_ratio = risk_ratio,
number_of_planes = 2,
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono",
legend_position = "bottom",
guides = "collect")
combo_gg +
patchwork::plot_annotation(title = "Risk caused by x for people aged xx",caption = 'Made with `riskviewer`, a tool by EDJNet',
theme = ggplot2::theme(plot.title = ggplot2::element_text(size = 24, family = "Roboto Condensed", hjust = 0.5)))
combo_gg <- rv_create_airplane_combo(risk_ratio = risk_ratio,
number_of_planes = 2,
font_family = "Roboto Condensed",
font_family_seats = "Roboto Mono",
legend_position = "bottom",
guides = "collect",
compact = TRUE)
combo_gg
The compact format makes it easier to have many planes:
rv_create_airplane_combo(risk_ratio = 0.002,
number_of_planes = 10,
compact = TRUE,
font_family = "Roboto Condensed",
legend_position = "none",
ncol = 5,
nrow = 2,
guides = NULL) +
patchwork::plot_annotation(title = "This risk hits about 2 people out of one thousand",caption = 'Made with `riskviewer`, a tool by EDJNet',
theme = ggplot2::theme(plot.title = ggplot2::element_text(size = 16, family = "Roboto Condensed", hjust = 0.5)))
(currently broken)
gg_airplane_animated <- tibble::tribble(~Risk, ~Ratio,
"Age 20", 0.009,
"Age 30", 0.027,
"Age 40", 0.048,
"Age 50", 0.085,
"Age 60", 0.155,
"Age 70", 0.244,
"Age 80", 0.317) %>%
rv_create_airplane_animation(title = "Risk 1")
gganimate::animate(plot = gg_airplane_animated,
#renderer = gganimate::ffmpeg_renderer(),
height = 8,
width = 2,
units = "in",
res = 150)
It is possible to create a ggplot object that looks like the seatmap of an arena, but this implies using two different projections, combining the graph, and leaving the top half empty.
library("riskviewer")
rv_create_arena(ratio = 0.05,
title = "The risk you face",
ggplot = FALSE,
quality = "low")
library("riskviewer")
rv_create_arena(ratio = 0.3, ggplot = TRUE)
graphs <- list(rv_create_arena(ratio = 0.1, title = "Scenario A", ggplot = TRUE),
rv_create_arena(ratio = 0.8, title = "Scenario B", ggplot = TRUE))
rv_img(plot = graphs, stack = TRUE)
rv_img(plot = graphs, stack = FALSE)
ggplot2::ggsave(filename = "risk_arena.svg",
plot = rv_create_arena(ratio = 0.1, ggplot = TRUE),
width = 10,
height = 10,
units = "in")