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
Instruções do exercicio
- Gere um número aleatório uniforme de
0atotal_weightusando a funçãorunif()no namespace doR. - Dentro do laço while, diminua o valor de
xpelo elementojdeweights.
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)))
*/