Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Genereer een uniforme willekeurige waarde van 0 tot total_weight met de functie runif() in de R-namespace.
  • Verlaag binnen de while-lus de waarde van x met het jde element van weights.

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)))
*/
Code bewerken en uitvoeren