2015-03-11

Múltiples diagramas de caja en R

Title En entradas anteriores vimos una introducción a los diagramas de caja y cómo representar el intervalo de confianza para la mediana. En esta entrada representaremos varios diagramas de caja simultáneamente. Pues son especialmente útiles para comparar variables que se encuentran en el mismo rango.

Dos ejemplos

# Horizontal
require(MASS)
boxplot(sugars ~ mfr, data = UScereal, 
        names =  c('Mills', 'Kelloggs', 'Nabisco', 'Post',
                   'Quaker Oats', 'Purina'),
        main =  'Contenido de azúcar por marca',
        col = c("beige", "blanchedalmond", "bisque1",
                   "bisque2", "bisque3", "bisque4"),
        xlab = 'Azúcar (gramos por porción)',
        horizontal = TRUE)
# Vertical
boxplot(Ozone ~ Month, 
        data = airquality,
        main = 'Calidad del aire',
        xlab = 'mes',
        ylab = 'ozone (ppb)',
        col = 'skyblue')

Problema

Para que el gráfico sea útil es necesario que las variables se encuentren en un rango parecido y empleen la misma unidad de medida. Tomamos un ejemplo del data frame UScereal del paquete MASS, con información nutricional de cereales.

# Rango diferente
require(MASS)
boxplot(UScereal)
Como se observa, cada variable se encuentra en un rango muy diferente, pues utilizan diferentes unidades de medida y los diagramas de caja no proporcionan poca información práctica.

head(UScereal)
   mfr calories   protein      fat   sodium     fibre    carbo    sugars
1    N 212.1212 12.121212 3.030303 393.9394 30.303030 15.15152 18.181818
2    K 212.1212 12.121212 3.030303 787.8788 27.272727 21.21212 15.151515
3    K 100.0000  8.000000 0.000000 280.0000 28.000000 16.00000  0.000000
4    G 146.6667  2.666667 2.666667 240.0000  2.000000 14.00000 13.333333
5    K 110.0000  2.000000 0.000000 125.0000  1.000000 11.00000 14.000000
6    G 173.3333  4.000000 2.666667 280.0000  2.666667 24.00000 10.666667
7    R 134.3284  2.985075 1.492537 298.5075  5.970149 22.38806  8.955224
8    P 134.3284  4.477612 0.000000 313.4328  7.462687 19.40299  7.462687
9    Q 160.0000  1.333333 2.666667 293.3333  0.000000 16.00000 16.000000
10   G  88.0000  4.800000 1.600000 232.0000  1.600000 13.60000  0.800000
.. ...      ...       ...      ...      ...       ...      ...       ...
Variables not shown: shelf (int), potassium (dbl), vitamins (fctr)

Solución

Seleccionamos cuatro variables que con la misma unidad de medida —gramos por porción— y en un rango similar: proteínas, grasas, fibra y azúcares.

boxplot(UScereal[, c('protein', 'fat', 'fibre', 'sugars')], 
        names= c('protein', 'fat', 'fibre',  'sugars'))
Si deseamos alterar las unidades de separación del eje y, empleamos la función axis. En este caso lo fijamos en 2.

Entradas relacionadas

Referencias

Nube de datos