MulaiMulai sekarang secara gratis

Pengambilan sampel dari campuran sebaran (I)

Sebaran campuran adalah sebaran yang kerapatannya merupakan kombinasi linear dari kerapatan sebaran normal (komponen). Setiap komponen memiliki bobot (probabilitas untuk dipilih), serta rata-rata dan simpangan baku (sama seperti sebaran normal lainnya).

Anda akan membangun algoritmenya dalam dua latihan. Di sini Anda akan memilih komponen yang akan diambil sampelnya dengan melengkapi definisi choose_component().

Latihan ini adalah bagian dari kursus

Mengoptimalkan Kode R dengan Rcpp

Lihat Kursus

Petunjuk latihan

  • Hasilkan bilangan acak seragam dari 0 hingga total_weight menggunakan fungsi runif() dalam namespace R.
  • Di dalam while loop, kurangi nilai x dengan elemen ke-j dari weights.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

#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)))
*/
Edit dan Jalankan Kode