¿Cómo ejecutar ANOVA bidireccional en datos sin normalidad ni igualdad de varianza en R?

16

Estoy trabajando en mi tesis de maestría en este momento y planeé ejecutar las estadísticas con SigmaPlot. Sin embargo, después de pasar un tiempo con mis datos, llegué a la conclusión de que SigmaPlot podría no ser adecuado para mi problema (puedo estar equivocado), así que comencé mis primeros intentos en R, lo que no lo hizo exactamente más fácil.

El plan era ejecutar un ANOVA DE DOS VÍAS simple en mis datos que resulta de 3 proteínas diferentes y 8 tratamientos diferentes en esos, por lo que mis dos factores son proteínas y tratamientos. Probé la normalidad usando ambos

> shapiro.test(time)

y

> ks.test(time, "norm", mean=mean(time), sd=sqrt(var(time)))

En ambos casos (tal vez no sea sorprendente) terminé con una distribución no normal.

Lo que me dejó con las primeras preguntas sobre qué prueba usar para la igualdad de varianzas. se me ocurrio

> chisq.test(time)

y el resultado fue que tampoco tengo igualdad de varianza en mis datos.

Intenté diferentes transformaciones de datos (registro, centro, estandarización), todo lo cual no resolvió mis problemas con las variaciones.

Ahora estoy perdido, cómo llevar a cabo el ANOVA para probar qué proteínas y qué tratamientos difieren significativamente entre sí. Encontré algo sobre una prueba de Kruskal-Walis, pero solo por un factor (?). También encontré cosas sobre la clasificación o la randamización, pero aún no cómo implementar esas técnicas en R.

¿Alguien tiene una sugerencia de lo que debo hacer?

Editar: gracias por sus respuestas, estoy un poco abrumado por la lectura (parece que cada vez es más y no menos), pero, por supuesto, continuaré.

Aquí un ejemplo de mis datos, como se sugiere (lo siento mucho por el formato, no pude encontrar otra solución o lugar para colocar un archivo. Todavía soy nuevo en todo esto):

protein treatment   time  
A   con 2329.0  
A   HY  1072.0  
A   CL1 4435.0  
A   CL2 2971.0  
A   CL1-HY sim  823.5  
A   CL2-HY sim  491.5  
A   CL1+HY mix  2510.5  
A   CL2+HY mix  2484.5  
A   con 2454.0  
A   HY  1180.5  
A   CL1 3249.7  
A   CL2 2106.7  
A   CL1-HY sim  993.0  
A   CL2-HY sim  817.5  
A   CL1+HY mix  1981.0  
A   CL2+HY mix  2687.5  
B   con 1482.0  
B   HY  2084.7  
B   CL1 1498.0  
B   CL2 1258.5  
B   CL1-HY sim  1795.7  
B   CL2-HY sim  1804.5  
B   CL1+HY mix  1633.0  
B   CL2+HY mix  1416.3  
B   con 1339.0  
B   HY  2119.0  
B   CL1 1093.3  
B   CL2 1026.5  
B   CL1-HY sim  2315.5  
B   CL2-HY sim  2048.5  
B   CL1+HY mix  1465.0  
B   CL2+HY mix  2334.5  
C   con 1614.8  
C   HY  1525.5  
C   CL1 426.3  
C   CL2 1192.0  
C   CL1-HY sim  1546.0  
C   CL2-HY sim  874.5  
C   CL1+HY mix  1386.0  
C   CL2+HY mix  364.5  
C   con 1907.5  
C   HY  1152.5  
C   CL1 639.7  
C   CL2 1306.5  
C   CL1-HY sim  1515.0  
C   CL2-HY sim  1251.0  
C   CL1+HY mix  1350.5  
C   CL2+HY mix  1230.5
Sabino
fuente
2
Parece que estás bien encaminado con R, pero creo que tus dificultades pueden no estar relacionadas con R en absoluto. Quizás necesite consultar a un estadístico primero para comprender el problema, solo entonces lo abordaría prácticamente. Su pregunta actual es bastante elaborada y puede disuadir a las personas de criticarla. Para la parte técnica, aquí hay algunos sitios: ats.ucla.edu/stat/R/seminars/Repeated_Measures/… y personality-project.org/R/r.anova.html
Roman Luštrik
44
Una muy buena alternativa a las pruebas de rango es usar ANOVA de permutación ( uvm.edu/~dhowell/StatPages/More_Stuff/Permutation%20Anova/… ). Con ese enfoque, la heteroscedasticidad no importa. La razón principal por la que las personas usan las pruebas de rango es porque son computacionalmente mucho más fáciles. Eso ya no importa. Tenemos computadoras R y eficientes ...
Mikko
1
¿Qué es la respuesta? Tenga en cuenta que en realidad no nos importa si la respuesta es normalmente distribución, queremos verificar si los residuos del análisis son aproximadamente normales con variaciones similares. Pero si realmente hay un efecto de tratamiento, entonces no esperaríamos que la respuesta se distribuya normalmente de manera marginal.
Dason
1
Notaré que acabo de tomar los datos que publicó y ejecuté el anova de dos vías e hice una prueba de shapiro wilks en los residuos y esto dio un valor p de 0.5022 que no implica demasiada preocupación.
Dason
1
La normalidad de @Sabine a menudo no es una gran preocupación en lo que respecta a ANOVA, pero sus muestras deben provenir de la misma población, lo que significa que la igualdad de varianza es el supuesto más importante, después de la aleatorización, por supuesto. Debería hacer algo, si sus variaciones no son aproximadamente iguales (intente ?bartlett.test)
Mikko

Respuestas:

12

Esto puede ser más un comentario que una respuesta, pero no cabe como un comentario. Podemos ayudarlo aquí, pero esto puede tomar algunas iteraciones; Necesitamos más información.

Primero, ¿cuál es su variable de respuesta?

Segundo, tenga en cuenta que la distribución marginal de su respuesta no tiene que ser normal, sino que la distribución condicional en el modelo (es decir, los residuos) debería serlo; no está claro que haya examinado sus residuos. Además, la normalidad es lo menos importante. supuesto de un modelo lineal (por ejemplo, un ANOVA); Es posible que los residuos no necesiten ser perfectamente normales. Las pruebas de normalidad generalmente no valen la pena (ver aquí para una discusión sobre CV), las tramas son mucho mejores. Intentaría un qq-plot de sus residuos. En Resto se hace con qqnorm(), o intente qqPlot()en elcarpaquete. También vale la pena considerar la manera en que los residuos no son normales: la asimetría es más dañina que el exceso de curtosis, en particular si las asimetrías alternan direcciones entre los grupos.

Si realmente hay un problema por el que vale la pena preocuparse, una transformación es una buena estrategia. Tomar el registro de sus datos en bruto es una opción, pero no la única. Tenga en cuenta que centrar y estandarizar no son realmente transformaciones en este sentido. Desea examinar la familia de transformaciones de poder de Box & Cox . Y recuerde, el resultado no tiene que ser perfectamente normal, solo lo suficientemente bueno.

A continuación, no sigo su uso de la prueba de ji cuadrado para la homogeneidad de la varianza, aunque puede estar perfectamente bien. Le sugiero que use la prueba de Levene (use leveneTest()in car). La heterogeneidad es más perjudicial que la no normalidad, pero el ANOVA es bastante robusto si la heterogeneidad es menor. Una regla general estándar es que la varianza del grupo más grande puede ser hasta cuatro veces la más pequeña sin presentar grandes problemas. Una buena transformación también debería abordar la heterogeneidad.

Si estas estrategias son insuficientes, probablemente exploraría una regresión robusta antes de intentar un enfoque no paramétrico.

Si puede editar su pregunta y decir más sobre sus datos, puedo actualizarla para proporcionar información más específica.

gung - Restablece a Monica
fuente
En cuanto a mi segundo punto, recientemente escribí una respuesta aquí que puede ayudar a aclarar este problema. Es posible que desee leerlo.
gung - Restablece a Monica
8

( nota: esta respuesta se publicó antes de que la pregunta fuera migrada y fusionada desde SO, por lo que se han agregado detalles a la pregunta que no se abordan aquí. Muchos se abordan en los comentarios y la respuesta de @gung).

Hay muchos enfoques diferentes, y esta pregunta se ha cubierto en otra parte de este sitio. Aquí hay una lista de algunos enfoques, con enlaces a otras preguntas en el sitio y algunas referencias:

  1. La transformación de energía de Box-Cox puede normalizar los residuos que están en una escala no lineal
  2. ANOVA en datos clasificados es muy fácil pero tiene un poder reducido y es difícil de interpretar. Ver Conover e Iman, (1981)
  3. Modelo logístico ordinal de probabilidades proporcionales
  4. Pruebas de permutación ( Anderson y ter Braak 2003 ), implementadas y descritas por Anderson y como la adonisfunción en el paquete R Vegan
  5. Bootstrapping
  6. Modelado jerárquico bayesiano ( Gelman 2005 )
David LeBauer
fuente
+1, esta es una buena lista de algunas opciones disponibles para explorar.
gung - Restablece a Monica
A continuación se encuentran los comentarios originalmente intercambiados en Stack Overflow, que de alguna manera se perdieron durante la migración. Ver meta.stats.stackexchange.com/q/1157/930 .
chl
¿Sabes si hay una implementación de las ideas de Anderson y Braak? - Henrik 16 de mayo a las 15:15
chl
@Henrik hay una implementación en FORTRAN Anderson 2005 que está disponible a través de la función R adonisen el Veganpaquete R / David 16 de mayo a las 16:20
chl
Gracias. adonisparece funcionar incluso con dvs univariados. Sin embargo, tengo la sensación de que usa algo así como sumas de cuadrados tipo 1 cuando recibo el mensaje Terms added sequentially (first to last)cada vez que lo ejecuto. ¿Lo has usado o puedes decir algo al respecto? - Henrik 16 de mayo a las 17:03
chl