Prueba de normalidad

Author

Ángel Colli, Beatriz Lavadores y Georgina Perez.

¿Qué es una prueba de normalidad? 

Las pruebas de normalidad son métodos estadísticos utilizados para determinar si una muestra de datos sigue una distribución normal. Estas pruebas son relevantes en el análisis estadístico, ya que muchos procedimientos estadísticos se basan en la suposición de normalidad de los datos (Flores-Tapia y Flores-Ceballos, 2021).   

Tipos de pruebas de normalidad 

Gráficas

  • Histograma: Permite comparar visualmente la forma de los datos con una curva normal. 
  • Gráfico Q-Q (Quantile-Quantile): Compara los cuantiles de los datos con los cuantiles de una distribución normal. Si los puntos caen aproximadamente sobre una línea recta, los datos se consideran normales 

Pruebas de hipótesis 

  • Shapiro-Wilk. Prueba para muestras pequeñas que calcula una estadístico W que mide qué tan bien se ajustan los datos a una distribución normal. 
  • Kolmogorov-Smirnov: Compara la función de distribución empírica de la muestra con la distribución normal teórica.

  • Anderson-Darling Evalúa qué tan compatibles son los datos observados con una distribución normal teórica, dando más peso a las colas de la distribución 

  • Prueba de D’Agostino K²: Evalúa la asimetría y curtosis de los datos para determinar desviaciones de la normalidad  

Nota: Estudiar la normalidad permite verificar si los supuestos del método estadístico que queremos utilizar son adecuados. Ignorarla puede conducir a inferencias poco confiables, como p-valores o intervalos de confianza que podrían no comportarse como el método estadístico afirma que deberían hacerlo. 

Implementación en R-Studio 

1-Prueba de Shapiro-Wilk 

La prueba de Shapiro-Wilk es una prueba de hipótesis que permite determinar si un conjunto de datos es compatible con una distribución normal. Funciona mejor cuando las muestras son pequeñas.

Las hipótesis que se plantean son: 

\(H_0\):Los datos siguen una distribución normal 

\(H_1\):Los datos no siguen una distribución normal 

Para tomar una decisión utilizaremos un nivel de significancia de \(\alpha=0.05\)

  • Si \(p>0.05\), no se rechaza \(H_0\). No existe evidencia suficiente para afirmar que los datos no siguen una distribución normal. 
  • Si \(p\leq0.05\), se rechaza \(H_0\). Existe evidencia estadísticamente significativa de que los datos no siguen una distribución normal. 

En R podemos realizar esta prueba mediante la función shapiro.test().

Ejemplo sencillo

Primero creamos un vector que contiene los datos que queremos analizar: 

datos<-c(5, 3, 2, 6, 9, 10, 21, 2, 5, 10, 12, 11, 10)

Después aplicamos la prueba de Shapiro-Wilk. 

shapiro.test(datos)

El resultado aparece en el siguiente formato:


    Shapiro-Wilk normality test

data:  datos
W = 0.89306, p-value = 0.1074

En este caso, el valor obtenido es: \(p=0.1074\) . Como: \(0.1074>0.050\) no se rechaza \(H_0\). Por lo tanto, no existe evidencia suficiente para afirmar que estos datos se alejan de una distribución normal. 

2-Prueba de Lilliefors 

Adaptación de Kolmogorov-Smirnov 

Para muestras mayores utilizaremos la prueba de Lilliefors, una adaptación de la prueba de Kolmogorov-Smirnov para evaluar la normalidad cuando los parámetros de la distribución normal son estimados a partir de los datos.  Se aplica ampliamente en muestras grandes.

Las hipótesis son: 

\(H_0\): Los datos siguen una distribución normal. 

\(H_1\): Los datos no siguen una distribución normal. 

La regla de decisión también será: 

  • Si \(p>0.05\), no se rechaza \(H_0\)
  • Si \(p\leq0.05\), se rechaza \(H_0\)

La función lillie.test() que se encuentra en el paquete nortest 

Si todavía no tenemos instalado el paquete, podemos instalarlo mediante: 

# install.packages("nortest")

Después cargamos el paquete: 

library(nortest)

Ejemplo sencillo 

Para practicar esta prueba utilizaremos un conjunto de datos con más observaciones. 

Primero creamos un vector: 

datos_mayores <-
  c(12, 15, 14, 16, 13, 17, 18, 15, 14, 16, 
    13, 12, 15, 17, 19, 16, 14, 15, 13, 18,
    16,15, 14, 17, 13, 16, 15, 14, 18, 17, 
    15, 16, 14, 13, 17, 18, 15, 16, 14, 15,
    13, 17, 16, 15, 14, 18, 17, 16, 15, 14,
    13, 16, 17, 15, 14, 18, 16, 15, 17, 14 )

Podemos verificar el tamaño de la muestra: 

length(datos_mayores)
[1] 60

Ahora aplicamos la prueba de Lilliefors: 

lillie.test(datos_mayores)

El resultado aparece en el siguiente formato:


    Lilliefors (Kolmogorov-Smirnov) normality test

data:  datos_mayores
D = 0.12845, p-value = 0.01525

En esta prueba observamos el estadístico D y, principalmente, el p-value para tomar una decisión sobre la normalidad. 

Interpretación 

La decisión se toma de la misma manera: 

  • Si \(p>0.05\), no se rechaza \(H_0\)
  • Si \(p\leq0.05\), se rechaza \(H_0\)

En este caso, dado que \(p=0.01525\), entonces \(p<0.05\). Por lo que se rechaza \(H_0\) y se concluye que por \(H_1\), los datos No siguen una distribución normal.

Práctica. Normalidad de los tiempos netos de carrera 

Ahora aplicaremos las pruebas de normalidad a una situación real utilizando la base de datos TenMileRace

En esta actividad analizaremos la variable net, que corresponde al tiempo neto de carrera, y compararemos su comportamiento entre hombres y mujeres

Primero cargamos la base de datos: 

library(mosaicData)
data(TenMileRace)

Podemos observar las primeras observaciones de la base: 

head(TenMileRace)
  state time  net age sex
1    VA 6060 5978  12   M
2    MD 4515 4457  13   M
3    VA 5026 4928  13   M
4    MD 4229 4229  14   M
5    MD 5293 5076  14   M
6    VA 6234 5968  14   M

Tiempo neto de los hombres (Intervalos)

Primero seleccionaremos únicamente a los hombres. 

hombres <- subset(TenMileRace, sex == "M")

Nota: subset() permite seleccionar las observaciones que cumplen una condición. 

Ahora extraemos la variable net: 

datos_hombres <- hombres$net

Verificamos el tamaño de la muestra: 

length(datos_hombres)
[1] 4311

Al ser un número de datos muy grande, se decidió dividir en intervalos según rangos de edad.

  • Intervalo 1 (10-19 años)

  • Intervalo 2 (20-29 años)

  • Intervalo 3 (30-49 años)

  • Intervalo 4: (50-69 años)

  • Intervalo 5 (70+ años)

Ejemplo

Para analizar la información de los datos en el Intervalo 1.

Definimos:

hombres_10_19 <- subset(TenMileRace, sex == "M" & age >= 10 & age <= 19 )
datos_hombres_10_19 <- hombres_10_19$net 

Comprobamos el tamaño del intervalo para elegir la prueba a realizar.

length(datos_hombres_10_19) 
[1] 40

En este caso, al ser una muestra menor a 50, aplicamos shapiro.test()

shapiro.test(datos_hombres_10_19)

    Shapiro-Wilk normality test

data:  datos_hombres_10_19
W = 0.95146, p-value = 0.08514

El valor obtenido es: \(p=0.08514\) . Como: \(0.08514>0.050\) no se rechaza \(H_0\)

Por lo tanto, no existe evidencia suficiente para afirmar que estos datos se distribuyen normalmente.

Actividad 

  • Determina si los datos dentro del intervalo (30-49 años) tienen una distribución normal.

  • ¿Qué valor de \(p\)-value obtuviste?

Tiempo neto de los hombres (General)

Una vez hemos analizado cada intervalo por separado. Podemos optar por un panorama más general de los datos.

Actividad 

  • Aplica la prueba de normalidad que corresponde al tamaño de la muestra.

  • ¿Qué valor de \(p\)-value obtuviste? 

  • ¿Se rechaza o no se rechaza \(H_0\)? 

  • ¿Qué puedes concluir sobre la normalidad de los tiempos netos de los hombres? 

Referencias

Flores Tapia, C. E., & Flores Cevallos, K. L. (2021). Pruebas para comprobar la normalidad de datos en procesos productivos: Anderson-Darling, Ryan-Joiner, Shapiro-Wilk y Kolmogórov-Smirnov. Societas. Revista de Ciencias Sociales y Humanísticas, 23(2), 83–106.