[R-es] Comparaciones múltiples en ANOVA anidadp
José Trujillo Carmona
trujillo en unex.es
Sab Feb 4 20:05:32 CET 2012
Dispongo de un experimento en el que cinco tratamientos ha sido
aplicados a cinco grupos de voluntarios.
En cada grupo había tres personas y a cada persona se le tomaron 3 medidas,
En total dispongo de 45 medidas, pero evidentemente no son
independientes entre sí. Si no tomo en cuenta que las medidas de la
misma persona son más parecidas entre sí (bloques anidados) estaría
incurriendo en pseudoreplicación.
Los datos y el análisis se podrían hacer de la siguiente forma:
Generación de datos para ejemplo:
> Medidas <- as.data.frame(matrix(rnorm(45*1, mean=10, sd=1), ncol=1))
> colnames(Medidas) <- "VR"
> Medidas$Tratamiento <- as.factor(rep(1:5,rep(9,5)))
> Medidas$Individuo <- as.factor(rep(1:15,rep(3,15)))
El análisis de la varianza sugerido podría ser:
> AnovaModel.1 <-aov(VR ~ Tratamiento + Tratamiento/Individuo,
data=Medidas)
> summary(AnovaModel.1)
Df Sum Sq Mean Sq F value Pr(>F)
Tratamiento 4 1.15 0.2871 0.25 0.907
Tratamiento:Individuo 10 12.39 1.2395 1.08 0.407
Residuals 30 34.44 1.1479
Pero este análisis incurre en evidente pseudoreplicación: El valor F es
el cociente entre el Cuadrado Medio del Tratamiento y los Residuos como
si las 45 mediciones fuesen independientes entre sí.
Para tener en cuenta que la variabilidad inducida en la respuesta por
los Tratamientos debe ser medida entre individuos y no entre mediciones
el análisis procedente podría ser:
> AnovaModel.2 <- aov(VR ~ Tratamiento + Error(Individuo),data=Medidas)
> summary(AnovaModel.2)
Error: Individuo
Df Sum Sq Mean Sq F value Pr(>F)
Tratamiento 4 1.148 0.2871 0.232 0.914
Residuals 10 12.395 1.2395
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 30 34.44 1.148
Pero el objeto AnovaModel.2 no es un objeto aov sino aovlist:
> attr(AnovaModel.2,"class")
[1] "aovlist" "listof"
Como consecuencia no puedo utilizarlo ni para la función glht ni para la
función TukeyHSD.
Puedo "extraer" un aov:
> ls.str(pat="AnovaModel.2")
AnovaModel.2 : List of 3
$ (Intercept):List of 9
$ Individuo :List of 9
$ Within :List of 6
> AnovaModel.3<-AnovaModel.2$Individuo
> attr(AnovaModel.3,"class")
[1] "aov" "lm"
A este modelo ya puedo pedirle límites de confianza adecuados para los
parámetros del modelo (diferencias entre Tratamientos):
> confint(AnovaModel.3)
2.5 % 97.5 %
Tratamiento[T.2] -1.485182 0.8535804
Tratamiento[T.3] -1.072891 1.2658714
Tratamiento[T.4] -1.258890 1.0798723
Tratamiento[T.5] -1.453857 0.8849054
Pero el nuevo modelo sigue siendo inválido para glht o para TuleyHSD:
> Pares <- glht(AnovaModel.3, linfct = mcp(Tratamiento = "Tukey"))
[1] ERROR: no 'model.matrix' method for 'model' found!
> TukeyHSD(AnovaModel.3, "Tratamiento")
[2] ERROR: this fit does not inherit from "lm"
Para no alargarme en mis indagaciones. Para los análisis de la varianza
podría haber utilizado las funciones lme del paquete nlme o lmer del
paquete lme4, pero tampoco proporcionan objetos válidos para glht o
TukeyHSD.
¿Alguien sabe como abordar las comparaciones múltiples con medidas
repetidas o anova anidado?
Gracias de antemano.
--
_____---^---_____
Univ. de Extremadura
Dept. Matemáticas.
Despacho B29
Tf: + 34 924 289 300
Ext. 86823
Más información sobre la lista de distribución R-help-es