ANOVA

Supuestos

Gonzalo J. Muñoz

2019-04-17

“Do not assume anything Obi-Wan. Clear your mind must be if you are to discover the real villains behind this plot.”

Para interpretar los resultados de ANOVA correctamente existen ciertos supuestos estadísticos que es necesario cumplir. Recordemos que la prueba F se basa en la siguiente comparación de modelos:

\[F=\frac{(E_R - E_S)/(gl_R-gl_S)}{E_S/gl_S}\] Ennuestro ejemplo obtuvimos un valor para F de 11.25 con grados de libertad 2 y 15 para el error entre e intra sujetos respectivamente. Para determinar si el valor de F es estadísticamente buscamos un valor valor crítico de F mediante qf(P,glb,glw)

qf(.95,2,15)
## [1] 3.68232

Dado que \(F_{obs} = 11.25 > F_{crit} = 3.68\) rechazamos la hipótesis nula. Como fijamos \(\alpha\) en .05 la probabilidad de cometer un error de Tipo I ocurriría sólo un 5% de las veces (en el largo plazo). Sin embargo, para que dicha interpretación sea correcta el valor F obs debe seguir una distribución F, lo que supone:

Normalidad de las observaciones

Es importante subrayar que ANOVA es una prueba bastante robusta a desviaciones de la normalidad en el sentido que violaciones de este supuesto no altera de manera sustantiva la interpretción de F. Esto es, incluso cuando la data no está normalmente distribuída el valor nominal y real de los errores Tipo I difieren mínimamente (Lix, Keselman, & Keselman, 1996, pp. 599-600).

De acuerdo a Tabachnick and Fidell (2007Tabachnick, B.G., and L.S. Fidell. 2007. Experimental Design Using Anova. Belmont, CA: Thomson Higher Education.) cuando los tamaños de los grupos son parecidos y \(df_W\) > 202 Si \(df_W\) > 20 entonces \(N=20+a=23\) por lo que tendríamos aproximadamente \(23/3=7.6\approx8\) observaciones por grupo ANOVA es robusta a violaciones del supuesto de normalidad. Un problema es que evaluar la normalidad de una distribución con menos de 8 observaciones es poco confiable, por lo que habría que evaluar este supuesto para el grupo completo, no para cada grupo por separado.3 En cualquier caso, difícilmente un artículo con un muestra tan pequeña sería publicable, así que esta discusión es algo artifical (Como diría J. Tribbiani, “a muu point”)

Entre los métodos gráficos para evaluar la normalidad de las observaciones podemos usar un gráfico q-q4 Este video explica lo que es un gráfico q-q (https://www.youtube.com/watch?v=okjYjClSjOg)

qqnorm(df$satisfaccion)
qqline(df$satisfaccion)

Complementariamente, el test de Shapiro-Wilk se puede usar para determinar si la distribución observada difiere significativamente de una normal usando la función shapiro.test

shapiro.test(df$satisfaccion)
## 
##  Shapiro-Wilk normality test
## 
## data:  df$satisfaccion
## W = 0.97461, p-value = 0.8784

En este caso, la distribución de la muestra no difiere significativamente de la normal, W = 0.97, p > .05.

Heterogeneidad de la varianza

El problema de la heterogeneidad de la varianza es relevante sobre todo cuando los tamaños de los grupos son muy distintos y los grupos son pequeños (i.e., menos de 5 observaciones por grupo). Maxwell, Delaney, and Kelley (2018Maxwell, S. E., H. D. Delaney, and K. Kelley. 2018. Designing Experiments and Analyzing Data: A Model Comparison Perspective. 3rd ed. New York, NY: Routledge.) sugieren usar un test alternativo a F siempre que el resultado de la siguiente fórmula es mayor que 4

\[\frac{n_{max}}{n_{min}}\times\frac{s^2_{max}}{s^2_{min}}\] , donde n es el tamaño del grupo con la varianza más grande (max) o más chica (min) y \(s^2\) es la varianza más alta (max) y más baja (min), respectivamente.

require(psych)
## Loading required package: psych
describeBy(df$satisfaccion,df$condicion)
## 
##  Descriptive statistics by group 
## group: Música en vivo
##    vars n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 6    2 1.41      2       2 1.48   0   4     4    0    -1.58 0.58
## -------------------------------------------------------- 
## group: Música envasada
##    vars n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 6    4 1.41      4       4 1.48   2   6     4    0    -1.58 0.58
## -------------------------------------------------------- 
## group: Sin música
##    vars n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 6    6 1.55      6       6 1.48   4   8     4    0    -1.96 0.63

A partir de estos valores obtenemos:

\[\frac{n_{max}}{n_{min}}\times\frac{s^2_{max}}{s^2_{min}}=\frac{6}{6}\times\frac{1.55^2}{1.41^2}=1.20844...\approx1.2\] El valor d 1.2 está muy por debajo de 4 por lo que en este caso la heterogeneidad de las varianzas no parece ser un problema.

De todas maneras podemos evaluar formalmente este supuesto mediante el test de Bartlett5 La mejor opción cuando la data se distribuye normalmente, pero que entrega muchos “falsos positivos” cuando la data no se distribuye normalmente o el test de Figner-Killen6 Un test no paramétrico robusto a data no normal

# Bartlett Test of Homogeneity of Variances
bartlett.test(satisfaccion~condicion, data=df)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  satisfaccion by condicion
## Bartlett's K-squared = 0.05186, df = 2, p-value = 0.9744
# Figner-Killeen Test of Homogeneity of Variances
fligner.test(satisfaccion~condicion, data=df)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  satisfaccion by condicion
## Fligner-Killeen:med chi-squared = 0.38863, df = 2, p-value =
## 0.8234

En ambos casos, vemos que el valor p es mayor que .05 lo que indica que las diferencias entre las varianzas de los grupos no son estadísticamente significativas.7 Modifica la data df de modo que las varianzas entre los grupos sean distintas y vuelve a aplicar estos proccedimientos

Cuando la data no se distribuye normalmente o las varianzas de los grupos no son homogéneas, una alternativa es hacer una transformación de la data o bien usar un estadístico no alternativo a F, como el test F* de Brown-Forsythe o el test W de Welch (más adelante).

Independencia de las observaciones

ANOVA no es un test robusto a una violación de este supuesto. En un diseño entre-sujetos este supuesto esta bastante asegurado. A menos que estemos frente a un diseño de medidas repetidas, no hay razón para suponer que los resultados del grupo \(a_1\) están correlacionados con los resultados del grupo \(a_2...a_j\). En el caso de un diseño entre-sujetos una violación a este supuesto ocurre cuando los participantes reciben “juntos” el tratamiento (e.g., en la misma sala, o con un mismo profesor) y sus puntajes están correlacionados entre ellos. Este es un diseño mixto que es preferible analizar bajo un enfoque distinto como el análisis multinivel (tendremos un curso sobre esto más adelante).

Ausencia de outliers

Los outliers son casos cuyos resultados son extremadamente distintos en relación a los resultados de su grupo de referencia. Adicionalmente a los supuestos revisados anteriormente Tabachnick and Fidell (2007Tabachnick, B.G., and L.S. Fidell. 2007. Experimental Design Using Anova. Belmont, CA: Thomson Higher Education.) sugieren hacer un screening de los outliers como paso previo a realizar ANOVA ya que su presencia puede afectar sustantivamente los resultados del estudio.

Un gráfico de caja y bigotes o boxplot se puede utilizar para detectar la presencia de outliers.

boxplot(satisfaccion~condicion,data = df)

Modifiquemos la data para ver el efecto de un outlier en el gráfico.

#Imputar el valor "1" en la fila "18", columna "6"
df_outlier<-df
df_outlier[18,6]<-1
#Volver a generar el boxplot. Se puede ver un punto que se aleja 
#de los valores del grupo de manera sustantiva
boxplot(satisfaccion~condicion,data = df_outlier)

Hay a lo menos tres formas de lidiar con este caso.

  1. Eliminar el caso: tal vez el cliente que puso un “1” era esposo de la vocalista de la banda que tocaba en el restaurant, y al no verla encontró que estaba todo malo. Si ese es el caso, entonces podría eliminarse (siempre que los reviewers acepten esta explicación)
  2. Imputar un valor menos extremo: consiste en asignarle un valor que se ubique una unidad más arriba que el siguiente valor más extremo
  3. Hacer una transformación: en el caso que la distribución no sea normal se puede hacer una transformación que tenga el efecto de “acercar” los valores más extremos al centro de la distribución

Alternativas a la violación de los supuestos de ANOVA

Transformación de la data

Si la data no se distribuye normalmente se puede hacer una transformación. Por ejemplo, cuando la VD tiempo de reacción la distribución de los valores va a ser no normal.

Podemos generar una data asimétrica y ver los efectos que una transformación de los valores originales de la distribución. El paquete sn nos permite generar una data de 1000 casos

require(sn)
## Loading required package: sn
## Warning: package 'sn' was built under R version 3.5.2
## Loading required package: stats4
## 
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
## 
##     sd

set.seed(5)
pos.skew<-rsn(n=100, xi=0, omega=100, alpha=5, tau=0, dp=NULL)
pos.skew<-pos.skew[pos.skew>10]
hist(pos.skew,breaks = seq(from = 0, to = 500, by=20))

Como se puede apreciar, la data tiene una distribución asimétrica positiva bastante pronunciada. Hay varios métodos para transformar distribuciones no-normales. Usualmente hay que intentar distintas transformaciones y ver cuál de ellas resulta mejor.

sqrt.pos.skew<-sqrt(pos.skew)
hist(sqrt.pos.skew)

Una muy buena alternativa a estas transformaciones manuales es usar la función transformTukey del paquete rcommpanion8 http://rcompanion.org/handbook/I_12.html. Esta función intenta minimizar valor W del test de Shapiro-Wilk. Específicamente, busca un valor óptimo para lambda que es la potencia a la que hay que elevar los valo,res observados para aproximar una distribución normal. Por ejemplo, tomar la raíz cuadrada de un número es equivalente a elevarlo a 0.5.

require(rcompanion)
## Loading required package: rcompanion
## Warning: package 'rcompanion' was built under R version 3.5.3
hist(transformTukey(pos.skew,
               plotit=FALSE))
## 
##     lambda      W Shapiro.p.value
## 415   0.35 0.9827          0.2833
## 
## if (lambda >  0){TRANS = x ^ lambda} 
## if (lambda == 0){TRANS = log(x)} 
## if (lambda <  0){TRANS = -1 * x ^ lambda}

En este caso el valor para lambda de .35 es similar a tomar la raíz cúbica de la variable. El test de Shapiro-Wilk sugiere que la transformación fue exitosa ya que p > .05.9 Esta simulación pero realizada con 1000 casos no arroja resultados bastante diferentes. El tamaño de la muestra afecta la significancia estadística del test de Shapiro-Wilks

Alternativas al test F para distribuciones no normales

Si la transformación no solocionó el problema de la no-normalidad de la VD, una alternativa es usar el test de Krukal-Wallis que es una versión no paramétrica de ANOVA. La principal diferencia con ANOVA es que el test de Kruskal-Wallis se basa en el ranking de los puntajes individuales. Para ello se ordenan los puntajes desde el más bajo hasta el más alto sin considerar la condición o grupo al que pertenecen. Cuando hay empates se asigna el ranking promedio de los puntajes empatados.

kruskal.test(satisfaccion~condicion,data = df)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  satisfaccion by condicion
## Kruskal-Wallis chi-squared = 10.572, df = 2, p-value = 0.005062

El test de Kruskal-Wallis se basa en una distribución de \(\chi^2\) (que se lee “chi cuadrado”) con a - 1 grados de libertad. En este caso el valor observado de \(\chi^2\) de 10.572 es mayor que el valor crítico de \(\chi^2\). Específicamente, la probabilidad de un valor de \(\chi^2\) de 10.572 es 0.005062 que es menor que el valor alfa nominal (como es usual \(\alpha\) = .05).

Alternativas al test F para varianzas heterogeneas

Cuando existen diferencias extremas entre las varianzas de los grupos el test F es o bien muy liberal (exceso de “falsos positivos”) o muy conservador (exceso de “falsos negativos). En otras palabras, el nivel \(\alpha\) nominal (típicamente .05) va a diferir de \(\alpha\) real. Esto es particularmente problemático cuando los grupos tienen tamaños de muestra desiguales. Cuando la varianza más grande está asociada al grupo más numeroso, el test F va a ser demasiado conservador; cuando la varianza más pequeña está asociada el grupo más numeroso, el test F va a ser excesivamente liberal. En estas circunstancias (varianzas heterogéneas, n desiguales) es preferible usar el test F* de Brown y Forsythe (1974) o el test W de Welch (1951). Aunque las condiciones bajo las cuales un test es preferible a otro son complejas,10 Revisar este link the Designingexperiments.com cualquiera de ellos funciona razonablemente bien. Por eso sólo veremos el caso del test F*

#Requiere instalar el paquete onewaytests
#install.packages("onewaytests")
require(onewaytests)
## Loading required package: onewaytests
## Warning: package 'onewaytests' was built under R version 3.5.3
## 
## Attaching package: 'onewaytests'
## The following object is masked from 'package:psych':
## 
##     describe
bf.test(satisfaccion~condicion,data = df)
## 
##   Brown-Forsythe Test 
## --------------------------------------------------------- 
##   data : satisfaccion and condicion 
## 
##   statistic  : 11.25 
##   num df     : 2 
##   denom df   : 14.88372 
##   p.value    : 0.001055532 
## 
##   Result     : Difference is statistically significant. 
## ---------------------------------------------------------

Aunque el denominador de F* es idéntico al valor de F que obtuvimos con la función aov es importante saber que esto sólo ocurre cuando los grupos son iguales. Por otro lado, independientemente si los grupos son iguales o desiguales, los grados de libertad intra calculados para F* es 11.12, que es menor que los grados de libertad originales (i.e., 15). El valor crítico para F(2,11.12) es mayor que el valor crítico de F(2,15). Simultáneamente la probabilidad de F cambia según los grados de libertad del denominador, de modo que el valor de 5.388 es “más probable” cuando los grados de libertad disminuyen (que es lo que hace el test F*).

qf(.95,2,11.12288)
## [1] 3.969262
qf(.95,2,15)
## [1] 3.68232
1-pf(5.388,2,15)
## [1] 0.01724122
1-pf(5.388,2,11.12288)
## [1] 0.02310992

Por lo tanto, para n iguales el test F* es algo más conservador que F. La moraleja es que sólo hay que usar un test alternativo cuando tenemos evidencia que las varianzas son heterogéneas.