Aan de slagBegin gratis

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

Bekijk cursus

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.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan 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