\documentclass{article}

\usepackage[spanish]{babel}

\begin{document}
\title{Kolmogórov-Smirnov para variables discretas}
\maketitle
En el caso discreto, \(D_n\) no es de libre distribución, pero es
sencillo obtener un $P$-valor mediante simulación. Sea $X$ por ejemplo
una distribución binomial \(\mathcal B(m, p_0)\). Supongamos \(m = 4\)
y \(p_0 = 0.5\) y una muestra de tamaño \(n = 500\).
\begin{verbatim}
> m <- 4; p0 <- 0.5; n <- 500
> ## Generación de los datos
> x4 <- rbinom(n, m, p0); table(x4)/n
x4
    0     1     2     3     4
0.052 0.270 0.352 0.252 0.074
> ## Función de distribución teórica
> FDT <- stepfun(0:m, c(0, pbinom(0:m, m, p0)))
> FDT(0:m) # prueba de la función
[1] 0.0625 0.3125 0.6875 0.9375 1.0000
> ## Función de distribución empírica
> FDE <- ecdf(x4)
> FDE(0:m)
[1] 0.052 0.322 0.674 0.926 1.000
> D0 <- max(abs(FDT(0:m) - FDE(0:m)))
> ## Simulación de la distribución de KS para la B(4,p0)
> Dn <- replicate(10000,{
+   xm <- rbinom(n, m, p0)
+   max(abs(FDT(0:m) - ecdf(xm)(0:m)))
+ })
> pval <- mean(Dn >= D0)
> cat("estadístico =", D0, "; P-valor=", pval, "\n")
estadístico= 0.0135 ; P-valor= 0.8548
\end{verbatim}

El paquete \texttt{KSgeneral} de \textsf{R} implementa un algoritmo
para obtener de forma exacta dichos $P$-valores. Para su instalación
requiere la biblioteca \texttt{fftw3} del sistema por lo que, por ejemplo, en
Ubuntu podría haber que instalarla previamente mediante el comando
\begin{verbatim}
sudo apt install libfftw3-dev
\end{verbatim}
Otra posibilidad es que se solicite reinstalar el paquete \texttt{Rcpp}
desde dentro de R:
\begin{verbatim}
> install.packages ("Rcpp")
\end{verbatim}

Se usaría así, por ejemplo:
\begin{verbatim}
> KSgeneral::disc_ks_test(x4, FDT, exact = TRUE)

        One-sample Kolmogorov-Smirnov test

data:  x4
D = 0.0135, p-value = 0.8453
alternative hypothesis: two-sided

\end{verbatim}
\end{document}
