fbpx

En esta entrada, veremos cómo hacer histogramas en R. Al final, habrás visto:

Esta entrada, viene acompañada con código en R para practicar. Haz click aquí para verlo. Así, puedes copiar el código de la página y pegarlo en tu sesión de RStudio para practicar histogramas en R

¿Qué son los histogramas en R?

Es una gráfica de barras con la distribución de la frecuencia

Vamos a separar cada una de estas palabras para entender mejor a lo que me refiero

Las gráficas de barras son estas 📊 (sí, las del emoji). Para los histogramas, en el eje x ponemos la variable continua que estamos estudiando. Esta variable la dividimos en espacios para contar cuantos datos caen en cada uno. Estos espacios se llaman bins o intervalos de clase

bins de un histograma en r

En el eje y de los histogramas va el conteo de datos por bin. Hacer estos conteos nos da una distribución de la frecuencia y sirve para tener una idea de donde está la mayoría de los datos.

histograma como grafica de barras

Algunas posibles distribuciones que podemos encontrar son centradas, que tengan crecimientos o caídas, bimodales, o uniformes

distribucion centrada
distribucion con crecimientos o caidas
distribucion bimodal
distribucion uniforme

Además, en algunos casos, los histogramas ayudan a detectar outliers o datos atípicos.

datos atipicos con un histograma

En estadística, la frecuencia es la cantidad de veces que se repite una cosa y la distribución es cómo se reparten esas cosas en la variable. Quizás te suene familiar la tabla de frecuencias, en donde se hacían estos conteos en tablas.

Un histograma es una visualización de esa tabla, es decir, una gráfica de barras con la distribución de la frecuencia.

¿Cómo hacer un histograma en R?

Ahora para hacer un histograma en R vamos a utilizar el sistema de graficación que trae R por defecto (R BASE) y el paquete ggplot2

Te recomiendo usar R Base cuando necesites explorar datos con histogramas porque es más rápido de escribir el código. Y luego los histogramas que quieras presentar a un público o en tu trabajo de tesis lo puedes hacer con ggplot2.

Si no sabes cómo instalar ggplot2 puedes ver esta entrada en donde vemos como instalar paquetes en R

Datos de la practica

Para la práctica vamos a utilizar datos que ya vienen precargados en R. Los datos se llaman mtcars, son datos con información de coches o carros

Cosas como los caballos de fuerza, tipo de motor, cilindros, y esas cosas… Para cargar estos datos en R, tenemos que llamar a la función data(«mtcars»). Esto crea un dataframe con los datos que podemos mirar en el entorno de variable o en la consola.

# cargando los datos
data("mtcars")

Haciendo histogramas en R con R Base

Para hacer un histograma utilizando R Base utilizamos la función hist()

A esta función le pasamos como argumento la variable que tiene los datos. Si está en un vector, pasamos el vector. Si es un dataframe, tenemos que pasar el nombre del dataframe con el símbolo de dolar y la variable del histograma.

En R, vamos a utilizar los datos que hemos cargado y veamos la variable hp que serían los caballos de fuerza

# editando histograma
hist(mtcars$hp,
     breaks = 10,
     # breaks = seq(-50, -350, -50),
     col = "darkgray",
     border = "gray10",
     main = "Titulo del histograma",
     xlab = 'variable x',
     ylab = 'conteo')
histograma en r

Podemos cambiar los bins con el número de espacios y R hace la separación. Esto es muy útil y si aumentamos los bins damos más detalles al histograma, solo que no hay que pasarse porque después el histograma no es informativo.

También podemos utilizar la opción breaks o puntos de corte para decir con un vector numérico donde queremos hacer las separaciones.

Para cambiar los breaks se puede usar la función seq(), que crea números seguidos empezando con el primero, terminando con el segundo y avanzando según el tercero

Por otro lado, tenemos más opciones de edición para cambiar cosas como el color, el relleno, el título y el nombre que va en los ejes.

Curve normal sobre histogramas en r base

Para agregar una curva normal a un histograma podemos utilizar el código

hist(mtcars$hp, freq=FALSE)
curve(dnorm(x, 
            mean=mean(mtcars$hp), 
            sd=sd(mtcars$hp)), 
      add=TRUE, col="red") 
histograma en r con curva normal

Haciendo histogramas en R con ggplot2

Lo mismo podemos hacerlo utilizando el paquete ggplot2. En mi opinión las gráficas se ven un poco más profesionales, aunque la información es exactamente la misma. La forma en cómo escribimos el código sí que cambia un poco…

# cargar ggplot2
# install.packages("ggplot2")
library(ggplot2)

# hacer un histograma en ggplot2
ggplot(data = mtcars,
       mapping = aes(x = hp)) +
  geom_histogram(bins = 9)
histograma en r con ggplot2

Si la usamos tal cual nos va a mostrar un mensaje que está usando 30 bins. Eso podemos cambiarlo si pasamos como argumento la opción bins en geom_histogram(), o también podríamos usar breaks. vamos a hacer varias prueba, yo voy a escoger 9 porque nos va a ayudar en la próxima sección

Histogramas en R separado por colores

Ahora vamos a hacer está grafica [mostrar imagen]. Aquí hay dos histogramas de la variable x pero que están separados por otra variable.

La otra variable es el tipo de motor, 1 si el motor es v-shaped (sea lo que sea que signifique eso) o 0 si es manual.

Entonces lo que estamos haciendo explorar los caballos de fuerza considerando el tipo de motos, otro con manual y los juntamos… Esto resulta bastante útil!

# haciendo más cosas interesantes
ggplot(data = mtcars,
       mapping = aes(x = hp,
                     fill = factor(vs))) +
  geom_histogram(bins = 9,
                 position = 'identity',
                 alpha = 0.8) +
  labs(title = 'Titulo',
       fill = 'vs motor',
       x = 'caballos de fuerza',
       y = 'conteos',
       subtitle = 'agregar información extra',
       caption = 'esta información es de tal fuente')
histograma en r con ggplot2 separado por colores

En este caso utilizamos factores porque vs es por defecto una variable numérica. Además, podemos cambiar otras opciones para que el histograma se vea diferente y agregar títulos, subtítulos y esas cosas…

Curva normal sobre histogramas en R con ggplot2

# curve normal histograma ggplot2
ggplot(data = mtcars,
       mapping = aes(x = hp)) + 
  geom_histogram(aes(y =..density..),
                 bins = 9,
                 position = 'identity') +
  stat_function(fun = dnorm, 
                args = list(mean = mean(mtcars$hp), 
                            sd = sd(mtcars$hp)))
histograma en r con ggplot2 y curva normal

Chévere! Espero que ahora puedas hacer más histogramas y los incorpores a tus análisis de datos!

Comparte esta entrada con todos tus compañeros que aún no saben que un histograma es una gráfica de barras

Te mando un saludo donde quiera que estés