Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Wygeneruj jednostajną liczbę losową z zakresu od 0 do total_weight, używając funkcji runif() z przestrzeni nazw R.
  • Wewnątrz pętli while zmniejsz wartość x o j-ty element wektora weights.

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)))
*/
Edytuj i uruchom kod