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

Cómo calcular el tamaño de la muestra para encuestas

Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…

1 día ago

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…

6 días ago

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…

1 semana ago

Nuevo video: cómo activar copiar y pegar en VirtualBox fácilmente

¿Sabías que puedes copiar y pegar texto, archivos o imágenes entre tu sistema operativo principal…

2 semanas ago

Nuevo video: Leer y guardar archivos Excel y CSV en Python

Hoy publicamos un nuevo video en el canal de YouTube de Analytics Lane basado en…

2 semanas ago

Nuevo video en YouTube: Trabajando con archivos JSON en Python

En el canal de YouTube de Analytics Lane hemos publicado un nuevo video donde explicamos…

3 semanas ago

This website uses cookies.