R

Recuperación de las semillas empleadas en procesos aleatorios

Al realizar procesos en lo que se utilizan número aleatorios es una buena práctica fijar la semilla utilizada para garantizar que se puedan reproducir los resultados. En R esto se suele realizar mediante la instrucción set.seed(). Una alternativa a esta práctica puede ser guardar la semilla empleada antes de inicial el proceso y posteriormente recuperarla cuando sea necesario reproducirlo. El valor de la semilla que empleará R para la generación del siguiente número aleatorio se encuentra almacenado en la variable de entorno .Random.seed.

Planteamiento del problema

El procedimiento que se ha de utilizar para recuperar las simulaciones es bastante sencillo, antes de lanzar un proceso en el que se utilicen número aleatorios (generado por el generador de R) se carga en un variable el estado del generador de números aleatorios. En el caso de que sea necesario reproducir los resultados se puede recuperar el estado volviendo a asignar el estado guardado en la variable de entorno.

A modo de ejemplo se ruede realizar una simulación simple. Se pueden generar 100 número aleatorios, sumar su valor y repetir el proceso varias veces con diferentes semillas, esto se puede hacer con siguiente código:

total <- rep(NA, 25)
seeds <- list(NULL)

for(i in 1:25) {
 seeds <- .Random.seed
 total <- sum(sum(runif(100)))
}

En el código se generan 25 veces 10 número aleatorios que se guardan en el vector total, por otro lado, las semillas se guardan en la lista seeds. Ahora para comprobar que se pueden reproducir los resultados simplemente se ha de volver a simular con la semilla adecuada. Esto se puede comprobar con el código:

for(i in 25:1) {
 .Random.seed <- seeds[[i]]
 stopifnot(total[i] == sum(sum(runif(100))))
}

Al ejecutar estas líneas en el caso de que no se cumplan las igualdades la función stopifnot() detendría la ejecución del programa mediante una llamada a la función stop(), cosa que no sucede. Lo que sí sucede por ejemplo en el siguiente caso:

stopifnot(total[1] == sum(sum(runif(100))))

En donde se genera el siguiente error:

Error: total[1] == sum(sum(runif(100))) is not TRUE

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

2 días ago

Augurios deportivos y portadas malditas, o cuando The Economist predice mejor al revés – El bestiario de los indicadores económicos absurdos (parte 3)

Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…

3 días ago

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

5 días ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

1 semana ago

Cómo comparar tendencias con gráficos de líneas en Matplotlib: guía práctica paso a paso

Tienes los datos de tráfico web de los últimos cinco meses desglosados por canal: orgánico,…

2 semanas ago

This website uses cookies.