Muestreo de una mezcla de distribuciones (I)
Una distribución de mezcla es una distribución cuya densidad es una combinación lineal de densidades de distribuciones normales (componentes). Cada componente tiene un peso (su probabilidad de ser elegido), y una media y desviación estándar (igual que cualquier otra distribución normal).
Vas a construir el algoritmo en dos ejercicios. Aquí elegirás el componente del que muestrear completando la definición de choose_component().
Este ejercicio forma parte del curso
Optimizar código de R con Rcpp
Instrucciones del ejercicio
- Genera un número aleatorio uniforme de
0atotal_weightusando la funciónrunif()en el espacio de nombres deR. - Dentro del bucle while, disminuye el valor de
xpor el elementojdeweights.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
#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)))
*/