Perhitungan kemungkinan kapan

8

Saya mencoba menghitung distribusi posterior ini:

(θ|)=i=1npiyi(1pi)1yiallθ,pi|θi=1npiyi(1pi)1yi

Masalahnya adalah bahwa pembilang, yang merupakan produk dari sekelompok probabilitas terlalu kecil. ( saya besar, sekitar 1500).Bernoulli(pi,yi)n

Oleh karena itu, nilai-nilai posterior untuk semua semua bisa dihitung menjadi 0 (saya melakukan perhitungan dalam R).θ

Untuk memperjelas, masing-masing memiliki sendiri , bersama-sama ini 's membuat vektor dari elemen untuk ' s. Setiap memiliki vektor elemen .yipipinn yθnpi

EDIT: Menambahkan contoh reproduksi (untuk pembilang)

p <- sample(seq(0,1,by=0.01), 1500, replace=T)
y <- sample(c(0,1), 1500, replace=T)
dbern(y, p) # 1500-element vector, each element is < 1
prod(dbern(y, p)) # produce 0
exp(sum(log(dbern(y, p)))) # produce 0 since the sum is very negative
Heisenberg
sumber
Apakah Anda mencoba menghitung jumlah log sebagai gantinya?
Ansari
1
Ada diskusi terkait di sini . Ini memiliki beberapa diskusi tambahan tentang beberapa rincian perhitungan tersebut.
Glen_b -Reinstate Monica

Jawaban:

7

Ini adalah masalah umum dengan perhitungan kemungkinan untuk semua model; jenis hal yang biasa dilakukan adalah mengerjakan log, dan menggunakan faktor penskalaan umum yang membawa nilai ke kisaran yang lebih masuk akal.

Dalam hal ini, saya sarankan:

Langkah 1: Pilih yang "khas" θ, θ0. Bagi rumus untuk pembilang dan penyebut istilah umum dengan pembilang untukθ=θ0, untuk mendapatkan sesuatu yang lebih kecil kemungkinannya untuk mengalir.

Langkah 2: bekerja pada skala log, ini berarti bahwa pembilangnya adalah exp dari jumlah perbedaan log, dan penyebutnya adalah jumlah dari exp dari jumlah perbedaan log.

NB: Jika salah satu dari p Anda adalah 0 atau 1, tarik keluar secara terpisah dan jangan mengambil log dari persyaratan itu; mereka mudah dievaluasi apa adanya!

[Dalam istilah yang lebih umum, penskalaan dan pengerjaan skala log ini dapat dilihat sebagai mengambil serangkaian kemungkinan log, li dan melakukan ini: log(ieli)=c+log(ielic). Pilihan yang jelas untukc adalah untuk membuat istilah 0 terbesar, yang meninggalkan kita dengan: log(ieli)=maxi(li)+log(ielimaxi(li)). Perhatikan bahwa ketika Anda memiliki pembilang dan penyebut Anda dapat menggunakan sama untuk keduanya, yang kemudian akan dibatalkan. Di atas, itu sesuai dengan mengambil dengan kemungkinan log tertinggi.]cθ0

Istilah biasa dalam pembilang cenderung lebih moderat dalam ukuran, dan dalam banyak situasi pembilang dan penyebut keduanya relatif masuk akal.

Jika ada berbagai ukuran dalam penyebut, tambahkan yang lebih kecil sebelum menambahkan yang lebih besar.

Jika hanya beberapa istilah yang mendominasi, Anda harus memfokuskan perhatian Anda untuk membuat perhitungan bagi yang relatif akurat.

Glen_b -Reinstate Monica
sumber
Tetapi untuk semua theta, pembilangnya selalu ke 0. Bagaimana saya membagi istilah umum dengan pembilang itu? (Langkah 1)
Heisenberg
1
Langkah 1 adalah aljabar bukan perhitungan komputer. Tujuannya adalah memberi Anda sesuatu di Langkah 2 untuk menghitung yang tidak melemahkan. Kecuali Anda mengatakan itu selalu nol secara aljabar ... dalam hal ini Anda pasti melakukan sesuatu yang seharusnya tidak Anda lakukan.
Glen_b -Reinstate Monica
oke - saya akan mencobanya. Pembilangnya tidak tepat 0, hanya sangat kecil yang tidak dapat dihitung R. Terima kasih!
Heisenberg
3
Ya Tuhan, kau benar! Terima kasih banyak. Semua orang terus mengatakan "gunakan log.likelihood" tetapi hanya Anda yang benar-benar melihat masalahnya.
Heisenberg
1

Coba manfaatkan properti menggunakan logaritma dan penjumlahan daripada mengambil produk angka desimal. Setelah penjumlahan, gunakan saja anti-log untuk mengembalikannya ke bentuk alami Anda. Saya pikir sesuatu seperti ini harus melakukan trik

exp(in(yilog(pi)+(1yi)log(1pi)))gexp(inyilog(pi)+(1yi)log(1pi))

filsuf
sumber
Pembilang dalam saran Anda masih menghasilkan 0 karena jumlah dalam exp () masih sangat negatif (<-1000). Apakah saya melakukan sesuatu yang salah? Terima kasih atas bantuan Anda!
Heisenberg
Nah, jika nilai dalam p sebenarnya 0 atau 1 maka secara otomatis log itu akan menghasilkan -inf dan begitu juga akan log (1-p). Kalau tidak, saya pikir jumlahnya menjadi terlalu kecil untuk dinaikkan kembali ke bentuk semula.
filsuf
2
Perhatikan bahwa Anda dapat menambah dan mengurangi konstanta dari istilah di dalam ekspresi di atas tanpa mengubah hasilnya. pengaturancexp()c sama dengan negatif dari nilai maksimum log(p(θ|))memberikan akurasi numerik terbaik
probabilityislogic