Comece agoraComece grátis

Amostragem de uma mistura de distribuições (I)

Uma distribuição de mistura é uma distribuição cuja densidade é uma combinação linear de densidades de distribuições normais (componentes). Cada componente tem um peso (sua probabilidade de ser escolhido), além de uma média e um desvio padrão (como qualquer outra distribuição normal).

Você vai construir o algoritmo ao longo de dois exercícios. Aqui, você vai escolher o componente do qual amostrar completando a definição de choose_component().

Este exercicio faz parte do curso

Otimizando código R com Rcpp

Ver curso

Instruções do exercicio

  • Gere um número aleatório uniforme de 0 a total_weight usando a função runif() no namespace do R.
  • Dentro do laço while, diminua o valor de x pelo elemento j de weights.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

#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)))
*/
Editar e Executar Código