Material Adicional

R
docencia
Autor

Pedro L. Luque

Fecha de Publicación

6 febrero 2020

Docencia

Recursos comunes

Sobre AMPL

Teoría de la Decisión (G. Estadística)

Demografía (G. Estadística)

Estadística Computacional (G. Estadística y DGME)

Programación Matemática (G. Matemáticas)

Estadística (G. Ing. Salud)

Enlaces material de Probabilidad

Optimización de Sistemas (G. Ing. Software)

Material sobre R

Libros bookdown

En inglés

En español

Libros web no bookdown

Cursos web sobre R

Datos en R

Sobre ggplot2

Sobre Shiny

Sobre tablas en R Markdown

Librería: flextable

Sobre exams

“Grup d’innovació Statmedia”: Statmedia 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

Material en Servidores

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/

library(ggplot2)
ggplot_box_legend <- function(family = "serif"){

  # Create data to use in the boxplot legend:
  set.seed(100)

  sample_df <- data.frame(parameter = "test",
                        values = sample(500))

  # Extend the top whisker a bit:
  sample_df$values[1:100] <- 701:800
  # Make sure there's only 1 lower outlier:
  sample_df$values[1] <- -350

  # Function to calculate important values:
  ggplot2_boxplot <- function(x){

    quartiles <- as.numeric(quantile(x,
                                     probs = c(0.25, 0.5, 0.75)))

    names(quartiles) <- c("25th percentile",
                          "50th percentile\n(median)",
                          "75th percentile")

    IQR <- diff(quartiles[c(1,3)])

    upper_whisker <- max(x[x < (quartiles[3] + 1.5 * IQR)])
    lower_whisker <- min(x[x > (quartiles[1] - 1.5 * IQR)])

    upper_dots <- x[x > (quartiles[3] + 1.5*IQR)]
    lower_dots <- x[x < (quartiles[1] - 1.5*IQR)]

    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:
  ggplot_output <- ggplot2_boxplot(sample_df$values)

  # 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:
  explain_plot <- ggplot() +
    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"]],
                        ggplot_output[["lower_whisker"]]),
                  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()