¿Por qué lme y aov devuelven resultados diferentes para ANOVA de medidas repetidas en R?


24

Estoy tratando de pasar de usar el ezpaquete a lmeANOVA para medidas repetidas (ya que espero poder usar contrastes personalizados con lme).

Siguiendo el consejo de esta publicación de blog , pude configurar el mismo modelo usando ambos aov(como lo hace ez, cuando se solicitó) y lme. Sin embargo, mientras que en el ejemplo dado en esa publicación los valores F coinciden perfectamente entre ( aovy lmelo comprobé, y lo hacen), este no es el caso para mis datos. Aunque los valores F son similares, no son lo mismo.

aovdevuelve un valor f de 1.3399, lmedevuelve 1.36264. Estoy dispuesto a aceptar el aovresultado como el "correcto", ya que esto también es lo que SPSS devuelve (y esto es lo que cuenta para mi campo / supervisor).

Preguntas:

  1. Sería genial si alguien pudiera explicar por qué existe esta diferencia y cómo puedo usarla lmepara proporcionar resultados creíbles. (También estaría dispuesto a usar en lmerlugar de lmepara este tipo de cosas, si da el resultado "correcto". Sin embargo, no lo he usado hasta ahora).

  2. Después de resolver este problema, me gustaría ejecutar un análisis de contraste. Especialmente me interesaría el contraste de agrupar los dos primeros niveles de factor (es decir, c("MP", "MT")) y comparar esto con el tercer nivel de factor (es decir, "AC"). Además, probar el tercer nivel versus el cuarto nivel de factor (es decir, "AC"versus "DA").

Datos:

tau.base <- structure(list(id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L), .Label = c("A18K", 
"D21C", "F25E", "G25D", "H05M", "H07A", "H08H", "H25C", "H28E", 
"H30D", "J10G", "J22J", "K20U", "M09M", "P20E", "P26G", "P28G", 
"R03C", "U21S", "W08A", "W15V", "W18R"), class = "factor"), factor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("MP", "MT", "AC", "DA"
), class = "factor"), value = c(0.9648092876, 0.2128662077, 1, 
0.0607615485, 0.9912814024, 3.22e-08, 0.8073856412, 0.1465590332, 
0.9981672618, 1, 1, 1, 0.9794401938, 0.6102546108, 0.428651501, 
1, 0.1710644881, 1, 0.7639763913, 1, 0.5298989196, 1, 1, 0.7162733447, 
0.7871177434, 1, 1, 1, 0.8560509327, 0.3096989662, 1, 8.51e-08, 
0.3278862311, 0.0953598576, 1, 1.38e-08, 1.07e-08, 0.545290432, 
0.1305621416, 2.61e-08, 1, 0.9834051136, 0.8044114935, 0.7938839461, 
0.9910112678, 2.58e-08, 0.5762677121, 0.4750002288, 1e-08, 0.8584252623, 
1, 1, 0.6020385797, 8.51e-08, 0.7964935271, 0.2238374288, 0.263377904, 
1, 1.07e-08, 0.3160751898, 5.8e-08, 0.3460325565, 0.6842217296, 
1.01e-08, 0.9438301877, 0.5578367224, 2.18e-08, 1, 0.9161424562, 
0.2924856039, 1e-08, 0.8672987992, 0.9266688748, 0.8356425464, 
0.9988463913, 0.2960361777, 0.0285680426, 0.0969063841, 0.6947998266, 
0.0138254805, 1, 0.3494775301, 1, 2.61e-08, 1.52e-08, 0.5393467752, 
1, 0.9069223275)), .Names = c("id", "factor", "value"), class = "data.frame", row.names = c(1L, 
6L, 10L, 13L, 16L, 17L, 18L, 22L, 23L, 24L, 27L, 29L, 31L, 33L, 
42L, 43L, 44L, 45L, 54L, 56L, 58L, 61L, 64L, 69L, 73L, 76L, 79L, 
80L, 81L, 85L, 86L, 87L, 90L, 92L, 94L, 96L, 105L, 106L, 107L, 
108L, 117L, 119L, 121L, 124L, 127L, 132L, 136L, 139L, 142L, 143L, 
144L, 148L, 149L, 150L, 153L, 155L, 157L, 159L, 168L, 169L, 170L, 
171L, 180L, 182L, 184L, 187L, 190L, 195L, 199L, 202L, 205L, 206L, 
207L, 211L, 212L, 213L, 216L, 218L, 220L, 222L, 231L, 232L, 233L, 
234L, 243L, 245L, 247L, 250L))

Y el codigo:

require(nlme)

summary(aov(value ~ factor+Error(id/factor), data = tau.base))

anova(lme(value ~ factor, data = tau.base, random = ~1|id))

Parece que acabas de responder la parte sobre los contrastes en tu respuesta aquí ; si no, edite esta pregunta para que sepamos qué dificultad persiste.
Aaron - Restablece a Mónica el

2
@ Aaron, mientras haya diferencias en los lmeresultados del libro de texto estándar ANOVA (dado por aov, y que es lo que necesito), esta no es una opción para mí. En mi artículo quiero informar un ANOVA, no algo así como un ANOVA. Curiosamente, Venables y Ripley (2002, p. 285) muestran que ambos enfoques conducen a estimaciones idénticas. Pero las diferencias en los valores de F me dejan con un mal presentimiento. Además, Anova()(desde car) devuelve solo valores de Chi² para los lmeobjetos. Por lo tanto, para mí, mi primera pregunta aún no ha sido respondida.
Henrik

Entiendo (pero no comparto) su cautela lme; pero para contrastes, glhtfunciona también en los lmajustes, no solo en los lmeajustes. (Además, los lmeresultados son los resultados de los libros de texto estándar también.)
Aaron - Restablecer Mónica

Lamentablemente, no puede especificar lmun análisis de medidas repetidas. Solo aovpuede manejar medidas repetidas pero devolverá un objeto de clase aovlistque desafortunadamente no es manejado por glht.
Henrik

3
lmusa el error residual como el término de error para todos los efectos; cuando hay efectos que deberían usar un término de error diferente, aoves necesario (o en su lugar, usar los resultados de lmpara calcular las estadísticas F manualmente). En su ejemplo, el término de error para factores la id:factorinteracción, que es el término de error residual en un modelo aditivo. Compara tus resultados con anova(lm(value~factor+id)).
Aaron - Restablece a Mónica el

Respuestas:


28

Son diferentes porque el modelo lme está obligando a que el componente de varianza idsea ​​mayor que cero. Al observar la tabla de anova en bruto para todos los términos, vemos que el error cuadrático medio para id es menor que el de los residuos.

> anova(lm1 <- lm(value~ factor+id, data=tau.base))

          Df  Sum Sq Mean Sq F value Pr(>F)
factor     3  0.6484 0.21614  1.3399 0.2694
id        21  3.1609 0.15052  0.9331 0.5526
Residuals 63 10.1628 0.16131   

Cuando calculamos los componentes de la varianza, esto significa que la varianza debida a id será negativa. Mi memoria de memoria de cuadrados medios esperados es inestable, pero el cálculo es algo así como

(0.15052-0.16131)/3 = -0.003597.

Esto suena extraño pero puede suceder. Lo que significa es que los promedios para cada id están más cerca uno del otro de lo que cabría esperar entre sí dada la cantidad de variación residual en el modelo.

En contraste, el uso de lme obliga a que esta varianza sea mayor que cero.

> summary(lme1 <- lme(value ~ factor, data = tau.base, random = ~1|id))
...
Random effects:
 Formula: ~1 | id
        (Intercept)  Residual
StdDev: 3.09076e-05 0.3982667

Esto informa desviaciones estándar, cuadrando para obtener los rendimientos de varianza 9.553e-10para la varianza id y 0.1586164para la varianza residual.

Ahora, debe saber que usar aovpara medidas repetidas solo es apropiado si cree que la correlación entre todos los pares de medidas repetidas es idéntica; Esto se llama simetría compuesta. (Técnicamente, es necesaria la esfericidad pero esto es suficiente por ahora.) Una de las razones para usar lmesobre aoves que puede manejar diferentes tipos de estructuras de correlación.

En este conjunto de datos en particular, la estimación de esta correlación es negativa; Esto ayuda a explicar cómo el error cuadrático medio para id fue menor que el error cuadrático residual. Una correlación negativa significa que si la primera medición de un individuo estaba por debajo del promedio, en promedio, la segunda estaría por encima del promedio, haciendo que los promedios totales para los individuos fueran menos variables de lo que esperaríamos si hubiera una correlación cero o una correlación positiva.

Usar lmecon un efecto aleatorio es equivalente a ajustar un modelo de simetría compuesta donde esa correlación se obliga a ser no negativa; Podemos ajustar un modelo donde la correlación puede ser negativa usando gls:

> anova(gls1 <- gls(value ~ factor, correlation=corCompSymm(form=~1|id),
                    data=tau.base))
Denom. DF: 84 
            numDF   F-value p-value
(Intercept)     1 199.55223  <.0001
factor          3   1.33985   0.267

Esta tabla ANOVA concuerda con la tabla del aovajuste y del lmajuste.

¿OK y eso qué? Bueno, si crees que la varianza idy la correlación entre las observaciones no deberían ser negativas, el lmeajuste es en realidad más apropiado que el ajuste usando aovo lmcomo su estimación de la varianza residual es ligeramente mejor. Sin embargo, si usted cree que la correlación entre las observaciones podría ser negativo, aovo lm, o glses mejor.

También puede interesarle explorar más la estructura de correlación; para ver una estructura de correlación general, harías algo como

gls2 <- gls(value ~ factor, correlation=corSymm(form=~unclass(factor)|id),
data=tau.base)

Aquí solo limito la salida a la estructura de correlación. Los valores 1 a 4 representan los cuatro niveles de factor; vemos que el factor 1 y el factor 4 tienen una correlación negativa bastante fuerte:

> summary(gls2)
...
Correlation Structure: General
 Formula: ~unclass(factor) | id 
 Parameter estimate(s):
 Correlation: 
  1      2      3     
2  0.049              
3 -0.127  0.208       
4 -0.400  0.146 -0.024

Una forma de elegir entre estos modelos es con una prueba de razón de probabilidad; esto muestra que el modelo de efectos aleatorios y el modelo de estructura de correlación general no son estadísticamente significativamente diferentes; cuando eso sucede, generalmente se prefiere el modelo más simple.

> anova(lme1, gls2)
     Model df      AIC      BIC    logLik   Test  L.Ratio p-value
lme1     1  6 108.0794 122.6643 -48.03972                        
gls2     2 11 111.9787 138.7177 -44.98936 1 vs 2 6.100725  0.2965

2
En realidad, es posible usar simetría compuesta con lmepara obtener los mismos resultados que con aov(y por lo tanto habilitar lmepara todos los ANOVA), es decir, usar el argumento de correlación en la llamada a lme:anova(lme(value ~ factor, data = tau.base, random = ~1|id, correlation = corCompSymm(form = ~1|id)))
Henrik

1
Buen hallazgo ¿Pero no hay un parámetro adicional en ese ajuste? Tiene tres parámetros de varianza; varianza para id, varianza residual y la correlación, mientras que el gls solo tiene una varianza residual y una correlación.
Aaron - Restablece a Mónica el

1
Su argumento parece plausible, sin embargo, los resultados no están de acuerdo. Todas las tablas ANOVA ( aov, lmesin simetría compuesta, y lmecon simetría compuesta) tienen exactamente el mismo número de DFS.
Henrik

1
Tendrás que convencerme de que esos tres parámetros son realmente una sobreparamización de los dos primeros. ¿Has averiguado cómo están relacionados?
Aaron - Restablece a Monica el

1
No. Estoy confiando en la salida de anova.lme(). De su respuesta deduje que la relación entre el ANOVA y los modelos mixtos radica en su estructura de correlación. Luego leí que imponer una estructura de correlación simétrica compuesta conduce a la igualdad entre los dos enfoques. Por eso lo impuse. No tengo idea si esto consume otro df. Sin embargo, el resultado no está de acuerdo con esta interpretación.
Henrik

2

aov()se ajusta al modelo mediante lm()mínimos cuadrados, se lmeajusta mediante la máxima probabilidad. Esa diferencia en cómo se estiman los parámetros del modelo lineal probablemente explica la diferencia (muy pequeña) en sus valores f.

En la práctica, (por ejemplo, para la prueba de hipótesis) estas estimaciones son las mismas, por lo que no veo cómo una podría considerarse 'más creíble' que la otra. Provienen de diferentes paradigmas de ajuste de modelos.

Para los contrastes, debe configurar una matriz de contraste para sus factores. Venebles y Ripley muestran cómo hacer esto en la p. 143, p.146 y p.293-294 de la 4ta edición.


Hmm, pero ¿por qué entonces a veces hay diferencias y a veces los resultados son exactamente iguales? Furthemrore, entonces parece ser imposible de usar lmeo lmerpara calcular un ANOVA (estrictamente hablando) ya que usa un método que es similar pero no idéntico. Entonces, ¿no hay forma de calcular los contrastes para ANOVAs de medida repetida en R?
Henrik

Si el sistema su modelado es verdaderamente lineal que los mínimos cuadrados y ML debería dar la misma estadística f. Es solo cuando hay otra estructura en los datos que los dos métodos darán resultados diferentes. Pinheiro y Bates cubren esto en su libro de modelos de efectos mixtos. Además, es probable que no sean "exactamente" iguales, si tuviera que ir lo suficientemente lejos en dígitos sig, estoy seguro de que encontrará alguna diferencia. Pero a todos los efectos prácticos son lo mismo.
Chris
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.