library(ggplot2)
<- function(family = "serif"){
ggplot_box_legend
# Create data to use in the boxplot legend:
set.seed(100)
<- data.frame(parameter = "test",
sample_df values = sample(500))
# Extend the top whisker a bit:
$values[1:100] <- 701:800
sample_df# Make sure there's only 1 lower outlier:
$values[1] <- -350
sample_df
# Function to calculate important values:
<- function(x){
ggplot2_boxplot
<- as.numeric(quantile(x,
quartiles probs = c(0.25, 0.5, 0.75)))
names(quartiles) <- c("25th percentile",
"50th percentile\n(median)",
"75th percentile")
<- diff(quartiles[c(1,3)])
IQR
<- max(x[x < (quartiles[3] + 1.5 * IQR)])
upper_whisker <- min(x[x > (quartiles[1] - 1.5 * IQR)])
lower_whisker
<- x[x > (quartiles[3] + 1.5*IQR)]
upper_dots <- x[x < (quartiles[1] - 1.5*IQR)]
lower_dots
return(list("quartiles" = quartiles,
"25th percentile" = as.numeric(quartiles[1]),
"50th percentile\n(median)" = as.numeric(quartiles[2]),
"75th percentile" = as.numeric(quartiles[3]),
"IQR" = IQR,
"upper_whisker" = upper_whisker,
"lower_whisker" = lower_whisker,
"upper_dots" = upper_dots,
"lower_dots" = lower_dots))
}
# Get those values:
<- ggplot2_boxplot(sample_df$values)
ggplot_output
# Lots of text in the legend, make it smaller and consistent font:
update_geom_defaults("text",
list(size = 3,
hjust = 0,
family = family))
# Labels don't inherit text:
update_geom_defaults("label",
list(size = 3,
hjust = 0,
family = family))
# Create the legend:
# The main elements of the plot (the boxplot, error bars, and count)
# are the easy part.
# The text describing each of those takes a lot of fiddling to
# get the location and style just right:
<- ggplot() +
explain_plot stat_boxplot(data = sample_df,
aes(x = parameter, y=values),
geom ='errorbar', width = 0.3) +
geom_boxplot(data = sample_df,
aes(x = parameter, y=values),
width = 0.3, fill = "lightgrey") +
geom_text(aes(x = 1, y = 950, label = "500"), hjust = 0.5) +
geom_text(aes(x = 1.17, y = 950,
label = "Número de valores"),
fontface = "bold", vjust = 0.4) +
theme_minimal(base_size = 5, base_family = family) +
geom_segment(aes(x = 2.3, xend = 2.3,
y = ggplot_output[["25th percentile"]],
yend = ggplot_output[["75th percentile"]])) +
geom_segment(aes(x = 1.2, xend = 2.3,
y = ggplot_output[["25th percentile"]],
yend = ggplot_output[["25th percentile"]])) +
geom_segment(aes(x = 1.2, xend = 2.3,
y = ggplot_output[["75th percentile"]],
yend = ggplot_output[["75th percentile"]])) +
geom_text(aes(x = 2.4, y = ggplot_output[["50th percentile\n(median)"]]),
label = "rango\nintercuartílico", fontface = "bold",
vjust = 0.4) +
geom_text(aes(x = c(1.17,1.17),
y = c(ggplot_output[["upper_whisker"]],
"lower_whisker"]]),
ggplot_output[[label = c("Mayor valor dentro de 1.5 veces\nel rango intercuartílico por encima\npercentile 75",
"Menor valor dentro de 1.5 veces\nel rango intercuartílico por debajo\npercentil 25")),
fontface = "bold", vjust = 0.9) +
geom_text(aes(x = c(1.17),
y = ggplot_output[["lower_dots"]],
label = "valor Outside"),
vjust = 0.5, fontface = "bold") +
geom_text(aes(x = c(1.9),
y = ggplot_output[["lower_dots"]],
label = "|Valor| es >1.5 veces y"),
vjust = 0.5) +
geom_text(aes(x = 1.17,
y = ggplot_output[["lower_dots"]],
label = "<3 veces el rango intercuartílico\nmás allá de cada extremo de la caja"),
vjust = 1.5) +
geom_label(aes(x = 1.17, y = ggplot_output[["quartiles"]],
#label = names(ggplot_output[["quartiles"]])
label = c("percentil 25","percentil 50\n(mediana)","percentil 55")
),vjust = c(0.4,0.85,0.4),
fill = "white", label.size = 0) +
ylab("") + xlab("") +
theme(axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
aspect.ratio = 4/3,
plot.title = element_text(hjust = 0.5, size = 10)) +
coord_cartesian(xlim = c(1.4,3.1), ylim = c(-600, 900)) +
labs(title = "EXPLICACIÓN")
return(explain_plot)
}
ggplot_box_legend()
Docencia
Recursos comunes
Sobre AMPL
Teoría de la Decisión (G. Estadística)
- Artículo sobre métodos Promethee. Hay un TFGM que lo usó como material base.
Demografía (G. Estadística)
Estadística Computacional (G. Estadística y DGME)
Uso de Git, Github y RStudio:
Tutorial con 2 vídeos sobre el uso de Git, Github desde RStudio con ejemplos didácticos (youtube):
Ver más en la sección más abajo llamada: “RStudio con Git y Github”.
Tutorial: uso de ggplot2 avanzado (pdf), Tutorial: uso de ggplot2 avanzado (html)
Tutorial: uso detallado de dplyr versión 1 (pdf), Tutorial: uso detallado de dplyr versión 1 (html, xaringan)
Tutorial: uso purrr, broom y tidyr (pdf), Tutorial: uso purrr, broom y tidyr (html)
Uso de python en RStudio:
Programación Matemática (G. Matemáticas)
Estadística (G. Ing. Salud)
Enlaces material de Probabilidad
- Seeing theory. A visual introduction to probability and statistics: aplicaciones web interactivas que muestran didácticamente conceptos de Probabilidad y Estadística.
Optimización de Sistemas (G. Ing. Software)
Material sobre R
Libros bookdown
Mis snippets de código: contiene consejos útiles para crear libros bookdown.
En inglés
Yihui Xie: “bookdown: Authoring Books and Technical Documents with R Markdown”
Robin Lovelace and Morgane Dumont: “Spatial Microsimulation with R”
Robin Lovelace, Jakub Nowosad, Jannes Muenchow: “Geocomputation with R”
Jenny Bryan: “STAT 545, Data wrangling, exploration, and analysis with R”
Rafael A. Irizarry: “Introduction to Data Science. Data Analysis and Prediction Algorithms with R”
W. N. Venables, D. M. Smith, R Core Team (2017-10-18): “An Introduction to R”. Libro sobre cuestiones básicas de R, aunque también tienen capítulos sobre Estadística.
Sobre Shiny:
En español
Garrett Grolemund & Hadley Wickham: “R para Ciencia de Datos”
Fernández-Casal, R. y Cotos-Yáñez, T.R.: “Escritura de libros con bookdown”: contiene mucho material para escribir libros bookdown.
Rubén Fernández Casal, Ricardo Cao: “Simulación Estadística”
François Rebaudo: “Aprender R: iniciación y perfeccionamiento”
Gil Bellosta: “R para profesionales de los datos: una introducción”
Andina: “Introducción a estadística con R”: contiene material sobre Geoespacial, Comunicación-Informes, Modelos Lineales, etc.
Libros web no bookdown
- Data Analysis and Visualization in R for Ecologists: tiene apartados como: “SQL databases and R”, “Data visualization with ggplot2”, “Manipulating data”, …
Cursos web sobre R
- Programming with R: Creating Functions,…. Material con ejercicios resueltos.
Datos en R
Sobre ggplot2
STHDA: Statistical tools for high-throughput data analysis: contiene muchos tutoriales-ejemplos de uso de ggplot2. Pero además contiene mucho material sobre: R, RStudio, Análisis, etc.
Sobre Shiny
Aplicaciones Shiny con flexdashboard:
Sobre tablas en R Markdown
Librería: flextable
Sobre exams
Sobre programación con R
- Paquete R: asserthat (Github): contiene funciones para chequear en funciones valores-parámetros que mejoran el uso de
stopifnot(is.character(x))
:assert_that(is.character(x))
,validate_that()
,… .
Recursos en Youtube
Sobre la nube
- #3 - Cómo empezar con AWS? - Virtualización, contenedores, serverless (Podcast AWS en Español). En los comentarios aparecen cursos gratuitos sobre AWS (dockers,…).
Material en Servidores
En RStudio Cloud
RStudio Cloud: https://rstudio.cloud
- “Sign Up”: para registrarse
- “Log In”: para entrar en nuestro espacio de trabajo en RStudio Cloud.
Mis aplicaciones shiny
semiestio5
Otros ficheros
Recursos didácticos sobre diferentes temas
Machine Learning en Data Science
Sobre el uso de Github
RStudio con Git y Github
Ver más recursos en el material de la asignatura “Estadística Computacional I” (más arriba).
Material en github de un curso sobre Reproductibilidad con R: en mi repositorio: Tools4RR. Ver: 05_Git_Lab y 04_Git.
Cómo hacer “merge” entre dos ramas (master y Desarrollo) desde RStudio-terminal: url
Cómo hacer “merge” entre dos ramas (master y Desarrollo) desde Github con Pull Request (explicado con RStudio): url. Está casi al final del artículo.
Acciones Github
Gráficos curiosos
Esquema de la construcción de un diagrama de caja y bigotes
De: https://waterdata.usgs.gov/blog/boxplots/