Wahrscheinlichkeitsverteilung bei gegebenem Datensatz automatisch bestimmen

12

Gegeben ein Datensatz:

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)

.. Ich möchte die am besten passende Wahrscheinlichkeitsverteilung (Gamma, Beta, Normal, Exponentiell, Poisson, Chi-Quadrat usw.) mit einer Schätzung der Parameter bestimmen. Die Frage auf dem folgenden Link, wo eine Lösung mit R bereitgestellt wird, ist mir bereits bekannt: /programming/2661402/given-a-set-of-random-numbers-drawn-from-a- kontinuierliche-univariate-verteilung-f die beste vorgeschlagene lösung ist die folgende:

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

Und die Verteilung mit dem kleinsten loglik-Wert wird ausgewählt. Andere Distributionen wie die Betaverteilung erfordern jedoch die Angabe einiger Additionsparameter in der Funktion fitdistr ():

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

Da ich versuche, die beste Verteilung ohne vorherige Information zu bestimmen, weiß ich nicht, wie der Wert der Parameter für jede Verteilung möglicherweise sein kann. Gibt es eine andere Lösung, die diese Anforderung berücksichtigt? es muss nicht in R sein

Gemeinschaft
quelle

Antworten:

18

Was tun Sie gegen die Unendlichkeit von Distributionen, die nicht in der Liste enthalten sind?

Was machen Sie, wenn keiner Ihrer Einträge ausreichend passt? zB wenn Ihre Distribution stark bimodal ist

Wie gehen Sie mit der Tatsache um, dass das Exponential nur ein Sonderfall des Gammas ist und das Gamma als solches immer besser zu jeder Datenmenge passen muss, da es einen zusätzlichen Parameter hat und daher eine bessere Wahrscheinlichkeit hat ?

Wie gehen Sie damit um, dass die Wahrscheinlichkeit nur bis zu einer multiplikativen Konstante definiert ist und die Wahrscheinlichkeit für unterschiedliche Verteilungen möglicherweise nicht automatisch vergleichbar ist, es sei denn, sie ist einheitlich definiert?

Es ist nicht so, dass diese unlösbar wären, aber es ist nicht trivial, diese Dinge auf vernünftige Weise zu tun. Es ist sicherlich mehr Überlegung erforderlich, als nur alles durch die Berechnung eines MLE und den Vergleich von Wahrscheinlichkeiten zu vermasseln.

Glen_b - Setzen Sie Monica wieder ein
quelle
3
Ich kümmere mich nur um die Distributionen auf der Liste, und wenn keine der Distributionen passt, werde ich mich als nächstes mit diesem Problem befassen. Aber jetzt ist es gut genug für mich, diesen Punkt zu erreichen. Was die letzte Frage zur Gammaverteilung betrifft, ja, sie kann besser zu bestimmten Parametern passen. Meine Frage bezieht sich genau darauf. Gibt es einen Algorithmus, mit dem ich verschiedene Parameterwerte für die verschiedenen Verteilungen in der Liste durchlaufen kann? und die passendste Verteilung mit den entsprechenden Parametern zurückgeben?
1
Ja und nein Sie können eine "Gütezahl" ausarbeiten, um zu berechnen, welcher Parametersatz die beste Anpassung ergibt, und eine "Hill-Climbing" -Schleife schreiben, um den Wert der Gütezahl zu optimieren. Ein Beispiel für eine FOM ist der R-Wert für Regressionsanpassungen.
Carl Witthoft
Ich abonniere diese +1.
4
@shachem Du hast den Punkt über das Gamma verpasst. Verteilungen mit zusätzlichen Parametern haben immer eine bessere Wahrscheinlichkeit, selbst wenn die Daten aus der Verteilung mit weniger Parametern stammen . Sie müssen dies berücksichtigen. Einige Anpassungsmaße passen sich diesem Effekt an. Um ehrlich zu sein, ich denke, das, was Sie versuchen zu tun, ist wahrscheinlich "die falsche Frage zu beantworten", ähnlich der Frage "wie finde ich heraus, welcher dieser Hämmer der beste ist, um in diese Schraube zu schlagen"
Glen_b -Reinstate Monica
1
Wenn "die Wahrscheinlichkeit nur bis zu einer multiplikativen Konstante definiert ist", Glen, wie kann man dann Ihre Aussage verstehen, dass "Verteilungen mit zusätzlichen Parametern immer eine bessere Wahrscheinlichkeit haben"? In der Tat, wie könnte man Wahrscheinlichkeiten vergleichen, die so schlecht definiert sind? Ich vermute, eine Schlüsselidee wurde nicht angegeben ...
whuber
3

Ich habe eine Funktion gefunden, die meine Frage mit matlab beantwortet. Es kann auf diesem Link gefunden werden: http://www.mathworks.com/matlabcentral/fileexchange/34943

Ich nehme einen Datenvektor als Eingabe

   allfitdist(data)

und gibt die folgenden Informationen für die bestmögliche Verteilung zurück:

   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.

quelle
1
OK, jetzt müssen Sie nur noch die M-Datei in eine R-Datei portieren. :-)
Carl Witthoft
Nicht mal! Wie ich bereits erwähnt hatte, muss es keine R-Datei sein, daher löst die Matlab-Funktion mein Problem vollständig :-)
AIC, BIC, AICc usw. können eine Möglichkeit sein zu entscheiden, aber ob dies wirklich Sinn macht, hängt davon ab, was Sie versuchen. Was machen Sie zB, wenn eine Distribution in Bezug auf log L den anderen sehr nahe kommt? Wenn Sie vorhersagen möchten, sollten Sie in der Regel Modelle, die in Bezug auf Ihr Kriterium nahe beieinander liegen, ignorieren und nicht einfach verwerfen. Eine Möglichkeit, dies zu berücksichtigen, ist beispielsweise die Modellmittelung.
Björn