En primer lugar, hay no hay verdadera aleatoriedad en los actuales "números aleatorios" generados por ordenador. Todo pseudoaleatorio generadores utilizan métodos deterministas. (Posiblemente, los ordenadores cuánticos cambiarán eso).
La difícil tarea es idear algoritmos que produzcan un resultado que no pueda distinguirse significativamente de datos procedentes de una fuente verdaderamente aleatoria.
Tienes razón en que establecer una semilla te hace partir de un punto de partida conocido en una larga lista de números pseudoaleatorios. punto de partida en una larga lista de números pseudoaleatorios. Para los generadores implementados en R, Python, etc., la lista es enormemente largo. Lo suficientemente largo como para que ni siquiera el mayor proyecto de simulación factible superará el "período del generador para que los valores comiencen a recircular.
En muchas aplicaciones ordinarias, la gente no pone una semilla. Entonces, una semilla impredecible semilla se elige automáticamente (por ejemplo, a partir de los microsegundos del reloj del sistema operativo). Los generadores pseudoaleatorios de uso general han sido sometidos a baterías de pruebas, en gran parte consistentes en problemas que han problemas que han resultado difíciles de simular con generadores anteriores insatisfactorios.
Normalmente, la salida de un generador consiste en valores que no son, para que, a efectos prácticos, no se pueden distinguir de los números elegidos realmente al azar de la distribución uniforme en $(0,1).$ Entonces esos números pseudoaleatorios se manipulan para que coincidan con los que uno obtendría muestreando al azar de otras distribuciones como la binomial, Poisson, normal, exponencial, etc.
Una prueba de un generador es ver si sus pares sucesivos en "observaciones" simulan como $\mathsf{Unif}(0,1)$ en realidad mira como si estuvieran llenando el cuadrado de la unidad al azar. El aspecto ligeramente jaspeado es el resultado de la variabilidad inherente. Sería muy sospechoso obtener un gráfico que tuviera un aspecto perfectamente uniforme gris. [En algunas resoluciones, puede haber un patrón de moiré regular; por favor cambiar la ampliación hacia arriba o hacia abajo para deshacerse de ese efecto falso si se produce].
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
A veces es útil para poner una semilla. Algunos de estos usos son los siguientes siguientes:
-
Al programar y depurar es conveniente tener una salida predecible. Así que muchos programadores ponen un set.seed
al inicio de un programa hasta que se termine de escribir y depurar.
-
Al enseñar sobre la simulación. Si quiero mostrar a los estudiantes que puedo simular las tiradas de un dado justo utilizando el sample
función en R, podría hacer trampa, ejecutando muchas simulaciones, y eligiendo la que más se acerque al un valor teórico objetivo. Pero eso daría una impresión poco realista de cómo funciona realmente la simulación.
Si establezco una semilla al principio, la simulación obtendrá siempre el mismo resultado. Los estudiantes pueden corregir su copia de mi programa para asegurarse de que da los resultados previstos. Luego pueden ejecutar simulaciones, ya sea con sus propias semillas o dejando que el programa que el programa elija su propio punto de partida.
Por ejemplo, la probabilidad de obtener el total de 10 al lanzar dos dados justos es $$3/36 = 1/12 = 0.08333333.$$ Con un millón de experimentos con 2 dados debería obtener una precisión de dos o tres puestos. El margen de error de simulación del 95% es de aproximadamente $$2\sqrt{(1/12)(11/12)/10^6} = 0.00055.$$
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
-
Cuando se comparten análisis estadísticos que implican simulación. Hoy en día, muchos análisis estadísticos incluyen alguna simulación, por ejemplo, una prueba de permutación o un muestreador de Gibbs. Al mostrar la semilla, se permite que que lean el análisis puedan replicar los resultados con exactitud, si así lo desean.
-
Cuando se escriben artículos académicos que implican la aleatorización. Los artículos académicos suelen pasar por varias rondas de revisión por pares. Un gráfico puede utilizar, por ejemplo, puntos salpicados aleatoriamente para reducir el exceso de gráficos. Si los análisis deben modificarse ligeramente en respuesta a los comentarios de los revisores, es bueno que un jittering particular no cambie entre las rondas de revisión, lo que podría ser desconcertante para los revisores particularmente puntillosos, por lo que se establece una semilla antes del jittering.
7 votos
No me siento capacitado para escribir una respuesta, pero podría encontrar el artículo de Wikipedia sobre el Giro Mersenne esclarecedor, especialmente el sección sobre la inicialización . En resumen, un generador de números pseudoaleatorios como el Mersenne Twister acabará repitiendo su salida. En el caso del MT el periodo tiene una longitud
2^19937 − 1
. La semilla es el punto de esta larguísima secuencia donde comienza el generador. Así que sí, es determinista.5 votos
Un generador de números pseudoaleatorios es una lista fija de números que se repite sin fin. ¿Dónde empieza? Tienes que decirlo.
4 votos
@whuber En realidad creo que tu comentario sería una gran respuesta.