Después de ejecutar el código
RNGkind(kind="Mersenne-Twister") # the default anyway
set.seed(123)
n = 10^5
x = runif(n)
print(x[22662] == x[97974])
TRUE
¡es la salida!
Si utilizo, por ejemplo, RNGkind(kind="Knuth-TAOCP-2002")
ocurre lo mismo: Obtengo "sólo" 99 995 valores diferentes en x
. Dados los periodos de ambos generadores aleatorios, los resultados parecen muy poco probables.
¿Estoy haciendo algo mal? Necesito generar al menos un millón de números aleatorios.
Estoy usando Windows 8.1 con la versión 3.6.2 de R; Plataforma: x86_64-w64-mingw32/x64 (64-bit) y RStudio 1.2.5033.
Resultados adicionales:
- Tener una bolsa con $n$ diferentes bolas, elegimos una bola $m$ veces y lo devuelve cada vez. La probabilidad $p_{n, m}$ que todas las bolas elegidas son diferentes es igual a ${n\choose m} / (n^m m!)$ .
- La documentación de R apunta a un enlace donde está disponible la implementación de Mersenne-Twister para máquinas de 64 bits: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt64.html
El muestreo uniforme de $[0, 1]$ se obtiene eligiendo primero un entero aleatorio de 64 bits, por lo que calculé las probabilidades anteriores para los 64 bits y (cuando $p_{64, 10^5}$ resultó ser bastante bajo) caso de 32 bits: $$ p_{2^{64}, 10^5}\doteq 0.9999999999972... \qquad p_{2^{32}, 10^5} \doteq 0.3121... $$
A continuación, he probado con 1000 semillas aleatorias y he calculado la proporción de casos en los que todos los números generados son diferentes: 0,303.
Así que, actualmente, asumo que por alguna razón, se utilizan enteros de 32 bits.