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