Začněte nyníZačněte zdarma

Vzorkování ze směsi rozdělení (I)

Směs rozdělení je rozdělení, jehož hustota je lineární kombinací hustot normálních rozdělení (komponent). Každá komponenta má svou váhu (pravděpodobnost, že bude vybrána) a také střední hodnotu a směrodatnou odchylku – stejně jako každé jiné normální rozdělení.

Algoritmus budeš sestavovat postupně ve dvou cvičeních. Tady vybereme komponentu, ze které budeme vzorkovat – dokončíš definici funkce choose_component().

Toto cvičení je součástí kurzu

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

  • Vygeneruj náhodné číslo z rovnoměrného rozdělení v rozsahu od 0 do total_weight pomocí funkce runif() z jmenného prostoru R.
  • Uvnitř smyčky while sniž hodnotu x o j-tý prvek weights.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

#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)))
*/
Upravit a spustit kód