Why do the rnorm () and qnorm (runif ()) R commands generate different random numbers?

I set the seed, generate evenly distributed random numbers and use the inverse CDF method to get a set of normally distributed random numbers. Then I reset the seed and generates normally distributed random numbers using rnorm(). The results are different. Does the default random number generator in R generate the Mersenne-Twister algorithm for generating integers? Should not all other random numbers in R (normal, uniform, exponential, etc. Distributions) be some deterministic transformation of these pseudorandom integers?

set.seed(1)
u1 <- runif(5)
u1
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
z1 <- qnorm(u1)
z1
# [1] -0.6264538 -0.3262334  0.1836433  1.3297993 -0.8356286
set.seed(1)
z2 <- rnorm(5)
z2
# [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078

And yes, I see that some elements are consistent, but not necessarily displayed in the same order. Can someone explain?

+4
1

, , , .

, rnorm , .

case INVERSION:
#define BIG 134217728 /* 2^27 */
/* unif_rand() alone is not of high enough precision */
u1 = unif_rand();
u1 = (int)(BIG*u1) + unif_rand();
return qnorm5(u1/BIG, 0.0, 1.0, 1, 0);

, .

, "" , , , .

+2

Source: https://habr.com/ru/post/1628412/


All Articles