Desde una perspectiva puramente probabilística, ambos enfoques son correctos y, por lo tanto, equivalentes. Desde una perspectiva algorítmica, la comparación debe considerar tanto la precisión como el costo informático.
Box-Muller depende de un generador uniforme y cuesta casi lo mismo que este generador uniforme. Como se mencionó en mi comentario, puede escapar sin llamadas de seno o coseno, si no sin el logaritmo:
- generar hasta S = U 2 1 + U 2 2 ≤ 1
U1,U2∼iidU(−1,1)
S=U21+U22≤1
- tomar y defineX1=ZU1Z=−2log(S)/S−−−−−−−−−−√
X1=ZU1, X2=ZU2
El algoritmo de inversión genérico requiere la llamada al cdf normal inverso, por ejemplo qnorm(runif(N))
en R, que puede ser más costoso que el anterior y, lo que es más importante, puede fallar en las colas en términos de precisión, a menos que la función cuantil esté bien codificada.
Para seguir los comentarios hechos por whuber , la comparación de rnorm(N)
y qnorm(runif(N))
es una ventaja del cdf inverso, tanto en tiempo de ejecución:
> system.time(qnorm(runif(10^8)))
sutilisateur système écoulé
10.137 0.120 10.251
> system.time(rnorm(10^8))
utilisateur système écoulé
13.417 0.060 13.472` `
y en términos de ajuste en la cola:
Después de un comentario de Radford Neal en mi blog , quiero señalar que el valor predeterminado rnorm
en R utiliza el método de inversión, por lo tanto, la comparación anterior se refleja en la interfaz y no en el método de simulación en sí. Para citar la documentación de R en RNG:
‘normal.kind’ can be ‘"Kinderman-Ramage"’, ‘"Buggy
Kinderman-Ramage"’ (not for ‘set.seed’), ‘"Ahrens-Dieter"’,
‘"Box-Muller"’, ‘"Inversion"’ (the default), or ‘"user-supplied"’.
(For inversion, see the reference in ‘qnorm’.) The
Kinderman-Ramage generator used in versions prior to 1.7.1 (now
called ‘"Buggy"’) had several approximation errors and should only
be used for reproduction of old results. The ‘"Box-Muller"’
generator is stateful as pairs of normals are generated and
returned sequentially. The state is reset whenever it is selected
(even if it is the current normal generator) and when ‘kind’ is
changed.