¿Por qué los generadores de números aleatorios como runif()
en R no generan el mismo resultado cada vez?
Por ejemplo:
X <- runif(100)
X
está generando diferentes salidas cada vez.
¿Cuál es la razón para generar diferentes salidas cada vez?
¿Qué funcionalidades tiene en segundo plano para hacer esto?
r
algorithms
random-generation
uniform
Himabindu Kunani
fuente
fuente
Respuestas:
En el fondo, esto no es realmente solo una pregunta R; se relaciona con la generación de números aleatorios de manera más general.
Los números "aleatorios" son muy importantes en muchas partes de las estadísticas. Necesitamos los valores aleatorios que generamos para tener ciertas propiedades, y (generalmente) se requiere un gran esfuerzo para construir generadores de números aleatorios y verificar sus propiedades.
La idea es que queremos obtener una secuencia de valores que sean un buen proxy para números realmente aleatorios. El caballo de batalla habitual de la generación de números aleatorios es la distribución uniforme (a partir de eso construimos otros, como los números aleatorios gaussianos).
Por ejemplo, muchos simplemente trabajan en el anterior:
Vea
?runif
en R y notará que explica sobre la existencia de la semilla aleatoria, con un enlace a la ayuda que?.Random.seed
explica la gran cantidad de generadores de números aleatorios disponibles en R (incluso puede suministrar el suyo). La misma página de ayuda explica que si no ha usado la generación de números aleatorios antes o ha establecido la semilla, para comenzar con la semilla se toma del reloj, y luego se almacena el valor anterior (de modo que el siguiente número aleatorio que obtenga sea el mismo que habría obtenido si hubiera generado un valor más la última vez: recuerda "dónde está".La función
runif
en R (como muchas otras rutinas de generación de números aleatorios en otros paquetes que generalmente pueden hacer algo similar) conoce el lugar donde se guarda la semilla de números aleatorios. Sigue actualizando ese valor a medida que avanza. Por lo tanto, puede funcionar sin tener que pasar explícitamente una semilla, pero aún usa una; si no le diste uno, solo usa el que guardó por última vez.En cuanto a por qué da diferentes resultados cada vez (si no le dice que dé la misma secuencia): hace esto porque los mismos valores cada vez generalmente serían muy contraproducentes: no tendría las propiedades que se repiten tendría un muestreo aleatorio, por lo que no es muy útil para los propósitos para los que utilizamos generadores de números aleatorios.
fuente
Debe establecer la semilla aleatoria para obtener el mismo resultado cada vez. Use ? Set.seed para hacerlo. Considerar:
Quizás le interese leer esto: Razones para usar la función set.seed .
fuente