[R-es] Goodness

José Trujillo Carmona trujillo en unex.es
Mar Feb 9 18:54:46 CET 2010


Estoy de acuerdo con Rubén.

El planteamiento de Daniel me recuerda a una pregunta típica en Médicos, 
Biólogos, Ingenieros, con poca experiencia en Estadística. La pregunta a 
menudo es: ¿Qué modelo de regresión no lineal será el que mejor se 
ajusta para explicar mis observaciones de Y en función de X? y con algo 
de sorna siempre contesto: "El polinomio con n-1 datos".

Creo que este caso es equivalente: La distribución que mejor se ajuste a 
una colección de datos no le veo sentido. Suponiendo que se han obtenido 
mediante muestreo, se puede dar un ajuste espúreo a cualquier 
distribución. Algunas convergen bastante bien sobre otras bajo 
determinadas condiciones.

En una distribución creo que es preciso plantear el modelo de generación 
de los datos o si ello no es posible conformarse con una estimación de 
la densidad mediante procedimientos como las estimaciones basadas en 
funciones núcleo. En concreto la función "density" del paquete stats 
estima la densidad de una variable a partir de un conjunto de datos 
mediante algunas de las funciones núcleo más habituales.

Proponer una función de distribución con toda su parsimonia en los 
parámetros sin justificación en la generación de los datos a mí me 
parece poco defendible a partir de una mera falta de desajuste de las 
observaciones respecto de un modelo del que no se justifica por qué este 
y no otro.

Si las observaciones proceden de una mezcla de distribuciones, no habrá 
ningún modelo sencillo, del grupo de los que podríamos llamar básicos, 
que realmente prediga las observaciones y no le veo ningún sentido a la 
propuesta de Daniel.


Rubén Roa escribió:
>  
> -----Mensaje original-----
> De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de daniel pacheco gomez Enviado el: martes, 09 de febrero de 2010 12:02
> Para: r-help-es en r-project.org
> Asunto: [R-es] Goodness
>
>
> Hola,
>
> LLevo buscando desde hace tiempo como hacer el Goodness of fit test en R. Es decir, me explico, intento hacer una cosa parecida que se hace en Minitab, por ejemplo, yo tengo un conjunto de datos, y  lo que quiero es sabes que tipo de distibución es, en minitab se hace un histograma para ver si se ajusta bien o no a la campana de Gauss, luego vemos si aproximar la distribución de la muestra por una Normal es lícito. Es decir, minitab genera un Probability Plot of Adjusted Value y devuelve el Anderson Darling y el P-Value, al hacer esto se observa que el p-value del contraste de hipótesis utilizado es menor que el nivel de significación estandar(0,05), luego no podemos aceptar que la hipótesis  nula de que la muestra provenga de una distribución normal.
>
> Es entonces cuando en minitab se le aplica el "Goodness of Fit Test", y se observe que distribución se ajusta mejor a la muestra obtenida. Entonces se le aplica el Process capability según la distribución y se analizan los resultados.
>
> Mi duda es, ¿exite alguna función-libreria-paquete, que al pasarle la muestra, te diga que tipo de distribución es?.
>
> ---
> No lo creo, no es está en la filosofía de R una forma tan automática de responder tus preguntas.
> Lo que tú quieres hacer yo lo hago con fitdistr de MASS, y si tengo dos o mas distribuciones que pueden explicar mis datos, uso el AIC.
> Lo de qué distribución corresponde (nota la diferencia con 'mejor ajusta') a tus datos, lo puedes elucidar pensando en la naturaleza de tus datos.
> Son continuos o discretos?, univariados o multivariados?.
> Si son discretos, son conteos? (Poisson?, binomial negativa?), son binarios? (binomial)?, tienen exceso de ceros? (sobredispersos)?
> Si son continuos, admiten cero y valores negativos? (normal?), sólo valores positivos? (lognormal {proceso multiplicativo}, gamma {suma de exponenciales}?), son distancias o tiempos entre eventos? (exponencial?), etc.
>
>
> par(mfrow=c(2,1),oma=c(2,2,1,1),mar=c(2,2,1,1))
>
> #Ejemplo 1 (solución analítica para los emv):
>
> x <- rnorm(250, 5, 3)
> hist(x, prob=TRUE, ylim=c(0,1.25*max(hist(x,plot=FALSE)$density)))
> curve(dnorm(x,4.5,3.2,),col="blue",add=TRUE)
> library(MASS)
> x.likfit <- fitdistr(x,'normal') #sin proporcionar valores iniciales
> curve(dnorm(x,mean=x.likfit$estimate[1],sd=x.likfit$estimate[2],),col="red",add=TRUE)
>
> #Ejemplo 2 (solución numérica para los emv):
>
> x <- rgamma(250, 2, 25)
> hist(x, prob=TRUE, ylim=c(0,1.25*max(hist(x,plot=FALSE)$density)))
> curve(dgamma(x,shape=3,rate=30),col="blue",add=TRUE)
> library(MASS)
> x.likfit <- fitdistr(x,'gamma',start=list(shape =3, rate=30)) #con valores iniciales
> curve(dgamma(x,shape=x.likfit$estimate[1],rate=x.likfit$estimate[2],),col="red",add=TRUE)
>
> HTH
> Rubén
>
> ____________________________________________________________________________________ 
>
> Dr. Rubén Roa-Ureta
> AZTI - Tecnalia / Marine Research Unit
> Txatxarramendi Ugartea z/g
> 48395 Sukarrieta (Bizkaia)
> SPAIN
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



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