Determinar automaticamente a distribuição de probabilidade, considerando um conjunto de dados

12

Dado um conjunto de dados:

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)

.. Gostaria de determinar a distribuição de probabilidade mais adequada (gama, beta, normal, exponencial, poisson, qui-quadrado etc.) com uma estimativa dos parâmetros. Já estou ciente da pergunta no link a seguir, onde uma solução é fornecida usando R: /programming/2661402/given-a-set-of-random-numbers-drawn-from-a- distribuição-univariada-contínua-f, a melhor solução proposta é a seguinte:

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

E a distribuição com o menor valor do loglik é selecionada. No entanto, outras distrubções, como a distribuição beta, exigem a especificação de alguns parâmetros de adição na função fitdistr ():

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

Dado que estou tentando determinar a melhor distribuição sem nenhuma informação prévia, não sei qual pode ser o valor dos parâmetros para cada distribuição. Existe outra solução que leve esse requisito em consideração? não precisa estar em R.

Comunidade
fonte

Respostas:

18

O que você faz sobre o infinito de distribuições que não estão na lista?

O que você faz quando nenhum dos itens da sua lista se encaixa adequadamente? por exemplo, se sua distribuição é fortemente bimodal

Como você vai lidar com o fato de que o exponencial é apenas um caso especial da gama e, como tal, a gama deve sempre ajustar melhor qualquer conjunto de dados, já que possui um parâmetro adicional e, portanto, deve ter uma melhor probabilidade ?

Como você lida com o fato de que a probabilidade é definida apenas até uma constante multiplicativa e que a probabilidade de distribuições diferentes pode não ser automaticamente comparável, a menos que definida de forma consistente?

Não é que eles sejam necessariamente insolúveis, mas fazer isso de maneira sensata não é trivial; certamente é necessário mais pensamento do que apenas arriscar tudo através do cálculo de um MLE e comparação de probabilidades.

Glen_b -Reinstate Monica
fonte
3
Eu só me importo com as distribuições da lista e, se nenhuma das distribuições se encaixar, tratarei desse problema a seguir. mas, por enquanto, chegar a esse ponto é bom o suficiente para mim. Quanto à última pergunta sobre a distribuição gama, sim, ela pode se encaixar melhor com algum parâmetro, minha pergunta é exatamente sobre isso, existe um algoritmo que me permite percorrer diferentes valores de parâmetros para as diferentes distribuições na lista? e devolver a distribuição mais adequada com os parâmetros adequados?
1
Bem, sim e não. Você pode criar uma "figura de mérito" para calcular qual conjunto de parâmetros oferece o melhor ajuste e escrever um loop de "subida" para otimizar o valor da figura de mérito. Um exemplo de FOM é o valor R para ajustes de regressão.
22812 Carl Witthoft
eu assino este +1.
4
@ shachem Você perdeu o ponto sobre a gama. Distribuições com parâmetros adicionais sempre terão uma melhor probabilidade, mesmo quando os dados vierem da distribuição com menos parâmetros . Você precisa considerar isso. Algumas medidas de ajuste são ajustadas para esse efeito. Para ser sincero, acho que o que você está tentando fazer é provavelmente 'responder à pergunta errada', como perguntar 'como faço para descobrir qual desses martelos é o melhor para bater nesse parafuso'
Glen_b -Reinstate Monica
1
Se "a probabilidade é definida apenas como uma constante multiplicativa", Glen, então como entender sua afirmação de que "distribuições com parâmetros adicionais sempre terão uma melhor probabilidade"? De fato, como alguém poderia comparar probabilidades tão mal definidas? Eu suspeito que alguma idéia importante tenha sido deixada não declarada ...
whuber
3

Eu encontrei uma função que responde minha pergunta usando o matlab. Pode ser encontrado neste link: http://www.mathworks.com/matlabcentral/fileexchange/34943

Pego um vetor de dados como entrada

   allfitdist(data)

e retorna as seguintes informações para a melhor distribuição 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.

fonte
1
OK, agora tudo o que você precisa fazer é portar o arquivo m para um arquivo R. :-)
Carl Witthoft
Nem mesmo! Como eu havia mencionado que ele não precisa ser um arquivo-R, de modo que a função Matlab resolve completamente o meu problema :-)
AIC, BIC, AICc etc. podem ser uma maneira de decidir, mas se isso faz sentido realmente depende do que você está tentando fazer. Por exemplo, o que você faz se uma distribuição é realmente próxima das outras em termos de log L? Se o que você está tentando fazer é prever, em geral, ignorar modelos próximos de seus critérios não deve ser descartado. Por exemplo, a média do modelo é uma maneira de levá-los em consideração.
Björn