8 votos

un generador estadístico de orden rápida y uniforme

¿Puede alguien proporcionarme la expresión matemática para este código / función como una manera rápida de generarn ordenado U[0,1] números aleatorios?

 rsunif <- function(n) { n1 <- n+1
   cE <- cumsum(rexp(n1)); cE[seq_len(n)]/cE[n1] }
 

13voto

Lev Puntos 2212

El código R, significa volver (E1,E1+E2,,E1++En)/i=1n+1Ei and the result follows from checking that the differences between the cumulated sums of exponentials renormalised by the overall sum has the same distribution as the differences between order statistics for a uniform sample, Si=U(i)U(i1). Esto está descrito y establecido en la biblia de la simulación, Devroye del No-Aleatorio Uniforme de la Variable aleatoria Generación (1986, pp 207-219):

enter image description here enter image description here enter image description here

y también en Biau Y Devroye Conferencias sobre el Método del Vecino más Cercano (págs. 5-7)

Ejecución de una prueba para comparar este espaciamiento con una orden directa de uniforme variables muestra una clara ventaja de este enfoque (para n=100 y 10⁷ repeticiones, usando R benchmark herramienta).

      test replications elapsed relative user.self sys.self user.child
2   direct          1e7 355.213    4.722   355.112    0.024          0
1 spacings          1e7  75.221    1.000    75.208    0.000          0

aunque el aumento de n n=103reduce la ganancia:

      test replications elapsed relative user.self sys.self user.child
2   direct          1e6  96.225    1.886     96.20        0          0
1 spacings          1e6  51.029    1.000     51.02        0          0

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X