Cuando queremos aplicar el test de Friedman de medidas repetidas a
una variable numérica separada en más de 2 muestras/categorías,
necesitamos que los datos estén dispuestos en un objeto
matrix y que cada columna sea una de las
muestras/categorías:
| ctrl | trt1 | trt2 |
|---|---|---|
| 4.17 | 4.81 | 6.31 |
| 5.58 | 4.17 | 5.12 |
| 5.18 | 4.41 | 5.54 |
| 6.11 | 3.59 | 5.50 |
Pero puede ocurrir que nuestros datos estén apilados en un
data.frame, es decir, la variable numérica está en una
columna y la variable categórica en otra:
| weight | group |
|---|---|
| 4.17 | ctrl |
| 4.81 | trt1 |
| 6.31 | trt2 |
| 5.58 | ctrl |
| 4.17 | trt1 |
| 5.12 | trt2 |
| 5.18 | ctrl |
| 4.41 | trt1 |
| 5.54 | trt2 |
En este caso, para poder usar la función de R
friedman.test() tenemos que desapilar las observaciones con
el comando unstack() que separa los valores numéricos en
tantas columnas como categorías tiene el factor. Hay que tener en cuenta
que cada categoría debe tener el mismo número de observaciones para que
las columnas resultantes tengan el mismo número de filas y el objeto sea
tipo matrix.
Ejemplo: Con el conjunto de datos
PlantGrowth incluido en R no podemos aplicar a la variable
weight (peso seco de las plantas) el test de Friedman entre
los 3 tratamientos groups a los que se han sometido dichas
plantas ctrl,trt1,trt2, ya que las observaciones están en
formato dataframe y el uso de la fórmula
weight ~ group da error en el test.
# Cargamos los datos
datos <- PlantGrowth
head(datos) weight group
1 4.17 ctrl
2 5.58 ctrl
3 5.18 ctrl
4 6.11 ctrl
5 4.50 ctrl
6 4.61 ctrl
# Hacemos el test con ~ y da error
friedman.test(weight ~ group, data = datos)Error in friedman.test.formula(weight ~ group, data = datos): incorrect specification for 'formula'
Así que, previamente, convertimos el dataframe en una
matriz, usando unstack() mediante una fórmula
numeric ~ factor que significa que la variable numérica se
desapila por las categorías del factor. Una vez desapilada se convierte
en matriz con as.matrix():
# Desapilamos los datos
datos.unstack <- unstack(datos, weight ~ group)
# El test no da error
friedman.test(as.matrix(datos.unstack))
Friedman rank sum test
data: as.matrix(datos.unstack)
Friedman chi-squared = 4.2, df = 2, p-value = 0.1225