Bagaimana saya bisa mengambil sampel dari distribusi campuran, dan khususnya campuran distribusi normal R
? Misalnya, jika saya ingin mengambil sampel dari:
bagaimana saya bisa melakukan itu?
r
random-generation
mixture
gung - Reinstate Monica
sumber
sumber
Jawaban:
Ini praktik yang baik untuk menghindari
for
loopR
karena alasan kinerja. Solusi alternatif yang mengeksploitasi faktarnorm
adalah vektor:sumber
samples <- rnorm(N)*sds[components]+mus[components]
. Saya merasa lebih mudah untuk membaca :)Secara umum, salah satu cara termudah untuk mengambil sampel dari distribusi campuran adalah sebagai berikut:
Langkah-langkah Algoritma
1) Hasilkan variabel acakU∼ Seragam ( 0 , 1 )
3) Ulangi langkah 1) dan 2) hingga Anda memiliki jumlah sampel yang diinginkan dari distribusi campuran
Sekarang menggunakan algoritma umum yang diberikan di atas, Anda dapat mengambil sampel dari contoh campuran normals Anda dengan menggunakan
R
kode berikut :Yang menghasilkan:
dan sebagai cek kewarasan:
sumber
R
sumber
ifelse()
pernyataan itu, tetapi saya harus mencari tahu nanti. Saya mengganti kode itu dengan loop.R
findInterval()
cumsum()
mu
s
p
mix <- function(n,mu,s,p) { ii <- findInterval(runif(n),cumsum(p))+1; x <- rnorm(n,mean=mu[ii],sd=sqrt(s[ii])); return(x); }
findInterval()
perintah sebelumnya, namun, saya suka menulis kode di sini sesederhana mungkin karena saya ingin itu menjadi alat untuk memahami daripada efisiensi.Sudah memberikan jawaban sempurna, jadi bagi mereka yang ingin mencapai ini dengan Python, inilah solusi saya:
sumber