En los capítulos anteriores, implementamos la prueba \(\chi^2\) para determinar si un conjunto de datos se ajustaba a una distribución continua. Sin embargo, existe una prueba más adecuada para este propósito: la prueba Kolmogorov-Smirnov.
Supongamos que tenemos una serie de observaciones \(X_1,\dots,X_n\), que siguen una distribución continua \(F\). También asumimos que los valores observados \(x_1,\dots,x_n\) son todos diferentes.
Definición 15.1 Dados los valores observados \(x_1,\dots,x_n\) de la muestra aleatoria \(X_1,\dots, X_n\), para cada \(x\) definimos \(F_n(x)\) como la proporción de valores observados en la muestra que son menores o iguales a \(x\). Es decir, si hay \(k\) valores observados menores o iguales a \(x\), \[
F_n(x) = \frac{k}{n}.
\]
La función \(F_n(x)\) se conoce como la función de distribución de la muestra (empírica). \(F_n\) es una distribución escalonada con saltos de magnitud \(\dfrac 1n\) en los valores \(x_1,\dots,x_n\). Se puede expresar como \[F_n(x) = \begin{cases}
0 & \text{si } x<X_{(1)}\\
\displaystyle \dfrac 1n \sum_{i=1}^n 1_{\{x_i\leq x\}} & \text{si } X_{(1)}\leq x<X_{(n)}\\
1 & \text{si} X_{(n)}\geq x
\end{cases}
\]
Dado que \(\{x_i\}_{i=1}^n\) son independientes, \(\{1_{{x_i\leq x}}\}_{i=1}^n\) también son independientes. Por lo tanto, por la ley de los grandes números
En los capítulos anteriores, determinamos que los parámetros \(\mu =3.912\) y \(\sigma ^{2} = 0.25\) se ajustaban bien a los log-valores de nuestros datos. Ahora, podemos verificar este ajuste con la siguiente gráfica:
Warning in stat_function(data = data.frame(x = c(3, 5)), fun = pnorm, aes(color = "F(x)"), : All aesthetics have length 1, but the data has 2 rows.
ℹ Did you mean to use `annotate()`?
La prueba de Kolmogorov-Smirnov se basa en el siguiente teorema, conocido como el Lema de Glivenko-Cantelli.
Lema 15.1 (Glivenko-Cantelli) Sea \(F_n(x)\) la distribución empírica de una muestra \(X_1, \dots , X_n\) provenientes de la distribución \(F\). Defina \[
D_n = \sup_{-\infty<x<\infty}|F_n(x)-F(x)|
\] Entonces \[D_n\xrightarrow[]{\mathbb P} 0\]
Esto implica que si una distribución empírica \(F_n(x)\) se obtiene realmente de la distribución teórica \(F(x)\), entonces la diferencia entre estas dos convergerá en probabilidad a 0 cuando \(n \to \infty\).
La demostración de este teorema está más allá del alcance de este curso, por lo que no se incluirá en esta sección.
15.1 Prueba de Kolmogorov-Smirnov para una muestra
La prueba de Kolmogorov-Smirnov se utiliza para responder a la pregunta de si una distribución empírica de datos, \(F\), es igual a una distribución teórica, \(F^\star\). Se establecen las siguientes hipótesis:
Bajo la hipótesis nula, \(Z_1,\dots, Z_n\) se distribuyen como una distribución uniforme entre 0 y 1, es decir, \(Z_1,\dots, Z_n \underset{H_0}{\sim} \text{Unif}(0,1)\).
Si consideramos una nueva hipótesis, \(H_0: G = \text{Unif}(0,1)\), donde \(G\) es la distribución de \(Z_i\), entonces el estadístico de prueba se redefine como:
Se puede demostrar que \(G_n(z) = F_n((F^{\star})^{-1}(z))\), lo que implica que \(D_n^{,G}\) es igual a \(D_n^{\star}\) bajo la hipótesis nula. Por lo tanto, \(D_n^{\star}\) no depende de \(F^{\star}\) cuando la hipótesis nula es verdadera.
En términos prácticos, si la distribución empírica \(F_n(x)\) está cerca de la distribución teórica \(F^{\star}(x)\), entonces el valor de \(D_n^{\star}\) será cercano a cero. Por lo tanto, rechazamos la hipótesis nula, \(H_0\), si \(n^{\frac{1}{2}}D_n^{\star}\geq c\) para algún valor crítico \(c\).
Este valor crítico \(c\) se obtiene a partir de la distribución de Kolmogorov-Smirnov. De acuerdo con el teorema de Kolmogorov-Smirnov (1930), si la hipótesis nula es verdadera, para \(t>0\),
Teorema 15.1 (Kolmogorov-Smirnov (1930)) Si \(H_0\) es cierto, para \(t>0\), \[\lim_{n\to \infty} \mathbb P(n^{1/2}D_n^{\star}\leq t) = 1-2\sum_{i=1}^\infty
(-1)^{i-1}e^{-2i^2t^2} = H(t).\]
Rechazamos \(H_0\) si \(n^{1/2}D_n^{\star}\geq c\), \(n\) grande. Para un nivel de significancia \(\alpha_0\), \(c = H^{-1}(1-\alpha_0)\), donde \(H\) denota el valor de la parte derecha de la ecuación anterior.
La función \(H(t)\) es algo complicada de estimar, y sus cuantiles lo son aún más. Estos normalmente son definidos a través de métodos núméricos que están fuera del alcance del este curso. La siguiente tabla muestra el conjunto de valores estimados para cada \(t\)
La función de distribución se ve de la siguiente forma:
H <-function(t) { i <-1:1e41-2*sum((-1)^(i -1) *exp(-2* i^2* t^2))}t <-seq(0.1, 2, length.out =1000)data.frame(t, H =Vectorize(H)(t)) %>%ggplot(aes(t, H)) +geom_line(linewidth =2) + cowplot::theme_cowplot()
Los valores más comunes de cuantiles para las pruebas son
\(\alpha\)
\(H^{-1}(1-\alpha)\)
0.01
1.63
0.05
1.36
0.1
1.22
Solo como ilustración, la funcion ks.test tiene programada la estimación de \(\mathbb P (D_n \leq t)\). En este gráfico se presentan algunos ejemplos con \(n\) igual a 10, 50 y 100.
pkolmogorov1x <-function(x, n) {## Probability function for the one-sided one-sample Kolmogorov## statistics, based on the formula of Birnbaum & Tingey (1951).if (x <=0) {return(0) }if (x >=1) {return(1) } j <-seq.int(from =0, to =floor(n * (1- x)))1- x *sum(exp(lchoose(n, j)+ (n - j) *log(1- x - j / n)+ (j -1) *log(x + j / n)))}t <-seq(0.001, 0.999, length.out =1000)df <-rbind(data.frame(t, ks =Vectorize(pkolmogorov1x)(t, 10), n =10),data.frame(t, ks =Vectorize(pkolmogorov1x)(t, 50), n =50),data.frame(t, ks =Vectorize(pkolmogorov1x)(t, 100), n =100))
ggplot(df, aes(x = t, y = ks, color =as.factor(n))) +geom_line(linewidth =2) +labs(color ="n") + cowplot::theme_cowplot()
Ejemplo 15.2 En el caso de las partes mecánicas quisiéramos saber si los log-valores siguen o no una distribución normal de parámetros \(N (\hat{\mu } , s^{2})\).
Para calcular manualmente el valor de \(D_{n}^{\star }\) se deben usar los siguientes dos estimadores:
One-sample Kolmogorov-Smirnov test
data: log(x)
D = 0.091246, p-value = 0.9815
alternative hypothesis: two-sided
Observación. Los valores de los valores-p son diferentes ya que la función ks.test usa varias aproximaciones para calcularlos.
Note que esta localización es muy importante ya que si se quisiera comparar con una distribución \(N(0,1)\) el resultado es diferente.
ks.test(x =log(x),y ="pnorm",mean =0,sd =1)
Exact one-sample Kolmogorov-Smirnov test
data: log(x)
D = 0.99803, p-value = 4.441e-16
alternative hypothesis: two-sided
15.2 Prueba de 2 muestras
Suponga que se tiene \(X_1,\dots,X_m\sim N(\mu_1,\sigma^2)\) y \(Y_1,\dots,Y_n\sim N(\mu_2,\sigma^2)\) y se desea saber si ambas muestras tienen la misma distribución.
Una opción es probar que \[
H_0:\mu_1 = \mu_2 \text{ vs } H_1: \mu_{1} \neq \mu_{2}
\]
Uno de los supuestos fuertes para este tipo de pruebas es la normalidad.
En este caso se rechaza la hipótesis nula si \(\left(\dfrac{mn}{m+n}\right)^{\frac 12}D_{mn}^{\star} \geq c(\alpha)\), donde \(c(\alpha) =\sqrt{-\ln{\left(\frac{\alpha}{2}\right)\frac{1}{2}}}\).
Ejemplo 15.3 Suponga que se tienen dos grupos de personas a las cuales a unas se les dio un tratamiento para la presión arterial y al otro se le dio un placebo.
Al se midieron las diferencias entre las presiones arteriales al cabo de 12 semanas de tratamiento.
La pregunta es si ambos conjuntos de datos vienen de la misma distribución.
Podemos repetir el mismo procedimiento anterior, pero modificado para dos muestras. Primero necesitamos estimar el \(D_{nm}^{\star}\) usando estos dos estimadores: