Secara otomatis menentukan distribusi probabilitas yang diberikan satu set data

12

Diberikan dataset:

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)

.. Saya ingin menentukan distribusi probabilitas yang paling pas (gamma, beta, normal, eksponensial, poisson, chi-square, dll) dengan estimasi parameter. Saya sudah mengetahui pertanyaan pada tautan berikut, di mana solusi disediakan menggunakan R: /programming/2661402/given-a-set-of-random-number-drawn-from-a- continuous-univariate-distribution-f solusi terbaik yang diusulkan adalah sebagai berikut:

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

Dan distribusi dengan nilai loglik terkecil dipilih. Namun, distrubtions lain seperti distribusi beta memerlukan spesifikasi beberapa parameter tambahan dalam fungsi fitdistr ():

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

Mengingat bahwa saya mencoba menentukan distribusi terbaik tanpa informasi sebelumnya, saya tidak tahu berapa nilai parameter yang mungkin untuk setiap distribusi. Apakah ada solusi lain yang mempertimbangkan persyaratan ini? tidak harus dalam R.

Komunitas
sumber

Jawaban:

18

Apa yang Anda lakukan tentang distribusi tanpa batas yang tidak ada dalam daftar?

Apa yang Anda lakukan ketika tidak ada satu pun dari daftar Anda yang cukup? misalnya jika distribusi Anda sangat bimodal

Bagaimana Anda akan berurusan dengan fakta bahwa eksponensial hanyalah kasus khusus dari gamma, dan dengan demikian, gamma harus selalu sesuai dengan set data yang lebih baik, karena memiliki parameter tambahan, dan karenanya harus memiliki kemungkinan yang lebih baik ?

Bagaimana Anda menghadapi kenyataan bahwa kemungkinan hanya didefinisikan hingga konstanta multiplikatif dan bahwa kemungkinan untuk distribusi yang berbeda mungkin tidak secara otomatis dapat dibandingkan kecuali ditentukan secara konsisten?

Bukannya ini tidak dapat dipecahkan, tetapi melakukan hal ini dengan cara yang masuk akal adalah tidak biasa; tentu saja lebih banyak pemikiran diperlukan daripada sekadar membungkam semuanya melalui perhitungan MLE dan perbandingan kemungkinan.

Glen_b -Reinstate Monica
sumber
3
Saya hanya peduli dengan distribusi pada daftar, dan jika tidak ada distribusi yang cocok, maka saya akan menangani masalah itu selanjutnya. tetapi untuk sekarang mencapai titik itu sudah cukup baik untuk saya. Adapun pertanyaan terakhir mengenai distribusi gamma, ya itu bisa lebih cocok dengan beberapa parameter, pertanyaan saya persis tentang ini, apakah ada algoritma yang memungkinkan saya untuk mengulang-ulang nilai parameter yang berbeda untuk distribusi yang berbeda dalam daftar? dan kembalikan distribusi yang paling pas dengan paramater yang sesuai?
1
Ya dan tidak. Anda dapat membuat "figur of merit" untuk menghitung set parameter mana yang paling cocok untuk Anda, dan menulis loop "hill-climb" untuk mengoptimalkan nilai figur merit. Salah satu contoh FOM adalah nilai-R untuk kecocokan regresi.
Carl Witthoft
saya berlangganan +1 ini.
4
@shachem Anda melewatkan poin tentang gamma. Distribusi dengan parameter tambahan akan selalu memiliki kemungkinan yang lebih baik, bahkan ketika data berasal dari distribusi dengan parameter yang lebih sedikit . Anda perlu mempertimbangkan ini. Beberapa ukuran kecocokan menyesuaikan untuk efek ini. Sejujurnya, saya pikir hal yang Anda coba lakukan kemungkinan adalah 'menjawab pertanyaan yang salah', agak seperti bertanya 'bagaimana saya mengetahui palu mana yang paling baik untuk ditumbuk dalam sekrup ini'
Glen_b -Reinstate Monica
1
Jika "kemungkinan hanya didefinisikan hingga konstanta multiplikasi," Glen, lalu bagaimana orang dapat memahami pernyataan Anda bahwa "distribusi dengan parameter tambahan akan selalu memiliki kemungkinan yang lebih baik"? Memang, bagaimana mungkin seseorang membandingkan kemungkinan yang begitu tidak terdefinisi? Saya menduga beberapa ide kunci tidak dinyatakan ...
whuber
3

Saya telah menemukan fungsi yang menjawab pertanyaan saya menggunakan matlab. Itu dapat ditemukan di tautan ini: http://www.mathworks.com/matlabcentral/fileexchange/34943

Saya mengambil data vektor sebagai input

   allfitdist(data)

dan mengembalikan informasi berikut untuk distribusi pemasangan terbaik:

   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.

sumber
1
OK, sekarang yang perlu Anda lakukan adalah port-m file ke file-R. :-)
Carl Witthoft
Bahkan tidak! Seperti yang saya sebutkan itu tidak perlu menjadi R-file, jadi fungsi matlab sepenuhnya memecahkan masalah saya :-)
AIC, BIC, AICc, dll. Mungkin merupakan salah satu cara untuk memutuskan, tetapi apakah itu masuk akal benar-benar tergantung pada apa yang Anda coba lakukan. Misalnya apa yang Anda lakukan jika satu distribusi benar-benar dekat dengan yang lain dalam hal log L? Jika yang ingin Anda lakukan adalah memprediksi, maka biasanya mengabaikan model yang dekat dengan kriteria Anda tidak boleh dibuang begitu saja. Misalnya model-rata-rata adalah salah satu cara untuk memperhitungkannya.
Björn