Steekproeven uit een mengverdeling (I)
Een mengverdeling is een verdeling waarvan de dichtheid een lineaire combinatie is van dichtheden van normale verdelingen (componenten). Elke component heeft een gewicht (de kans om gekozen te worden), en een gemiddelde en standaardafwijking (net als elke andere normale verdeling).
Je bouwt het algoritme op in twee oefeningen. Hier kies je de component waaruit je gaat steekproeven door de definitie van choose_component() af te maken.
Deze oefening maakt deel uit van de cursus
R-code optimaliseren met Rcpp
Oefeninstructies
- Genereer een uniforme willekeurige waarde van
0tottotal_weightmet de functierunif()in deR-namespace. - Verlaag binnen de while-lus de waarde van
xmet hetjde element vanweights.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
#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)))
*/