Generating Multivariate Uniform Distribution in R

Let $d$ a positive integer How to generate a sample of $n$ random variables with a multivariate uniform distribution on the cube $[a,b]^d$ in R?

I don't know what to do. I know that I need a covariance matrix for the random vectors that I will generate...

• Why do you think you need a covariance matrix? – kjetil b halvorsen Oct 17 '17 at 15:10
• If your real task is about discovering the covariance matrix, by using trials, then you may be interested in a direct analytical solution: the variance-covariance matrix for a uniform variable, in Euclidean space, on the cube $[a,b]^d$ is $$cov(x_i,x_j) = \frac{1}{12}(a-b)^2 \cdot \mathbf{I}$$ – Sextus Empiricus Oct 18 '17 at 16:56

It depends a little bit on the terminology, but usually multivariate uniform refers to a distribution where every point in $[a,b]^d$ is equally likely. Hence, the dimensions are independent, and you can draw uniformly between $[a,b]$ d times individually to get a sample from the multivariate uniform.

If you don't want the dimensions to be independent, it might be worth looking into Copulas

samps <- replicate(n, runif(d,a,b)) # draw samples
cov(t(samps))  # get the sample covariance matrix


Following up on the second part Sam's answer:

library(copula)
set.seed(2019)
d <- 2
n <- 1000

indep.cop <- indepCopula(d)
sample    <- rCopula(n, indep.cop)
chisq.test(sample)

#        Pearson's Chi-squared test

# data:  sample
# X-squared = 362.15, df = 1998, p-value = 1

# Warning message:
# In chisq.test(sample) : Chi-squared approximation may be incorrect


Because the p-value is 1, it’s not unreasonable to assume that the dimensions are independent.

• @RichardHardy, yes. Fixed – Nick Oct 2 '20 at 10:23