Representación de la media, mediana y cuantiles en un histograma con ggplot2 en R

En ciencia de datos, es muy común la representación de variables en forma de histograma, de forma que podemos obtener fácilmente una primera impresión de la distribución de dicha variable.

Podemos “tunear” nuestro histograma, obteniendo información también muy relevante, si añadimos estadísticos como lo pueden ser la media, mediana o los cuantiles 0,25 y 0,75. Estos valores son relativamente fáciles de añadir realizando la representación gráfica con ggplot2. Así que vamos con un ejemplo.

1. Datos de inicio

En esta ocasión vamos a partir de un dataset con los valores diarios de las acciones de IBM en la bolsa de Nueva York durante los dos últimos años. Los datos se pueden descargar gratuitamente desde Yahoo Finanzas.

Guardamos los datos en un fichero llamado IBM.csv que tiene el siguiente formato:

Los datos muestran 503 registros para los dos años analizados y 7 variables. Para el ejemplo, vamos a visualizar el histograma y los estadísticos de la variable HIGH, es decir, del precio máximo diario alcanzado.

2. Carga de librerías y datos

Tan solo es necesario cargar la librería ggplot2 y el archivo IBM.csv con nuestros datos:

# Carga de librerías
library(ggplot2)

# Carga de datos
IBM <- read.csv("IBM.csv")

3. Representación gráfica del histograma

Aplicamos ggplot2 a la variable High del dataset llamado IBM. Con geom_histogram() creamos el histograma:

# Representación gráfica
p1 <- ggplot(aes(x = High), data = IBM) +
 geom_histogram(color = 'green',
                fill = 'green',
                alpha = 0.2) +
 labs(title = "Precio máximo (HIGH) de NYSE: IBM dos últimos años")

El resultado es el siguiente:

Histograma del precio máximo diario.

4. Adicción de estadísticos

Procedemos a añadir al histograma los valores de la media, mediana y los cuantiles 0,25 y 0,75 con el comando geom_vline(). Por último, con scale_color_manual() creamos una leyenda en la gráfica:

p2 <- p1 + geom_vline(aes(xintercept = median(IBM$High),
                  color = "mediana"),
              linetype = "dashed",
              size = 1) +
   geom_vline(aes(xintercept = mean(IBM$High),
                  color = "media"),
              linetype = "dashed",
              size = 1) +
   geom_vline(
     aes(xintercept = quantile(IBM$High, 0.25),
         color = "cuantil_25"),
     linetype = "dashed",
     size = 1
   ) +
   geom_vline(
     aes(xintercept = quantile(IBM$High, 0.75),
         color = "cuantil_75"),
     linetype = "dashed",
     size = 1
   ) +
   scale_color_manual(
     name = "statistics",
     values = c(
       mediana = "blue",
       media = "red",
       cuantil_25 = "black",
       cuantil_75 = "orange"
     )
   ) +
   xlab("Longitud") + ylab("n")

El resultado es el siguiente:

Histograma completado con estadísticos.

La gráfica muestra una -a priori- distribución normal, algo sesgada y con una ligera asimetría negativa (media < mediana). Las líneas de media y mediana se muestran muy próximas y casi en el centro de las dos líneas de los cuantiles, lo cual muestra que los datos tienen una dispersión muy uniforme con respecto a la mediana.

Para saber más:
Plot quantiles of distribution in ggplot2 with facets
ggplot2 histogram plot : Quick start guide – R software and data visualization
How to Make a Histogram with ggplot2

Una respuesta a “Representación de la media, mediana y cuantiles en un histograma con ggplot2 en R”

  1. Hola:

    Como agregar solo la media a un histograma pero que valla por grupos?
    Por ejemplo, en este grafico:

    ggplot(iris, aes(Sepal.Length, fill = Species)) +
    facet_wrap(~Species, scales = ‘free_x’)+
    geom_histogram(binwidth = function(x) 2 * IQR(x) / (length(x)^(1/3)))+
    scale_fill_viridis_d(option = ‘C’, end = 0.4)

    Agregar la media para “setosa”, “versicolor” y “virginica”, caa una en su grupo.

    Gracias!

Responder a Hector Alvaro Rojas Cancelar la respuesta