LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Erzeuge eine gleichverteilte Zufallszahl von 0 bis total_weight mit der Funktion runif() im R-Namespace.
  • Verringere innerhalb der while-Schleife den Wert von x um das j-te Element von weights.

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)))
*/
Code bearbeiten und ausführen