Histograma y curva de densidad en una única figura en R

R tiene la potencialidad de que se puede modificar todo y adaptarlo a nuestras necesidades, cualesquieras que sean. Pues bien, realizar de forma separada histogramas y curvas de densidad para un conjunto de datos concreto es muy sencillo. A través de R Commander se puede hacer prácticamente con dos clicks. Pero… ¿y si queremos representar gráficamente un histograma y curva de densidad en R, apareciendo ambos en una única figura? Pues es posible, y en esta entrada os diré cómo hacerlo de un modo rápido y comprensible. De este modo, podréis juntar dos figuras en solo una, optimizando el espacio de vuestros trabajos sin perder información.

Cómo hacer un histograma y curva de densidad en solo un gráfico en R

R es poderosísimo, sin duda. Te permite personalizar hasta el último detalle. Pero antes de hacer un histograma y curva de densidad en R, vamos a hacer ambas figuras por separado, para luego finalmente unirlas en la figura final. ¿Y qué necesitamos para hacer las figuras? Datos, datos y más datos.

Generamos un conjunto de datos en R Commander

En R Commander generamos un conjunto de datos en R que sigan una distribución normal, con media = 50 y desviación estándar = 10. Vamos a llamar a este conjunto de datos den.his. Para ello, vamos a la siguiente ruta:

Distributions > Continuous distributions > Normal distribution > Sample from normal distribution…

Tened en cuenta que si obtenéis los datos siguiendo este procedimiento, las figuras que obtendréis a partir de ahora de histogramas y curvas de densidad serán ligeramente diferentes, ya que los datos con los que partiréis serán algo distintos. Vamos a meternos en faena.

Creando histogramas en R para nuestros datos

En R Commander hacer histogramas es realmente sencillo. Vamos a la siguiente ruta, donde aparecerá una pestaña con Opciones, pudiendo seleccionar cómo se hace el tipo de histograma (frequency counts, percentages y densities):

Graphs > Histogram…

De forma predeterminada, los histogramas en R Commander se hacen con color gris siguiendo el método de intervalos Sturges. Pero esto, obviamente, puede modificarse y adaptarse. A continuación os dejo los códigos con histogramas modificados, con intervalos siguiendo el método Freedman-Diaconis (FD) y con valores personalizados, y cambiando el color de las barras.

with(den.his, Hist(obs, scale="frequency", breaks="Sturges", col="darkgray"))
with(den.his, Hist(obs, scale="percent", breaks="Sturges", col="darkgray"))
with(den.his, Hist(obs, scale="density", breaks="Sturges", col="darkgray"))

with(den.his, Hist(obs, scale="frequency", breaks="FD", col="red"))
with(den.his, Hist(obs, scale="percent", breaks="FD", col="blue"))
with(den.his, Hist(obs, scale="density", breaks="FD", col="green"))

with(den.his, Hist(obs, scale="frequency", breaks=25, col="orange"))
with(den.his, Hist(obs, scale="percent", breaks=50, col="orange"))
with(den.his, Hist(obs, scale="density", breaks=100, col="orange"))

Dibujar la curva de densidad de un conjunto de datos

Ahora bien, si queremos representar gráficamente la curva de densidad de nuestros datos, tenemos que seguir la siguiente ruta:

Graph > Density estimate…

Combinando un histograma y curva de densidad en una sola figura

Ahora vamos a entrar en el meollo de la cuestión. Hemos aprendido a visualizar los datos de dos modos distintos, haciendo un histograma y curva de densidad. Pero ahora vamos a mezclarlos, a combinarlos en una sola figura para maximizar la información que se puede extraer. Para que sea satisfactoria la figura, tenemos que ejecutar dos comandos: primero el histograma y luego la densidad.

A continuación os dejo los códigos de tres ejemplos con su código correspondiente:


#Ejemplo 1
with(den.his, Hist(obs, scale="density", xlim=c(0,100), ylim=c(0,0.04), breaks="Sturges", col="lightblue"))
lines(density(den.his$obs), col="blue", lty=2, lwd=3)


#Ejemplo 2
with(den.his, Hist(obs, scale="density", xlim=c(0,100), ylim=c(0,0.05), breaks="FD", col="pink"))
lines(density(den.his$obs), col="purple", lty=3, lwd=4)

#Ejemplo 3
with(den.his, Hist(obs, scale="density", xlim=c(0,100), ylim=c(0,0.06), breaks=30, col="lightgreen"))
lines(density(den.his$obs), col="darkgreen", lty=6, lwd=10)

Como podéis observar, la primera línea de cada ejemplo es el histograma y la segunda es el dibujo de la curva de densidad sobre el histograma. Fijaros que hemos introducidos atributos nuevos (xlim y ylim se refieren a los intervalos del eje x e y respectivamente; lty y lwd se refieren al tipo de línea y grosor respectivamente de la curva de densidad). Es muy importante que en este caso siempre utilicés el histograma de densidad, y no el de porcentajes o el de frecuencias. El resultado sería el siguiente después de ejecutar los códigos anteriores (de izquierda a derecha, Ejemplo 1, Ejemplo 2 y Ejemplo 3):

Histograma y curva de densidad en una única figura en R

Deja un comentario