El mejor enfoque es calcular el valor crítico del valor p por simulación. El problema es que cuando se estiman los parámetros a partir de los datos en lugar de utilizar los valores hipotéticos, la distribución del estadístico KS no sigue la distribución nula.
En su lugar, puede ignorar los valores p de la prueba KS y simular un grupo de conjuntos de datos de la distribución candidata (con un conjunto significativo de parámetros) del mismo tamaño que sus datos reales. A continuación, para cada conjunto, estime los parámetros y realice la prueba KS utilizando los parámetros estimados. Su valor p será la proporción de estadísticas de prueba de los conjuntos simulados que son más extremas que las de sus datos originales.
Ejemplo añadido
Aquí hay un ejemplo usando R (espero que sea legible/comprensible para la gente que usa otros programas).
Un ejemplo sencillo utilizando la distribución normal como hipótesis nula:
tmpfun <- function(x, m=0, s=1, sim=TRUE) {
if(sim) {
tmp.x <- rnorm(length(x), m, s)
} else {
tmp.x <- x
}
obs.mean <- mean(tmp.x)
obs.sd <- sd(tmp.x)
ks.test(tmp.x, 'pnorm', mean=obs.mean, sd=obs.sd)$statistic
}
set.seed(20200319)
x <- rnorm(25, 100, 5)
out <- replicate(1000, tmpfun(x))
hist(out)
abline(v=tmpfun(x, sim=FALSE))
mean(out >= tmpfun(x, sim=FALSE))
La función calculará el estadístico de prueba KS a partir de los datos reales (sim=FALSE) o simulará un nuevo conjunto de datos del mismo tamaño a partir de una distribución normal con media y sd especificadas. Entonces, en cualquiera de los dos casos, calculará el estadístico de prueba comparándolo con una distribución normal con la misma media y sd que la muestra (original o simulada).
A continuación, el código ejecuta 1.000 simulaciones (siéntase libre de cambiar y volver a ejecutar) para obtener/aproximar la distribución del estadístico de prueba bajo el NULL (pero con parámetros estimados) y, finalmente, compara el estadístico de prueba para los datos originales con esta distribución NULL.
Podemos simular todo el proceso (simulaciones dentro de simulaciones) para ver cómo se compara con los valores p por defecto:
tmpfun2 <- function(B=1000) {
x <- rnorm(25, 100, 5)
out <- replicate(B, tmpfun(x))
p1 <- mean(out >= tmpfun(x, sim=FALSE))
p2 <- ks.test(x, 'pnorm', mean=mean(x), sd=sd(x))$p.value
return(c(p1=p1, p2=p2))
}
out <- replicate(1000, tmpfun2())
par(mfrow=c(2,1))
hist(out[1,])
hist(out[2,])
Para mi simulación, el histograma de los valores p basados en la simulación es bastante uniforme (lo que debería ser ya que el NULL es verdadero), pero los valores p para el ks.test
función se agrupan mucho más contra el 1.0.
Se puede cambiar cualquier cosa en las simulaciones para estimar la potencia haciendo que los datos originales provengan de una distribución diferente, o utilizando una distribución Nula diferente, etc. La normal es probablemente la más sencilla ya que la media y la varianza son independientes, puede ser necesario un mayor ajuste para otras distribuciones.
1 votos
¿Con qué distribución quiere probar y por qué?
0 votos
Sospecho que los datos siguen una distribución exponencial.