Déterminer automatiquement la distribution de probabilité à partir d'un ensemble de données

12

Étant donné un ensemble de données:

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)

.. Je voudrais déterminer la distribution de probabilité la plus appropriée (gamma, bêta, normale, exponentielle, poisson, chi carré, etc.) avec une estimation des paramètres. Je suis déjà au courant de la question sur le lien suivant, où une solution est fournie en utilisant R: /programming/2661402/given-a-set-of-random-numbers-drawn-from-a- continue-univariée-distribution-f la meilleure solution proposée est la suivante:

> 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                                                    #$

Et la distribution avec la plus petite valeur loglik est sélectionnée. Cependant, d'autres distributions telles que la distribution bêta nécessitent la spécification de certains paramètres d'addition dans la fonction fitdistr ():

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

Étant donné que j'essaie de déterminer la meilleure distribution sans aucune information préalable, je ne sais pas quelle peut être la valeur des paramètres pour chaque distribution. Existe-t-il une autre solution qui prend en compte cette exigence? il ne doit pas nécessairement être en R.

Communauté
la source

Réponses:

18

Que faites-vous de l'infinité des distributions qui ne figurent pas dans la liste?

Que faites-vous quand aucun de ceux dans votre liste correspondent de manière adéquate? par exemple si votre distribution est fortement bimodale

Comment allez-vous gérer le fait que l'exponentielle n'est qu'un cas particulier du gamma, et en tant que tel, le gamma doit toujours mieux s'adapter à n'importe quel ensemble de données, car il a un paramètre supplémentaire, et donc doit avoir une meilleure probabilité ?

Comment gérez-vous le fait que la probabilité n'est définie que jusqu'à une constante multiplicative et que la probabilité de différentes distributions peut ne pas être automatiquement comparable à moins qu'elle ne soit définie de manière cohérente?

Ce n'est pas que ceux-ci sont nécessairement insolubles, mais faire ce genre de choses de manière sensée n'est pas anodin; il faut certainement plus de réflexion que de simplement tout bousculer à travers le calcul d'un MLE et la comparaison des probabilités.

Glen_b -Reinstate Monica
la source
3
Je ne m'inquiète que des distributions sur la liste, et si aucune des distributions ne correspond, alors je traiterai ce problème ensuite. mais pour l'instant, atteindre ce point est assez bon pour moi. Quant à la dernière question concernant la distribution gamma, oui, elle peut mieux s'adapter à certains paramètres, ma question concerne exactement cela, y a-t-il un algorithme qui me permet de parcourir différentes valeurs de paramètres pour les différentes distributions de la liste? et retourner la distribution la plus appropriée avec les paramètres appropriés?
1
Eh bien, oui et non. Vous pouvez trouver une "figure de mérite" pour calculer quel ensemble de paramètres vous donne le meilleur ajustement, et écrire une boucle "de montée" pour optimiser la valeur de la figure de mérite. Un exemple de FOM est la valeur R pour les ajustements de régression.
Carl Witthoft
je souscris à ce +1.
4
@shachem Vous avez manqué le point sur le gamma. Les distributions avec des paramètres supplémentaires auront toujours une meilleure probabilité, même lorsque les données proviennent de la distribution avec moins de paramètres . Vous devez considérer cela. Certaines mesures d'ajustement s'ajustent à cet effet. Pour être honnête, je pense que la chose que vous essayez de faire est probablement de `` répondre à la mauvaise question '', un peu comme demander `` comment puis-je savoir lequel de ces marteaux est le meilleur pour frapper dans cette vis ''
Glen_b -Reinstate Monica
1
Si "la vraisemblance n'est définie que jusqu'à une constante multiplicative", Glen, alors comment peut-on comprendre votre affirmation selon laquelle "les distributions avec des paramètres supplémentaires auront toujours une meilleure probabilité"? En effet, comment pourrait-on comparer des probabilités si mal définies? Je soupçonne qu'une idée clé n'a pas été
énoncée
3

J'ai trouvé une fonction qui répond à ma question en utilisant matlab. Il peut être trouvé sur ce lien: http://www.mathworks.com/matlabcentral/fileexchange/34943

Je prend un vecteur de données en entrée

   allfitdist(data)

et renvoie les informations suivantes pour la meilleure distribution de raccord:

   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.

la source
1
OK, maintenant tout ce que vous avez à faire est de porter le fichier m vers un fichier R. :-)
Carl Witthoft
Pas même! Comme je l'avais mentionné, il n'a pas besoin d'être un fichier R, donc la fonction matlab résout complètement mon problème :-)
L'AIC, le BIC, l'AICc, etc. peuvent être une façon de décider, mais le fait que cela ait du sens dépend vraiment de ce que vous essayez de faire. Par exemple, que faites-vous si une distribution est vraiment proche des autres en termes de log L? Si ce que vous essayez de faire est de prédire, il ne faut généralement pas ignorer les modèles proches de votre critère. Par exemple, la moyenne des modèles est une façon de les prendre en compte.
Björn