Generating data from a uniform distribution using R, without using the runif function
Shravan Vasishth
12/19/2021
One can easily generate data from a uniform(0,1) using the runif function in R:
runif(10)
## [1] 0.25873184 0.06723362 0.07725857 0.65281945 0.43817895 0.35372059
## [7] 0.14399150 0.16840633 0.24538047 0.95230596
But what if one doesn’t have this function and one needs to generate samples from a uniform(0,1)? In rejection sampling, one needs access to uniform(0,1) .
Here is one way to generate uniform data.
Generating samples from a uniform(0,1)
Samples from a uniform can be generated using the linear congruent generator algorithm (https://en.wikipedia.org/wiki/Linear_congruential_generator).
Here is the code in R.
pseudo_unif<-function(mult=16807,
mod=(2^31)-1,
seed=123456789,
size=100000){
U<-rep(NA,size)
x<-(seed*mult+1)%%mod
U[1]<-x/mod
for(i in 2:size){
x<-(x*mult+1)%%mod
U[i]<-x/mod
}
return(U)
}
u<-pseudo_unif()
hist(u,freq=FALSE)
For generating data from any range going from min to max:
gen_unif<-function(low=0,high=100,seed=987654321,
size=10000){
low + (high-low)*pseudo_unif(seed=seed,size=size)
}
hist(gen_unif(),freq=FALSE)
The above code is based on: https://towardsdatascience.com/how-to-generate-random-variables-from-scratch-no-library-used-4b71eb3c8dc7