Kolmogorov-Smirnov en R (Lilliefors) para testear la normalidad

El test de Kolmogorov-Smirnov (con la corrección Lilliefors) se utiliza para contrastar si un conjunto de datos se ajustan o no a una distribución normal. Es similar en este caso al test de Shapiro Wilk, pero la principal diferencia con éste radica en el número de muestras. Mientras que el test de Shapiro Wilk se puede utilizar con hasta 50 datos, el test de Kolmogorov Smirnov es recomendable utilizarlo con más de 50 observaciones. Antes de realizar el test de Kolmogorov-Smirnov en R (con la corrección Lillefors), es necesario conocer cuál es el contraste de hipótesis que se va a realizar.

Quiero leer...

Contraste de hipótesis

  • H0: los datos proceden de una distribución normal
  • H1: los datos no proceden de una distribución normal
Aclaración sobre el papel del test Kolmogorov-Smirnov para testear a normalidad
A pesar de que continuamente se alude al test Kolmogorov-Smirnov como un test válido para contrastar la normalidad, en verdad esto no es del todo cierto. El Kolmogorov-Smirnov asume conocida la media y varianza poblacional, lo que, en la mayoría de los casos, es imposible conocer. Esto hace que el test sea muy conservador y poco potente. Para solventar este problema, se desarrolló una modificación del Kolmogorov-Smirnov conocida como test Lilliefors. El test Lilliefors asume que la media y y varianza son desconocidas, estando especialmente desarrollado para testear la normalidad.

Cómo hacer un test de Kolmogorov-Smirnov en R Commander

El test de Kolmogorov-Smirnov se hace muy fácil introduciendo y ejecutando el siguiente comando:

Función ks.test() para realizar un test de Kolmogorov-Smirnov
[sourcecode lang=»r»] ks.test(Nombre_Datos$Nombre_Variable, pnorm, mean(Nombre_Datos$Nombre_Variable), sd(Nombre_Datos$Nombre_Variable))
[/sourcecode]

Hay que tener en cuenta que para poder ejecutar un test Kolmogorov-Smirnov en R es necesario conocer la media y desviación estándar de los datos. Pero eso ya queda reflejado en el código previo, con los argumentos mean y sd.

A continuación mostramos gráficamente un ejemplo ejecutándolo en R Commander. Somos conscientes que el ejemplo presenta n=12, cuando es óptimo su uso con n mayores de 50. Pero solo es un ejemplo para poder ilustrar su funcionamiento. Permítanos la licencia.

Cómo hacer un test de Kolmogorov-Smirnov en R Commander

  • Paso 1. Vemos los datos introducidos dando a View data set. Copiamos y pegamos el código. Ponemos el nombre de la tabla de datos donde se indica.
  • Paso 2. Ponemos el nombre la variable donde se indica en la imagen.
  • Paso 3. Ejecutamos y vemos el resultado. Como se puede observar, el p-valor es mayor de 0.05, por lo que aceptamos la hipótesis nula de normalidad de los datos. Aunque lo estrictamente correcto sería utilizar la corrección Lilliefors para contrastar la normalidad, como se describe a continuación.
Ejecución de la función ks.test() para realizar un test de Kolmogorov-Smirnov
[sourcecode lang=»r»] ks.test(Dataset$VAR1,pnorm,mean(Dataset$VAR1),sd(Dataset$VAR1))

One-sample Kolmogorov-Smirnov test

data: Dataset$VAR1
D = 0.11087, p-value = 0.9946
alternative hypothesis: two-sided
[/sourcecode]

Cómo hacer un test Lilliefors en R Commander

En esta ocasión, vamos a prescindir de la figura, centrándonos simplemente en los comandos. Su ejecución será idéntica a la mostrada en la figura previa. Los contrastes de hipótesis son idénticos a los descritos previamente.

Paquete necesario: {nortest}

En este caso, para ejecutar un test Lilliefors es necesario el paquete nortest. Hay que instalarlo y cargarlo.

Realización del test Lilliefors

Es más sencillo incluso que el test Kolmogorov-Smirnov. Sólo hay que incluir los datos que queremos sean contrastados. Como anteriormente, Dataset$VAR1 serían nuestros datos.

Función lillie.test() para realizar el test Lilliefors
[sourcecode lang=»r»] lillie.test(Dataset$VAR1)
[/sourcecode]

Dando como resultado lo siguiente:

Ejecución de lillie.test()
[sourcecode lang=»r»] lillie.test(Dataset$VAR1)

Lilliefors (Kolmogorov-Smirnov) normality test

data: Dataset$VAR1
D = 0.23501, p-value = 0.1618
[/sourcecode]

Como podemos ver, el p-valor es 0.16, por lo que seguimos aceptando la hipótesis nula de normalidad.

¿Test de Lilliefors o Kolmogorov-Smirnov en R para la normalidad?

Sin duda, el test Lilliefors es el contraste de hipótesis que tenemos que ejecutar para contrastar la normalidad.

Referencias

6 comentarios en «Kolmogorov-Smirnov en R (Lilliefors) para testear la normalidad»

  1. Para probar la normalidad en R Commander se utiliza directamente desde los menús el test de Shapiro-Wilks que es más potente.

    Si por alguna razón se desea utilizar el estadístico de Kolmogorov y Smirnov para contrastar normalidad, se debe utilizar la distribución de Lilliefors, ya que el test original asume conocida la media y varianza poblacional.

    Al tener que estimar la media y varianza muestral se obtiene distancia más cortas entre frecuencias teóricas y frecuencias esperadas que las calculadas por Kolmogorov y por tanto se obtiene un test muy conservador y poco potente.

    El test de Lilliefors por el contrario contrasta la normalidad de una variable utilizando el estadístico de Kolmogorov-Smirnov pero asumiendo media y varianza desconocidas. Está disponible en el paquete nortest:

    http://search.r-project.org/library/nortest/html/lillie.test.html

    Responder
    • Hola José. Lilliefors era el motivo del siguiente post! Veo que te has adelantado! Pero gracias enormes por el comentario tan constructivo!

      Responder
    • El objetivo de Kolmogorov-Smirnov no es testear la normalidad de una muestra, sino determinar la bondad de ajuste. Por lo tanto Luis, no se podría decir que está anticuada, ya que su contraste de hipótesis no va asociado a buscar normalidad. La modificada de K-S, Lilliefors es la correcta para normalidad. Por tanto, ninguna de las dos está anticuada. Cada una cumple su función.

      Responder
  2. pregunta, entonces si la variable definitivamente no es normal porque presenta una asimetría negativa, y tanto K-s, Lilliefors son menores que 0.05, pero la correlación de spearman me da positiva, hay o no correlación con respecto a otra variable independiente, gracias

    Responder

Deja un comentario