Stichproben aus einer Mischverteilung (I)
Eine Mischverteilung ist eine Verteilung, deren Dichte eine Linearkombination von Normalverteilungsdichten (Komponenten) ist. Jede Komponente hat ein Gewicht (ihre Auswahlwahrscheinlichkeit) sowie einen Mittelwert und eine Standardabweichung (genau wie jede andere Normalverteilung).
Du baust den Algorithmus in zwei Übungen auf. Hier wählst du die Komponente, aus der gezogen wird, indem du die Definition von choose_component() vervollständigst.
Diese Übung ist Teil des Kurses
R-Code mit Rcpp optimieren
Anleitung zur Übung
- Erzeuge eine gleichverteilte Zufallszahl von
0bistotal_weightmit der Funktionrunif()imR-Namespace. - Verringere innerhalb der while-Schleife den Wert von
xum dasj-te Element vonweights.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
#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)))
*/