Material Adicional

Docencia

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

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

Libros web no bookdown

Cursos web sobre R

Sobre ggplot2

Sobre Shiny

Sobre tablas en R Markdown

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

Recursos didácticos sobre diferentes temas

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.

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()