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.
Quiero leer...
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.
[sourcecode lang=»r»] 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"))
[/sourcecode]
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:
[sourcecode lang=»r»]#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)
[/sourcecode]
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):