Próbkowanie z mieszaniny rozkładów (I)
Mieszanina rozkładów to rozkład, którego gęstość jest liniową kombinacją gęstości rozkładów normalnych (składników). Każdy składnik ma przypisaną wagę (czyli prawdopodobieństwo jego wyboru) oraz wartość średnią i odchylenie standardowe – tak jak każdy inny rozkład normalny.
Algorytm będziesz budować przez dwa ćwiczenia. W tym wyborze składnika, z którego ma nastąpić próbkowanie, dokończysz definicję funkcji choose_component().
To ćwiczenie jest częścią kursu
Optymalizacja kodu R za pomocą Rcpp
Instrukcje do ćwiczenia
- Wygeneruj jednostajną liczbę losową z zakresu od
0dototal_weight, używając funkcjirunif()z przestrzeni nazwR. - Wewnątrz pętli while zmniejsz wartość
xoj-ty element wektoraweights.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
#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)))
*/