Tres métodos de estadÃsticas por factor
En ocasiones tenemos un arreglo tipo data.frame donde una columna contiene los valores de interés y otra columna las categorÃas de cada valor. En este arreglo calcular la media, desviación estándar o error estándar entre otros, puede parecer complicado. Aplicar directamente mean() a la columna de valores resulta en la media del total de los valores de la muestra. Por lo tanto calcular estos estadÃsticos usando las categorÃas o factores, requiere de otras funciones.
Existen diferentes métodos para realizar estas operaciones, lo que en ocasiones al buscar en la red, puede confundirnos un poco. De momento me enfocare en tres funciones que vienen con cualquier distribución de R.1
Usaremos un pequeño data frame:
x <- data.frame(categorias=c(rep(letters[1:3],3), valores=rnorm(9, 20,3))
data.frame define el arreglo
c(rep(letters[1:3],3) genera un vector que repite a, b, c, en tres ocasiones, que se coloca en la columna categorÃas2
rnorm(9, 20,3) genera un vector de 9 números aleatorios de una distribución normal con una media de 20 y una desviación estándar de 3
Por lo que podemos hacer referencia a las categorÃas mediante:
Y a los valores mediante :
La función by() permite agrupar por categorÃas los valores y aplicarle la función que alimentamos en la tercera posición.
by(x$valores,x$categorias,mean)
Es importante considerar que la salida de este comando es una lista, y para acceder a los valores es necesario usar la notación correspondiente.
tapply(x$valores,x$categorias,mean)
Esta función también genera una lista.
aggregate(valores~categorias,data=x,mean)
La salida de esta función es un data frame.
Para la desviación estándar es solo necesario cambiar la función mean() por sd() y en el caso del error estándar se puede usar una función definida por nosotros como ee.
Existen mas paquetes que se pueden usar para agrupar por factor o codificar la estructura de los datos como reshape() sin embargo por simplicidad he preferido mencionar solo las funciones del paquete base. ↩︎
letters tiene las letras en minúscula, mientras que LETTERS tiene un vector de letras en mayúsculas. ↩︎