2010-05-29 31 views
15

He estado usando var.test y bartlett.test para verificar las suposiciones básicas de ANOVA, entre otras, homoscedascity (homogeneidad, igualdad de varianzas). Procedimiento es bastante simple para ANOVA de un factor:Homoscedascity test para Two-Way ANOVA

bartlett.test(x ~ g) # where x is numeric, and g is a factor 
var.test(x ~ g) 

Pero, para las tablas de 2x2, es decir, de dos vías ANOVA, quiero hacer algo como esto:

bartlett.test(x ~ c(g1, g2)) # or with list; see latter: 
var.test(x ~ list(g1, g2)) 

Por supuesto, los supuestos del ANOVA puede ser verificado con procedimientos gráficos, pero ¿qué pasa con "una opción aritmética"? Es eso, en absoluto, manejable? ¿Cómo se prueba la homoscedascity en ANOVA de dos vías?

+0

pensé desde el título que esta pregunta se hizo por completo. – sblom

+0

¿Qué quiere decir con "inventado"? =) Homoscedascity (esfericidad, homogeneidad de varianzas) es, con la normalidad de distribución en cada submuestra, uno de los supuestos básicos de ANOVA. Two-Way significa ANOVA con dos variables independientes/factor. Accidentalmente publiqué este tema dos veces, por lo que la primera publicación se cierra cuando recuerdo ... tal vez por eso pensaste que esto estaba inventado/algún tipo de correo no deseado o algo así ... =) – aL3xa

Respuesta

17

La prueba de hipótesis es una herramienta incorrecta para evaluar la validez de los supuestos del modelo. Si el tamaño de la muestra es pequeño, no tiene poder para detectar diferencias de varianza, incluso si las diferencias de varianza son grandes. Si tiene un tamaño de muestra grande, tiene poder para detectar incluso las desviaciones más triviales de igual varianza, por lo que casi siempre rechazará el nulo. Los estudios de simulación han demostrado que las pruebas preliminares de la suposición del modelo conducen a errores de tipo I no confiables.

Observar los residuos en todas las celdas es un buen indicador, o si sus datos son normales, puede usar el AIC o BIC con/sin varianzas iguales como procedimiento de selección.

Si cree que hay desigualdad de las diferencias, la caída de la suposición con algo como:

library(car) 
model.lm <- lm(formula=x ~ g1 + g2 + g1*g2,data=dat,na.action=na.omit) 
Anova(model.lm,type='II',white.adjust='hc3') 

no perder mucho poder con el método robusto (hetroscedastic matrices de covarianza consistentes), por lo que en caso de duda ir robusta .

+0

Respuesta fascinante Ian, gracias. –

+0

respuesta completa, concisa, hábilmente escrita !!! Verificaría los residuos de cualquier forma ...¡pero esta respuesta fue una bocanada de aire fresco en mi comprensión dogmática de las estadísticas! ¡Muchas gracias, Ian! – aL3xa

5

Para bartlett.test

bartlett.test(split(x,list(g1,g2))) 

var.test no es aplicable, ya que sólo funciona cuando hay dos grupos.

+0

No puedo creer que fuera tan simple ! O_o – aL3xa

7

Puede probar la heterocedasticidad utilizando el Fligner–Killeen test de homogeneidad de varianzas. Suponiendo que su modelo es algo así como

model<-aov(gain~diet*supplement) 

fligner.test(gain~diet*supplement) 

     Fligner-Killeen test of homogeneity of variances 

data: gain by diet by supplement 
Fligner-Killeen:med chi-squared = 2.0236, df = 2, p-value = 0.3636 

Se podría haber utilizado bartlett.test (pero esto es más una prueba de la no normalidad de la igualdad de las varianzas)

bartlett.test(gain~diet*supplement) 
     Bartlett test of homogeneity of variances 

data: gain by diet by supplement 
Bartlett's K-squared = 2.2513, df = 2, p-value = 0.3244 

Por otra parte, se podría realizar la Levene test de variaciones de grupos iguales en ANOVA unidireccional y bidireccional. Las implementaciones de prueba de Levene se pueden encontrar en los paquetes car (enlace fijo), y s20xlawstat

levene.test(gain~diet*supplement) # car package version 

Levene's Test for Homogeneity of Variance 
     Df F value Pr(>F) 
group 11 1.1034 0.3866 
     36 
+4

No creo que sea la forma correcta de usar 'bartlett.test' cuando hay dos factores. Creo que solo usa la primera variable. Por ejemplo, si ejecuta 'bartlett.test (total_bill ~ sex * time, data = tips)' y 'bartlett.test (total_bill ~ sex, data = tips)', obtiene el mismo valor p, y df = 1 para ambos. Creo que necesitas usar algo como 'bartlett.test (total_bill ~ interaction (time, sex), data = tips)'. En este caso, df = 3. – wch