Autor: Álvaro Alonso Fernández
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)
Cuando se mide una misma variable dependiente cuantitativa en los mismos individuos a diferentes tiempos violamos un requisito del ANOVA, la independencia de la medidas entre ellas. Para solucionar este problema podemos emplear el ANOVA de medidas repetidas.
Queremos analizar los datos de rendimiento académico de seis alumnos. En cada alumno se ha medido a cinco tiempos diferentes su rendimiento, por tanto las muestras tomadas no son independientes entre si. Para poder analizar estos datos debemos considerar las muestras como relacionadas, es decir debemos realizar un ANOVA de medidas repetidas.
Veamos como son nuestros datos:
#Fijamos el directorio de trabajo
setwd(dir = "F:/R/MARKDOWN/medidasrepetidas")
#leemos el fichero de datos
datosmedidas<-read.csv("medidasrepetidas.csv", sep=";")
str(datosmedidas)
## 'data.frame': 30 obs. of 3 variables:
## $ individuo : int 1 1 1 1 1 2 2 2 2 2 ...
## $ time : int 1 2 3 4 5 1 2 3 4 5 ...
## $ rendimiento: num 8.5 8.2 8.9 7.7 7.4 9.8 8.9 8.9 8.8 8.1 ...
head(datosmedidas)
## individuo time rendimiento
## 1 1 1 8.5
## 2 1 2 8.2
## 3 1 3 8.9
## 4 1 4 7.7
## 5 1 5 7.4
## 6 2 1 9.8
Ahora transformamos en factores al individuo
y al time
, para ello utilizamos factor
:
#transformamos en factor el tiempo y los individuos
datosmedidas$time<-factor(datosmedidas$time)
datosmedidas$individuo<-factor(datosmedidas$individuo)
str(datosmedidas)
## 'data.frame': 30 obs. of 3 variables:
## $ individuo : Factor w/ 6 levels "1","2","3","4",..: 1 1 1 1 1 2 2 2 2 2 ...
## $ time : Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5 1 2 3 4 5 ...
## $ rendimiento: num 8.5 8.2 8.9 7.7 7.4 9.8 8.9 8.9 8.8 8.1 ...
datosmedidas
## individuo time rendimiento
## 1 1 1 8.5
## 2 1 2 8.2
## 3 1 3 8.9
## 4 1 4 7.7
## 5 1 5 7.4
## 6 2 1 9.8
## 7 2 2 8.9
## 8 2 3 8.9
## 9 2 4 8.8
## 10 2 5 8.1
## 11 3 1 9.6
## 12 3 2 9.0
## 13 3 3 9.3
## 14 3 4 7.5
## 15 3 5 7.1
## 16 4 1 7.5
## 17 4 2 7.8
## 18 4 3 7.8
## 19 4 4 4.5
## 20 4 5 4.6
## 21 5 1 5.8
## 22 5 2 5.8
## 23 5 3 5.9
## 24 5 4 2.6
## 25 5 5 1.2
## 26 6 1 9.9
## 27 6 2 9.8
## 28 6 3 9.6
## 29 6 4 8.6
## 30 6 5 8.7
Como se puede ver nuestros datos estan ordenados como en un análisis ANOVA clásico. Es decir hay una columna con el identificador del individuo
, otra con los valores de la variable dependiente rendimiento
y otra con el tiempo time
.
Vamos a realizar el análisis de medidas repetidas ANOVA paramétrico por medio del paquete ez
(install.packages("ez")
). Para ello hay que indicar nuestros datos (data=
), nuestra variable dependiente (dv=
), nuestros individuos (wid=
) y el tiempo (within=
):
#Instalamos y Cargamos ez:
library(ez)
## Registered S3 methods overwritten by 'lme4':
## method from
## cooks.distance.influence.merMod car
## influence.merMod car
## dfbeta.influence.merMod car
## dfbetas.influence.merMod car
#Aplicamos un medidas repetidas:
ezANOVA(data=datosmedidas, dv=rendimiento, wid=individuo, within=time)
## $ANOVA
## Effect DFn DFd F p p<.05 ges
## 2 time 4 20 12.41317 3.096979e-05 * 0.2211562
##
## $`Mauchly's Test for Sphericity`
## Effect W p p<.05
## 2 time 0.003212948 0.03413309 *
##
## $`Sphericity Corrections`
## Effect GGe p[GG] p[GG]<.05 HFe p[HF] p[HF]<.05
## 2 time 0.3126606 0.009730034 * 0.3669864 0.006076078 *
Podemos ver en nuestros resultados que el time
es significativo ($ANOVA el p es menor de 0.05), es decir el rendimiento escolar cambia con el tiempo. Pero en este caso nuestros datos violan uno de los requisitos que es la esfericidad (Mauchly’s test es significativo), debemos fiarnos de la p de la Sphericity corrections
que nos confirma lo que hemos deducido al principio.
Sabemos que el tiempo influye, pero ¿cómo lo hace? Para ello representamos nuestros datos gráficamente que es la mejor forma de entender el resultado de cualquier análisis estadístico (de hecho deberíamos haberlo hecho antes del análisis, pero a veces con las prisas…):
boxplot(rendimiento~time, xlab="time", ylab="Rendimiento académico", main="rendimiento alumnos con el paso del tiempo", col="blue", data=datosmedidas)
Claramente el tiempo hace que el rendimiento académico decaiga, ¿se aburren nuestros alumnos? No creo, nuestras clases son entretenidas pero uno no puede estar atento mucho tiempo.
Si queremos ver el rendimiento de cada uno de nuestros alumnos lo que haremos es representar gráficamente el rendimeinto de cada uno de ellos. Una forma puede ser la siguiente:
#Represento la actividad de cada individuo en función del tiempo:
require(lattice)
## Loading required package: lattice
xyplot(rendimiento ~ time | individuo, data=datosmedidas, type = c('l','l'),
col = c("blue", "red"), auto.key=T)
#El mismo gráfico solamente con las observaciones:
xyplot(rendimiento ~ time | individuo, data=datosmedidas)
Podemos optar por el mismo análisis pero con un test no paramétrico. En este caso hay que instalar el paquete jmv
(install.packages("jmv")
) y nuestros datos deben estar ordenados de otra forma. Las observaciones para cada tiempo deben estar en columnas, siendo cada fila un individuo:
library(jmv)
datosmedidascolumns<-read.csv("medidasrepetidascolumns.csv", sep=";")
str(datosmedidascolumns)
## 'data.frame': 6 obs. of 6 variables:
## $ individuo: int 1 2 3 4 5 6
## $ time1 : num 8.5 9.8 9.6 7.5 5.8 9.9
## $ time2 : num 8.2 8.9 9 7.8 5.8 9.8
## $ time3 : num 8.9 8.9 9.3 7.8 5.9 9.6
## $ time4 : num 7.7 8.8 7.5 4.5 2.6 8.6
## $ time5 : num 7.4 8.1 7.1 4.6 1.2 8.7
Nuestros datos se ordenan del siguiente modo:
head(datosmedidascolumns)
## individuo time1 time2 time3 time4 time5
## 1 1 8.5 8.2 8.9 7.7 7.4
## 2 2 9.8 8.9 8.9 8.8 8.1
## 3 3 9.6 9.0 9.3 7.5 7.1
## 4 4 7.5 7.8 7.8 4.5 4.6
## 5 5 5.8 5.8 5.9 2.6 1.2
## 6 6 9.9 9.8 9.6 8.6 8.7
anovaRMNP(datosmedidascolumns,measures=vars(time1,time2,time3,time4,time5))
##
## REPEATED MEASURES ANOVA (NON-PARAMETRIC)
##
## Friedman
## -------------------------------
## <U+03C7>² df p
## -------------------------------
## 19.24786 4 0.0007025
## -------------------------------
La conclusión es la misma, el tiempo influye en el rendimiento acadámico de los alumnos. Igual es bueno hacer un descanso y relajarse antes de continuar la clase…
Espero que sea de utilidad.
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)