Karışım dağılımlarından örnekleme (I)
Bir karışım dağılımı, yoğunluğu normal dağılım yoğunluklarının (bileşenlerin) doğrusal birleşimi olan bir dağılımdır. Her bileşenin bir ağırlığı (seçilme olasılığı), bir ortalaması ve bir standart sapması vardır (tıpkı diğer normal dağılımlar gibi).
Algoritmayı iki egzersizde adım adım kuracaksın. Bu bölümde, choose_component() tanımını tamamlayarak örnekleme yapılacak bileşeni seçeceksin.
Bu egzersiz, kursun bir parçasıdır
Rcpp ile R Kodunu Optimize Etme
Egzersiz talimatları
Rad alanındakirunif()fonksiyonunu kullanarak0iletotal_weightarasında uniform bir rastgele sayı üret.- While döngüsünün içinde,
xdeğeriniweights'ınj. elemanı kadar azalt.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
#include
using namespace Rcpp;
// [[Rcpp::export]]
int choose_component(NumericVector weights, double total_weight) {
// Generate a uniform random number from 0 to total_weight
double x = ___::___(0, ___);
// Remove the jth weight from x until x is small enough
int j = 0;
while(x >= weights[j]) {
// Subtract jth element of weights from x
___;
j++;
}
return j;
}
/*** R
weights <- c(0.3, 0.7)
# Randomly choose a component 5 times
replicate(5, choose_component(weights, sum(weights)))
*/