[R-es] Test K-S con distribuciones LogNormales

Víctor Nalda Castellet victor.nalda.castellet en gmail.com
Mie Oct 15 16:24:11 CEST 2014


Hola Ruben,

Gracias por los paquetes que me comentas para realizar los contrastes de
bondad de ajuste.

Voy a seguir variando parámetros para ver los resultados que obtengo.


Un saludo y muchas gracias.

El 15 de octubre de 2014, 14:54, rubenfcasal <rubenfcasal en gmail.com>
escribió:

>  Hola de nuevo,
>
>     En cuanto a otro tipo de contrastes de bondad de ajuste, podrías
> pensar en emplear por ejemplo el test de Anderson-Darling (podríamos decir
> que es una mejora del KS, mira p.e.
> http://en.wikipedia.org/wiki/Anderson%E2%80%93Darling_test). Creo que
> está implementado en R (p.e. paquete goftest). Para contrastes de bondad de
> ajuste, yo tengo empleado el paquete fitdistrplus y otros asociados al
> paquete distr (el distrMod creo recordar...) .
>
>     Una duda que tengo es porque comparas la distribución de las medias
> con la de los datos originales (ten también en cuenta que hay dependencia
> entre estas muestras, p.e su media muestral es exactamente la misma). Si
> tienes una distribución teórica, sería más eficiente comparar directamente
> con esta distribución, e.g.:
> ks.test(lognorm2$sample, "plnorm", meanlog = mean, sdlog = sd )
> Aunque sigo obteniendo p-valor=1 con tu ejemplo.
>     Prueba también a variar los parámetros...
>
>     Un saludo,
>         Rubén F.C.
>
> El 15/10/2014 11:26, Víctor Nalda Castellet escribió:
>
> Hola Ruben,
>
>  Sí precisamente es lo que comentas, en matemáticas no se suele llamar
> bucketización (este término se emplea más en informática) sino datos
> agrupados. Pero la idea es la que tu mismo dices.
>
>  Respecto a las gráficas que has puesto, me han aclarado mucho sobre el
> tema, gracias.
>
>  Si realizo lo mismo, por ejemplo con nbucket=1000 sigo obteniendo un
> p-valor de 1. Es decir, que casi le pongas lo que le pongas se obtiene un
> p-valor de 1.
>
>  ¿Qué otros test de contraste de hipótesis me podrías recomendar? Porque
> igual ocurre lo que tu bien has dicho de que el test de K-S no es
> precisamente el mejor para este caso.
>
>
>  Un saludo, y ¡¡¡muchas gracias!!!
>
> El 15 de octubre de 2014, 10:50, rubenfcasal <rubenfcasal en gmail.com>
> escribió:
>
>> Hola Víctor,
>>
>>     Te escribo sin tener muy claro lo que quieres hacer (me llamó la
>> atención lo de "datos bucketizados", es la primera vez que lo veo en
>> estadística, aunque la terminología me suena a informática...).
>>
>>     Si no entiendo mal, en el segundo caso trabajas con medias de una
>> distribución lognormal agrupada. Simplemente hacer notar que la
>> distribución teórica de estas medias no es lognormal y la varianza no
>> coincide con la de la distribución original (es la original dividida por el
>> tamaño de las submuestras =  n/nbucket).
>>
>>     En cuanto al test KS, ten en cuenta que lo que hace es comparar
>> funciones de distribución empíricas:
>> # La de los datos originales:
>> curve(ecdf(sample)(x), type="s")
>> # Esta se parece mucho a la teórica como sería de esperar con una muestra
>> tan grande:
>> # curve(plnorm(x, meanlog = mean, sdlog = sd), lwd=2,add=TRUE)
>>
>> # con la de las medias de las submuestras:
>> curve(ecdf(sample_bucket$mean)(x),type="s",lty = 2, add = TRUE)
>>
>>     Lo que creo que ocurre es que la segunda muestra es muy pequeña y el
>> test de KS no tiene evidencias para rechazar la H0. Si consideras un numero
>> mayor de "buckets" debería rechazar. Ten en cuenta también que el test KS
>> puede no ser el más potente...
>>
>>     Un saludo,
>>         Rubén F.C.
>>
>>
>>
>>
>> El 15/10/2014 9:59, Víctor Nalda Castellet escribió:
>>
>>  Hola a todos, ¿que tal?
>>>
>>> Os escribo porque llevo varios días con la siguiente duda: quiero
>>> realizar
>>> el test de K-S para dos distribuciones lognormales, una de ellas con
>>> datos
>>> agrupados (bucketizados).
>>>
>>> library(stats)
>>>
>>> # Definimos las variables
>>> n <- 1000000 # tamaño de la muestra
>>> mean <- 0 # media de la dist. normal
>>> sd <- 1 # desviación típica de la dist. normal
>>> nbucket <- 10 # numero de buckets
>>>
>>> # Generamos la muestra de tamaño n
>>> sample <- sort(rlnorm(n, meanlog = mean, sdlog = sd))
>>> # Función de distribución
>>> df <- plnorm(sample, meanlog = mean, sdlog = sd)
>>> lognorm1 <- data.frame(sample=sample, distfun=df)
>>> # Gráfica de la función de distribución sin bucketizar
>>> plot(lognorm1, type = "l", col = "red")
>>>
>>> # Bucketización - Muestra bucketizada
>>> library(plyr)
>>> dt <- data.frame(sample=sample, bucket=rep(1:nbucket, each = n/nbucket))
>>> sample_bucket <- ddply(dt,~bucket,summarise,mean=mean(sample))
>>>
>>> # Función de distribución bucketizada
>>> dfb <- plnorm(sample_bucket$mean, meanlog = mean, sdlog = sd)
>>> lognorm2 <- data.frame(sample=sample_bucket$mean, distfun=dfb)
>>> par(new=TRUE)
>>> points(lognorm2, col = "blue")
>>>
>>> ks.test(lognorm1$sample, lognorm2$sample) # Obtengo p-valor=1
>>>
>>> El problema es que obtengo un p-valor de 1, y creo que debería obtener un
>>> p-valor bastante menor. ¿Sabéis lo que está ocurriendo?
>>> Creo que si una de las distribuciones tiene 1.000.000 de datos y la otra
>>> tiene 10 datos (es la aproximación de la otra), como no se parecen en
>>> nada
>>> debería obtener un p-valor muy malo y no es así:
>>>
>>> Two-sample Kolmogorov-Smirnov test
>>>
>>> data:  lognorm1$sample and lognorm2$sample
>>> D = 0.0683, p-value = 1
>>> alternative hypothesis: two-sided
>>>
>>> Respecto al tema de bucketizar, lo tengo que realizar de esa forma.
>>>
>>>
>>>
>>> Un saludo, y muchas gracias.
>>>
>>>
>>
>
>
>  --
> Víctor Nalda Castellet
>
>
>


-- 
Víctor Nalda Castellet

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es