Determinar automáticamente la distribución de probabilidad dado un conjunto de datos

12

Dado un conjunto de datos:

x <- c(4.9958942,5.9730174,9.8642732,11.5609671,10.1178216,6.6279774,9.2441754,9.9419299,13.4710469,6.0601435,8.2095239,7.9456672,12.7039825,7.4197810,9.5928275,8.2267352,2.8314614,11.5653497,6.0828073,11.3926117,10.5403929,14.9751607,11.7647580,8.2867261,10.0291522,7.7132033,6.3337642,14.6066222,11.3436587,11.2717791,10.8818323,8.0320657,6.7354041,9.1871676,13.4381778,7.4353197,8.9210043,10.2010750,11.9442048,11.0081195,4.3369520,13.2562675,15.9945674,8.7528248,14.4948086,14.3577443,6.7438382,9.1434984,15.4599419,13.1424011,7.0481925,7.4823108,10.5743730,6.4166006,11.8225244,8.9388744,10.3698150,10.3965596,13.5226492,16.0069239,6.1139247,11.0838351,9.1659242,7.9896031,10.7282936,14.2666492,13.6478802,10.6248561,15.3834373,11.5096033,14.5806570,10.7648690,5.3407430,7.7535042,7.1942866,9.8867927,12.7413156,10.8127809,8.1726772,8.3965665)

.. Me gustaría determinar la distribución de probabilidad más adecuada (gamma, beta, normal, exponencial, poisson, chi-cuadrado, etc.) con una estimación de los parámetros. Ya estoy al tanto de la pregunta en el siguiente enlace, donde se proporciona una solución usando R: /programming/2661402/given-a-set-of-random-numbers-drawn-from-a- distribución-univariada-continua-f la mejor solución propuesta es la siguiente:

> library(MASS)
> fitdistr(x, 't')$loglik                                                              #$
> fitdistr(x, 'normal')$loglik                                                         #$
> fitdistr(x, 'logistic')$loglik                                                       #$
> fitdistr(x, 'weibull')$loglik                                                        #$
> fitdistr(x, 'gamma')$loglik                                                          #$
> fitdistr(x, 'lognormal')$loglik                                                      #$
> fitdistr(x, 'exponential')$loglik                                                    #$

Y se selecciona la distribución con el valor loglik más pequeño. Sin embargo, otras distribuciones como la distribución beta requieren la especificación de algunos parámetros de adición en la función fitdistr ():

   fitdistr(x, 'beta', list(shape1 = some value, shape2= some value)).

Dado que estoy tratando de determinar la mejor distribución sin ninguna información previa, no sé cuál puede ser el valor de los parámetros para cada distribución. ¿Hay alguna otra solución que tenga en cuenta este requisito? no tiene que estar en R.

Comunidad
fuente

Respuestas:

18

¿Qué haces con la infinidad de distribuciones que no están en la lista?

¿Qué haces cuando ninguno de los de tu lista encaja adecuadamente? por ejemplo, si su distribución es fuertemente bimodal

¿Cómo va a lidiar con el hecho de que el exponencial es solo un caso especial de la gamma y, como tal, la gamma siempre debe ajustarse mejor a cualquier conjunto de datos, ya que tiene un parámetro adicional y, por lo tanto, debe tener una mayor probabilidad ?

¿Cómo lidiar con el hecho de que la probabilidad solo se define hasta una constante multiplicativa y que la probabilidad de diferentes distribuciones podría no ser automáticamente comparable a menos que se defina de manera consistente?

No es que estos sean necesariamente insolubles, pero hacer esto de una manera sensata no es trivial; Ciertamente se requiere más reflexión que simplemente tapar todo a través del cálculo de un MLE y la comparación de probabilidades.

Glen_b -Reinstate a Monica
fuente
3
Solo me interesan las distribuciones en la lista, y si ninguna de las distribuciones encaja, entonces trataré ese problema a continuación. pero por ahora llegar a ese punto es lo suficientemente bueno para mí. En cuanto a la última pregunta sobre la distribución gamma, sí, puede encajar mejor con algún parámetro, mi pregunta es exactamente sobre esto, ¿hay algún algoritmo que me permita recorrer diferentes valores de parámetros para las diferentes distribuciones en la lista? y devolver la distribución más adecuada con los parámetros adecuados?
1
Pues sí y no. Puede llegar a una "figura de mérito" para calcular qué conjunto de parámetros le da el mejor ajuste, y escribir un ciclo de "subida de la colina" para optimizar el valor de la figura de mérito. Un ejemplo de un FOM es el valor R para los ajustes de regresión.
Carl Witthoft
Me suscribo a este +1.
44
@shachem Te perdiste el punto sobre el gamma. Las distribuciones con parámetros adicionales siempre tendrán una mayor probabilidad, incluso cuando los datos provienen de la distribución con menos parámetros . Necesitas considerar esto. Algunas medidas de ajuste se ajustan para este efecto. Para ser honesto, creo que lo que está tratando de hacer es 'responder la pregunta incorrecta', algo así como preguntar '¿cómo puedo averiguar cuál de estos martillos es el mejor para golpear este tornillo'?
Glen_b -Reinstalar Mónica
1
Si "la probabilidad solo se define hasta una constante multiplicativa", Glen, entonces, ¿cómo puede uno entender su afirmación de que "las distribuciones con parámetros adicionales siempre tendrán una mejor probabilidad"? De hecho, ¿cómo podría uno comparar las probabilidades que están tan mal definidas? Sospecho que alguna idea clave no se ha expresado ...
whuber
3

He encontrado una función que responde a mi pregunta usando matlab. Se puede encontrar en este enlace: http://www.mathworks.com/matlabcentral/fileexchange/34943

Tomo un vector de datos como entrada

   allfitdist(data)

y devuelve la siguiente información para la mejor distribución de ajuste:

   DistName- the name of the distribution
   NLogL - Negative of the log likelihood
   BIC - Bayesian information criterion (default)
   AIC - Akaike information criterion
   AICc - AIC with a correction for finite sample sizes 
   ParamNames
   ParamDescription
   Params
   etc.

fuente
1
OK, ahora todo lo que necesita hacer es portar el archivo m a un archivo R. :-)
Carl Witthoft
¡Ni siquiera! Como mencioné, no es necesario que sea un archivo R, por lo que la función matlab resuelve completamente mi problema :-)
AIC, BIC, AICc, etc. pueden ser una forma de decidir, pero si eso tiene sentido realmente depende de lo que intente hacer. Por ejemplo, ¿qué haces si una distribución está realmente cerca de las demás en términos de log L? Si lo que está tratando de hacer es predecir, por lo general, ignorar los modelos que están cerca de su criterio no debe descartarse. Por ejemplo, el promedio de modelos es una forma de tenerlos en cuenta.
Björn