Vzorkování ze směsi rozdělení (I)
Směs rozdělení je rozdělení, jehož hustota je lineární kombinací hustot normálních rozdělení (komponent). Každá komponenta má svou váhu (pravděpodobnost, že bude vybrána) a také střední hodnotu a směrodatnou odchylku – stejně jako každé jiné normální rozdělení.
Algoritmus budeš sestavovat postupně ve dvou cvičeních. Tady vybereme komponentu, ze které budeme vzorkovat – dokončíš definici funkce choose_component().
Toto cvičení je součástí kurzu
Optimizing R Code with Rcpp
Pokyny k cvičení
- Vygeneruj náhodné číslo z rovnoměrného rozdělení v rozsahu od
0dototal_weightpomocí funkcerunif()z jmenného prostoruR. - Uvnitř smyčky while sniž hodnotu
xoj-tý prvekweights.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
#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)))
*/