ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Genera un número aleatorio uniforme de 0 a total_weight usando la función runif() en el espacio de nombres de R.
  • Dentro del bucle while, disminuye el valor de x por el elemento j de weights.

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)))
*/
Editar y ejecutar código