miércoles, 18 de septiembre de 2013

Graficos de caja y bigote en R

Análisis básicos usando R. Gráficos de caja y bigote

Análisis básicos usando R. Gráficos de caja y bigote

Los gráficos de caja y bigote son bastante útiles para visualizar distribuciones. Nos ofrecen información sobre los cuartiles de la distribución, valores atípicos y valores extremos. En nuestro contexto se emplean bastante poco, sin embargo, en la planificación resultan particularmente útiles para observar cómo se distribuye, por ejemplo, el salario, en una población dada. En este post trataremos de mostrar la utilidad de este gráfico en la elaboración de diagnósticos.

En R existen diferentes paquetes que nos permiten hacer gráficos de caja y bigotes. Empecemos con el paquete básico.

boxplot(d1$calorias)
grid()

plot of chunk bpbasicos

Un gráfico de caja y bigote nos ofrece la siguiente informacion:

Adquisición de la data en hojas tipo Excel en zonas en las que la coma se emplea como separador decimal (y por tanto los valores de la tabla se separan con punto y coma) plot of chunk bpejemploirec

Al observar un gráfico de caja y bigote debemos tener en cuenta los valores marcados. La caja contiene el 75% de los datos. La caja nos ofrece, por tanto información sobre la simetria de la data. En el gráfico anterior, notamos que la distribución tiende a ser normal, no obstante, hay una mayor dispersión hacia los valores altos, después de la mediana, en tanto que hay mayor concentración entre el primer cuartil y la mediana. Ello nos indica que predominan valores bajos. La media es halada hacia la derecha de la mediana producto de algunos valores altos. Por tanto tenemos una asimetría positiva. Esta información podemos corroborarla usando la función summary():

summary(d1$calorias)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2120    2180    2270    2280    2360    2470

Examinemos ahora el caso del consumo de proteinas:

boxplot(d1$proteinas)
grid()

plot of chunk bpexploraDos

El gráfico de caja y bigotes sobre el consumo de proteinas en Venezuela nos indica que el consumo ha sido muy variado en los primeros años, pero que estuvo permanentemente por debajo de la mediana; en tanto que hacia los últimos años de el consumo se concentró hacia los valores altos. Es decir, predominó un alto consumo de proteinas, con respecto a los valores de la data. Esta vez tenemos una distribución negativamente sesgada, la media es halada a la izquierda de la mediana producto del predominio de valores bajos.

Observemos otros ejemplo:

boxplot(homicidios[, 6:12], names = c("1995", "1996", "1997", "1998", "1999", 
    "2000", "2001"))
grid()

plot of chunk bpecambios

La amplitud de la caja en los gráficos nos indica la variación de la data, lo que pudiera deberse a la mayor o menor presencia de datos no disponible a lo largo de los 6 años visualizados. Con todo, al observar la ubicación de la mediana notamos que el promedio de la tasa de homicidios por cada 100 mil habitantes ha sido más o menos constante. Observamos además que predominan tasas bajas en la data en tanto que los valores altos no son la regla. El 75% de los países, los valores se mantiene por debajo de los 20 homicidios, o menos por cada 100 mil habitantes. No obstante, se observan casos atípicos y extremos. Países cuyas tasas de homicidio se ubican hasta 7 veces el valor del 75% restantes. Así, en 1995, por ejemplo, hay un país con una tasa de casi 140 homicidios por cada 100 mil habitantes.

Veamos otros ejemplos usando esta vez ggplot2. Aquí vamos a pedir que los valores atípicos sean de color azul:

qplot(variable, value, data = homicidioS, geom = "boxplot", outlier.colour = "blue", 
    xlab = "año", ylab = "tasa") + theme(axis.text.x = element_text(angle = 90))

plot of chunk bpcambiarValor

La tasa de homicidios por región y subregión

qplot(region, value, data = homicidioS, geom = "boxplot", outlier.colour = "blue", 
    xlab = "region", ylab = "tasa") + theme(axis.text.x = element_text(angle = 90))

plot of chunk bpresumen

qplot(subregion, value, data = homicidioS, geom = "boxplot", outlier.colour = "blue", 
    xlab = "subregion", ylab = "tasa") + theme(axis.text.x = element_text(angle = 90))

plot of chunk bpfigura2

No hay comentarios: