Bắt đầu ngayBắt đầu miễn phí

Lấy mẫu từ hỗn hợp các phân phối (I)

Một phân phối hỗn hợp là phân phối có mật độ là tổ hợp tuyến tính của các mật độ phân phối chuẩn (các thành phần). Mỗi thành phần có một trọng số (xác suất được chọn), cùng với trung bình và độ lệch chuẩn (giống như bất kỳ phân phối chuẩn nào khác).

Bạn sẽ xây dựng dần thuật toán qua hai bài tập. Ở đây, bạn sẽ chọn thành phần để lấy mẫu bằng cách hoàn thiện định nghĩa choose_component().

Bài tập này là một phần của khóa học

Tối ưu hóa mã R với Rcpp

Xem khóa học

Hướng dẫn bài tập

  • Tạo một số ngẫu nhiên phân phối đều từ 0 đến total_weight bằng hàm runif() trong namespace R.
  • Bên trong vòng lặp while, giảm giá trị của x đi phần tử thứ j của weights.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

#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)))
*/
Chỉnh sửa và Chạy Mã