Simulasikan dari distribusi normal campuran terpotong

9

Saya ingin mensimulasikan sampel dari distribusi normal campuran

p×N(μ1,σ12)+(1p)×N(μ2,σ22)

terbatas pada interval [0,1] dari pada R. Ini berarti saya ingin mensimulasikan campuran terpotong dari distribusi normal.

Saya tahu bahwa ada beberapa algoritma untuk mensimulasikan sebuah terpotong normal (yaitu dari pertanyaan ini ) dan paket yang sesuai dalam R untuk melakukan ini. Tetapi bagaimana saya bisa mensimulasikan campuran terpotong normal? Apakah sama jika saya mensimulasikan dua terpotong normalN(μ1,σ12) dan N(μ2,σ22) untuk membuat campuran terpotong normal?

Alexy
sumber
3
Jika ada pada interval unit, mengapa tidak menggunakan beta daripada normal? Untukα=β>1, distribusinya simetris dan unimodal dan dibatasi pada interval satuan.
Sycorax berkata Reinstate Monica
2
Jika Anda tidak membutuhkan simulasi dengan sangat cepat, Anda dapat melakukannya dengan menggunakan sampel penolakan: (1) sampelxdari campuran dua normals, (2) jikax tidak ada di [0,1], kembali ke langkah 1, (3) keluaranx. (tetapi user777 benar, apakah Anda memiliki alasan yang baik untuk memilih distribusi ini alih-alih campuran betas?)
Elvis
1
@ user777 campuran Truncated Gaussian memiliki distribusi yang berbeda dari distribusi Beta dan tidak dapat ditukar hanya karena Anda dapat menerapkan simetri dan dukungan yang sama.
mjnichol

Jawaban:

13

Simulasi dari normal terpotong mudah dilakukan jika Anda memiliki akses ke fungsi kuantil normal yang tepat. Misalnya, dalam R, mensimulasikan

Nab(μ,σ2)
dimana a dan b menunjukkan batas bawah dan atas dapat dilakukan dengan membalik cdf
Φ(σ1{xμ})Φ(σ1{aμ})Φ(σ1{bμ})Φ(σ1{aμ})
misalnya dalam R

x = mu + sigma * qnorm( pnorm(a,mu,sigma) + 
     runif(1)*(pnorm(b,mu,sigma) - pnorm(a,mu,sigma)) )

Kalau tidak, saya mengembangkan algoritma accept-reject yang terpotong dua puluh tahun yang lalu.

Jika kita mempertimbangkan masalah campuran terpotong, dengan kepadatan

f(x;θ){pφ(x;μ1,σ1)+(1p)φ(x;μ2,σ2)}I[a,b](x)
itu adalah campuran dari distribusi normal terpotong tetapi dengan bobot yang berbeda :
f(x;θ)p{Φ(σ11{bμ1})Φ(σ11{aμ1})}σ11ϕ(σ11{xμ1})Φ(σ11{bμ1})Φ(σ11{aμ1})+(1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}σ21ϕ(σ21{xμ2})Φ(σ21{bμ2})Φ(σ11{aμ2})
Oleh karena itu, untuk mensimulasikan dari campuran normal terpotong, cukup untuk mengambil
x={x1Nab(μ1,σ12)with probability p{Φ(σ11{bμ1})Φ(σ11{aμ1})}/sx2Nab(μ2,σ22)with probability (1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}/s
dimana
s=p{Φ(σ11{bμ1})Φ(σ11{aμ1})}+(1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}

Xi'an
sumber
Mengapa kita tidak bisa mengambil sampel dari normal pertama dengan probabilitas p dan distribusi kedua dengan probabilitas 1 - p?
mjnichol
1
Ah! Saya rasa saya melihat masalahnya. Itu karena seluruh distribusi sedang terpotong, tidak masing-masing distribusi secara terpisah. Jika setiap sub-distribusi campuran dipotong secara individual sebelum ditambahkan ke dalam campuran, maka kita akan dapat dengan mudah mengambil sampel dari distribusi sesuai dengan bobot relatif masing-masing sub-distribusi, bukan?
mjnichol
1
@ mjnichol Ini adalah campuran tetapi dengan bobot berbeda dari p dan 1p.
Xi'an
@ Xi'an: Misalkan kita mempertimbangkan setup yang sedikit berbeda: Bagaimana jika alih-alih membangun distribusi campuran dari Gaussians tertimbang dan kemudian memotong kita malah mencampur dua Gaussi yang sudah terpotong (dengan dukungan yang sama). Jika Gaussians dipotong sebelum pencampuran, apakah kita dapat mengambil sampel dari distribusi dengan mengambil sampel dari Gaussian terpotong pertama dengan probabilitas p dan yang kedua dengan probabilitas 1 - p?
mjnichol
2
@ mjnichol: dalam hal ini, Anda harus melakukannya
pNab(μ1,σ12)+(1p)Nab(μ2,σ22)
jadi ya memang ini akan berhasil.
Xi'an