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 hombre solo nombre tecnico durante los dos últimos años. Los datos se pueden descargar gratuitamente desde conocer gente happn.
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 imagenes de mujeres solteras chistosas 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:
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:
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.
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!