Puedes seguir el tutorial por vídeo en YouTube

1 Introducción al diseño de experimentos.

2 Elementos de inferencia estadística.

3 Pruebas paramétricas y procedimientos análogos no-paramétricos.

4 Supuestos T-test: Normalidad y homocedasticidad (equivalencia de las varianzas).

5 Cómo comprobar la homocedasticidad o equivalencia de las varianzas.

El supuesto de homogeneidad de varianzas, también conocido como supuesto de homocedasticidad, considera que la varianza es constante (no varía) en los diferentes niveles de un factor, es decir, entre diferentes grupos.

La igualdad de las varianzas puede ser comprobada mediante inspección visual (gráficos de cajas y bigotes) o mediante pruebas de significación.

A la hora de realizar contrastes de hipótesis o intervalos de confianza cuando los tamaños de cada grupo son muy distintos ocurre que:

    Si los grupos con tamaños muestrales pequeños son los que tienen mayor varianza, la probabilidad real de cometer un error de tipo I en las pruebas de hipótesis será menor de lo que se obtiene al hacer el test. En los intervalos, los límites superior e inferior reales son menores que los que se obtienen. La inferencia será por lo general más conservadora.
    Si por el contrario, son los grupos con tamaños muestrales grandes los que tienen mayor varianza entonces se tendrá el efecto contrario y las pruebas serán más liberales. Es decir, la probabilidad real de cometer un error de tipo I es mayor que la devuelta por el test y los intervalos de confianza verdaderos serán más amplios que los calculados.
  

Existen diferentes test que permiten evaluar la distribución de la varianza. La hipótesis nula para todas las pruebas es que las varianzas de las poblaciones son iguales. Si la prueba es significativa, la hipótesis nula se rechaza y podemos concluir que las varianzas son significativamente diferentes. Cada test utiliza un estadístico de centralidad distinto.

    Los test que trabajan con la **media de la varianza** son los más potentes cuando las poblaciones que se comparan se distribuyen de forma normal. 
    La utilización de la **media truncada** mejora el test cuando los datos siguen una distribución de Cauchy (colas grandes).
    La **mediana** consigue mejorarlo cuando los datos siguen una (distribución asimétrica). 
    Si no se puede alcanzar cierta seguridad de que las poblaciones que se comparan son de tipo normal, es recomendable recurrir a test que comparen la mediana de la varianza. 
    
    Los gráficos de Cajas y bigotes nos dan una idea de la distribución de los datos. En ellos podemos apreciar la forma, tendencia central y variabilidad de las muestras.

5.1 Ejemplo para la comprobación de la homocedasticidad. Datos en vectores.

Generamos un par de vectores.

set.seed(123)
Datos3 <- rnorm(n = 15, mean = 8, sd = 1)
Datos4 <- rnorm(n = 15, mean = 11, sd = 1)

Comprobamos sus varianzas.

var(Datos3)
## [1] 0.7145987
var(Datos4)
## [1] 1.193712

Sus varianzas no son exactamente iguales, pero tendremos que evaluarlas para deteriminar si son significativamente distintas o no.

5.1.1 Método visual. Gráfico de Cajas y bigotes (Boxplot).

boxplot(Datos3, Datos4)

La amplitud de las cajas nos dan una idea de las varianzas de los datos de cada vector.

5.1.2 F-test

El F-test es muy potente y detecta pequeñas diferencias, pero por contra es muy sensible a violaciones de la normalidad de las poblaciones. Si hay dudas sobre la normalidad, lo mejor es usar Levene’s test o Fligner-Killeen test, los cuales son menos sensibles a esta asunción.

Nos aseguramos de que los datos sigan una distribución normal.

shapiro.test(Datos3)
## 
##  Shapiro-Wilk normality test
## 
## data:  Datos3
## W = 0.94967, p-value = 0.5192
shapiro.test(Datos4)
## 
##  Shapiro-Wilk normality test
## 
## data:  Datos4
## W = 0.97293, p-value = 0.8988

Según el test de Shapiro Wilk, los datos de ambos vectores siguen una distribución normal.

Procedemos ahora con F-test con la función var.test().

Ftest <- var.test(Datos3, Datos4) ; Ftest
## 
##  F test to compare two variances
## 
## data:  Datos3 and Datos4
## F = 0.59864, num df = 14, denom df = 14, p-value = 0.3483
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.2009797 1.7830887
## sample estimates:
## ratio of variances 
##          0.5986357

El p-value del F-test es 0.3482711, el cual es mayor que el nivel de significación 0.05. Podemos concluir entonces que no hay diferencias significativas entre las dos varianzas.

5.1.3 Test de Bartlett.

Se el Test de Bartlett también se usa cuando estamos seguros de que los datos vienen de una distribución normal, si esto no está muy claro, mejor usar el test de Levene (aunque sea un poco menos sensible que el de Bartlett).
No es necesario que el tamaño de las poblaciones sea el mismo, para realizar este test. La función bartlett.test()asume que los datos están un un solo vector, así que hay que concatenar los datos usando c() y ayudarse de otro vector con nombres, para diferenciar los datos de un vector de los del otro.

Se puede hacer por partes:

Datos <- c(Datos3, Datos4)
Grupos <- rep(c("Gr1", "Gr2"), each = 15)
bartlett.test(Datos, Grupos, center = median)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  Datos and Grupos
## Bartlett's K-squared = 0.88009, df = 1, p-value = 0.3482

O se puede hacer todo directamente:

bartlett.test(c(Datos3, Datos4), rep(c("Gr1", "Gr2"), each = 15))
## 
##  Bartlett test of homogeneity of variances
## 
## data:  c(Datos3, Datos4) and rep(c("Gr1", "Gr2"), each = 15)
## Bartlett's K-squared = 0.88009, df = 1, p-value = 0.3482

5.1.4 Test de Levene.

El Test de Levene se puede encontrar en el paquete car, función leveneTest(). Se caracteriza además de por poder comparar 2 o más poblaciones, por permitir elegir entre diferentes estadísticos de centralidad (mediana (por defecto), media, media truncada). Esto es importante a la hora de contrastar la homocedasticidad dependiendo de si los grupos se distribuyen de forma normal (media) o no (mediana).
El punto débil de este test está en que pequeñas diferencias en las varianzas de grupos grandes, puede dar falsos positivos.

if (!require(car)) {install.packages("car")}
library(car)

La función leveneTest()asume que los datos están un un solo vector, así que hay que concatenar los datos usando c(), al igual que hicimos con bartlett.test().

# "median" es la opción por defecto. Apropiada para cuando los datos no se distribuyen según la normal.
leveneTest(c(Datos3, Datos4), rep(c("Gr1", "Gr2"), each = 15), center = "median") 
## Warning in leveneTest.default(c(Datos3, Datos4), rep(c("Gr1", "Gr2"), each
## = 15), : rep(c("Gr1", "Gr2"), each = 15) coerced to factor.
## Levene's Test for Homogeneity of Variance (center = "median")
##       Df F value Pr(>F)
## group  1   1.331 0.2584
##       28
# "mean" es mejor opción cuando los datos sí se distribuyen según la normal.
leveneTest(c(Datos3, Datos4), rep(c("Gr1", "Gr2"), each = 15), center = "mean")
## Warning in leveneTest.default(c(Datos3, Datos4), rep(c("Gr1", "Gr2"), each
## = 15), : rep(c("Gr1", "Gr2"), each = 15) coerced to factor.
## Levene's Test for Homogeneity of Variance (center = "mean")
##       Df F value Pr(>F)
## group  1  1.6533  0.209
##       28

El test no encuentra diferencias significativas entre las varianzas de los dos grupos.

5.1.5 Test de Fligner-Killeen.

El Test de Fligner-Killeen es un de los más robusto en los casos en que los datos se desvían de la normal.

Para realizar este test a partir de dos vectores es necesario instalar el paquete fBasics.

if (!require(fBasics)) {install.packages("fBasics")}
library(fBasics)

Eligiendo el método fligner en la función varianceTest(), podremos realizar el test.

varianceTest(Datos3, Datos4, method = "fligner")
## 
## Title:
##  Fligner-Killeen Test for Homogeneity of Variances
## 
## Test Results:
##   STATISTIC:
##     FK:med chi-squared: 0.9755
##   P VALUE:
##     0.3233 
## 
## Description:
##  Wed Nov 22 12:24:00 2017

5.1.6 Tests del paquete fBasics.

Por último, señalar que ya que hemos instalado el paquete fBasics, podemos hacer tres de los tests de varianza que hemos visto, a partir de dos vectores, sin necesidad de concatenar los datos.

varianceTest(Datos3, Datos4, method = "varf") # F test
## 
## Title:
##  F Test of Variances
## 
## Test Results:
##   PARAMETER:
##     Hypothesized Ratio: 1
##     Numerator   df: 14
##     Denumerator df: 14
##   SAMPLE ESTIMATES:
##     Ratio of Variances: 0.5986
##   STATISTIC:
##     F: 0.5986
##   P VALUE:
##     Alternative Two-Sided: 0.3483 
##     Alternative      Less: 0.1741 
##     Alternative   Greater: 0.8259 
##   CONFIDENCE INTERVAL:
##     Two-Sided: 0.201, 1.7831
##          Less: 0, 1.4868
##       Greater: 0.241, Inf
## 
## Description:
##  Wed Nov 22 12:24:00 2017
varianceTest(Datos3, Datos4, method = "bartlett") # Bartlett's test
## 
## Title:
##  Bartlett Test for Homogeneity of Variances
## 
## Test Results:
##   STATISTIC:
##     Bartlett's Chi-squared: 0.8801
##   P VALUE:
##     0.3482 
## 
## Description:
##  Wed Nov 22 12:24:01 2017
varianceTest(Datos3, Datos4, method = "fligner") # Fligner-Killeen test
## 
## Title:
##  Fligner-Killeen Test for Homogeneity of Variances
## 
## Test Results:
##   STATISTIC:
##     FK:med chi-squared: 0.9755
##   P VALUE:
##     0.3233 
## 
## Description:
##  Wed Nov 22 12:24:01 2017

5.2 Ejemplo para la comprobación de la homocedasticidad. Datos en data frame.

Para ejecutar las mismas pruebas, a partir de datos de un data frame, hay que utilizar otras funciones.

Vamos a usar los datos de InsectSprays para hacer los ejemplos, pero antes vamos a ver por encima qué datos contiene.

if (!require(psych)) {install.packages("psych")}
library(psych)
# ?InsectSprays # Para obtener más información sobre estos datos.
str(InsectSprays)
## 'data.frame':    72 obs. of  2 variables:
##  $ count: num  10 7 20 14 14 12 10 23 17 20 ...
##  $ spray: Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(InsectSprays) #Los tres grupos tienen el mismo número de datos
##      count       spray 
##  Min.   : 0.00   A:12  
##  1st Qu.: 3.00   B:12  
##  Median : 7.00   C:12  
##  Mean   : 9.50   D:12  
##  3rd Qu.:14.25   E:12  
##  Max.   :26.00   F:12
describeBy(InsectSprays$count, InsectSprays$spray) # Paquete "psych"
## 
##  Descriptive statistics by group 
## group: A
##    vars  n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 12 14.5 4.72     14    14.4 5.19   7  23    16 0.27    -1.13 1.36
## -------------------------------------------------------- 
## group: B
##    vars  n  mean   sd median trimmed  mad min max range  skew kurtosis
## X1    1 12 15.33 4.27   16.5    15.6 4.45   7  21    14 -0.35    -1.04
##      se
## X1 1.23
## -------------------------------------------------------- 
## group: C
##    vars  n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 12 2.08 1.98    1.5     1.8 1.48   0   7     7 1.13     0.52 0.57
## -------------------------------------------------------- 
## group: D
##    vars  n mean  sd median trimmed  mad min max range skew kurtosis   se
## X1    1 12 4.92 2.5      5     4.5 1.48   2  12    10 1.68     2.56 0.72
## -------------------------------------------------------- 
## group: E
##    vars  n mean   sd median trimmed  mad min max range skew kurtosis  se
## X1    1 12  3.5 1.73      3     3.5 2.22   1   6     5 0.05    -1.41 0.5
## -------------------------------------------------------- 
## group: F
##    vars  n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 12 16.67 6.21     15    16.5 6.67   9  26    17 0.39    -1.56 1.79

Como estamos viendo los requisitos previos que se deben cumplir para hacer un T-test de dos muestras, vamos a seleccionar sólo dos grupos de la variable “spray”, el del insecticida “A” y el del insecticida “B”.

InsectSprays2 <- subset(InsectSprays, spray == "A" | spray == "B") ; InsectSprays2
##    count spray
## 1     10     A
## 2      7     A
## 3     20     A
## 4     14     A
## 5     14     A
## 6     12     A
## 7     10     A
## 8     23     A
## 9     17     A
## 10    20     A
## 11    14     A
## 12    13     A
## 13    11     B
## 14    17     B
## 15    21     B
## 16    11     B
## 17    16     B
## 18    14     B
## 19    17     B
## 20    17     B
## 21    19     B
## 22    21     B
## 23     7     B
## 24    13     B
InsectSprays2$spray <- factor(InsectSprays2$spray) # Elimino los niveles residuales tras haber hecho el subset.

5.2.1 Método visual. Gráfico de Cajas y bigotes (Boxplot).

plot(count ~ spray, data = InsectSprays2)

5.2.2 F test

var.test(count ~ spray, data = InsectSprays2)
## 
##  F test to compare two variances
## 
## data:  count by spray
## F = 1.2209, num df = 11, denom df = 11, p-value = 0.7464
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.3514784 4.2411442
## sample estimates:
## ratio of variances 
##            1.22093

5.2.3 Test de Bartlett.

bartlett.test(count ~ spray, data = InsectSprays2)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  count by spray
## Bartlett's K-squared = 0.10464, df = 1, p-value = 0.7463

5.2.4 Test de Levene.

Para realizar este test a partir de dos vectores es necesario instalar el paquete car.

if (!require(car)) {install.packages("car")}
library(car)
leveneTest(count ~ spray, data = InsectSprays2)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  0.0199 0.8892
##       22

5.2.5 Test de Fligner-Killeen.

fligner.test(count ~ spray, data = InsectSprays2)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  count by spray
## Fligner-Killeen:med chi-squared = 0.010934, df = 1, p-value =
## 0.9167

5.3 Conclusión

Si se tiene seguridad de que las muestras a comparar proceden de poblaciones que siguen una distribución normal, son recomendables el F-test y el test de Bartlet, pareciendo ser el segundo más recomendable ya que el primero es muy potente pero extremadamente sensible a desviaciones de la normal. Si no se tiene la seguridad de que las poblaciones a comparar son normales, se recomiendan el test de Leven utilizando la mediana o el test no paramétrico Fligner-Killeen que también se basa en la mediana.