La prueba de Kolmogorov-Smirnov evalúa la hipótesis de que una muestra aleatoria (de datos numéricos) procede de una distribución continua completamente especificada sin referencia a los datos.
Este es el gráfico de la función de distribución acumulativa (FDC) de dicha distribución.
Una muestra puede ser descrita completamente por su función de distribución empírica (acumulativa), o ECDF. Representa la fracción de datos inferior o igual a los valores horizontales. Así, con una muestra aleatoria de $n$ valores, cuando escaneamos de izquierda a derecha salta hacia arriba en $1/n$ cada vez que cruzamos un valor de datos.
La siguiente figura muestra la ECDF de una muestra de $n=10$ valores tomados de esta distribución. Los símbolos de puntos localizan los datos. Las líneas se dibujan para proporcionar una conexión visual entre los puntos similar a la gráfica de la FCD continua.
La prueba K-S compara la FCD con la FDCE utilizando la mayor vertical diferencia vertical entre sus gráficos. La cantidad (un número positivo) es el Estadística de la prueba de Kolmogorov-Smirnov.
Podemos visualizar el estadístico de la prueba KS localizando el punto de datos situado más arriba o más abajo de la FCD. Aquí está resaltado en rojo. La estadística de prueba es la distancia vertical entre el punto extremo y el valor de la FCD de referencia. Se dibujan como referencia dos curvas límite, situadas a esta distancia por encima y por debajo de la FCD. Así, la ECDF se encuentra entre estas curvas y apenas toca al menos una de ellas.
Para evaluar la importancia de la estadística de la prueba KS, comparamos como siempre --a los estadísticos de la prueba KS que tenderían a producirse en muestras perfectamente aleatorias de la distribución hipotética. Una forma de visualizarlas es graficar las ECDF de muchas de esas muestras (independientes) de forma que se indique qué su Las estadísticas del KS son. Esto forma la "distribución nula" del estadístico KS.
La ECDF de cada uno de $200$ se muestra junto con un único marcador rojo situado donde más se aleja de la FCD hipotetizada. En este caso es evidente que la muestra original (en azul) se aleja menos de la FCD que la mayoría de las muestras aleatorias. (El 73% de las muestras aleatorias se alejan más de la FCD que la muestra azul. Visualmente, esto significa que el 73% de los puntos rojos quedan fuera de la región delimitada por las dos curvas rojas). Por lo tanto, no tenemos (sobre esta base) ninguna prueba para concluir que nuestra muestra (azul) no fue generada por esta FCD. Es decir, la diferencia "no es estadísticamente significativa".
De forma más abstracta, podemos trazar la distribución de los estadísticos KS en este gran conjunto de muestras aleatorias. Esto se denomina distribución nula de la estadística de la prueba. Aquí está:
La línea azul vertical localiza el estadístico de la prueba KS para la muestra original. El 27% de las estadísticas aleatorias de la prueba KS fueron menores y el 73% de las estadísticas aleatorias fueron mayores. Si se examina, parece que el estadístico KS para un conjunto de datos (de este tamaño, para esta FCD hipotética) tendría que superar el 0,4 o así antes de concluir que es extremadamente grande (y por lo tanto constituye una prueba significativa de que la FCD hipotética es incorrecta).
Aunque se puede decir mucho más -en particular, sobre por qué la prueba KS funciona de la misma manera, y produce la misma distribución nula, para cualquier FCD continua- esto es suficiente para entender la prueba y utilizarla junto con los gráficos de probabilidad para evaluar las distribuciones de datos.
En respuesta a las peticiones, aquí está lo esencial R
código que he utilizado para los cálculos y los gráficos. Utiliza la distribución normal estándar ( pnorm
) para la referencia. La línea comentada establece que mis cálculos coinciden con los del ks.test
función. He tenido que modificar su código para extraer el punto de datos específico que contribuye a la estadística KS.
ecdf.ks <- function(x, f=pnorm, col2="#00000010", accent="#d02020", cex=0.6,
limits=FALSE, ...) {
obj <- ecdf(x)
x <- sort(x)
n <- length(x)
y <- f(x) - (0:(n - 1))/n
p <- pmax(y, 1/n - y)
dp <- max(p)
i <- which(p >= dp)[1]
q <- ifelse(f(x[i]) > (i-1)/n, (i-1)/n, i/n)
# if (dp != ks.test(x, f)$statistic) stop("Incorrect.")
plot(obj, col=col2, cex=cex, ...)
points(x[i], q, col=accent, pch=19, cex=cex)
if (limits) {
curve(pmin(1, f(x)+dp), add=TRUE, col=accent)
curve(pmax(0, f(x)-dp), add=TRUE, col=accent)
}
c(i, dp)
}