8

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...

Tim
  • 108,699
  • 20
  • 212
  • 390
Juan Corredor
  • 117
  • 1
  • 1
  • 4
  • 6
    Why do you think you need a covariance matrix? – kjetil b halvorsen Oct 17 '17 at 15:10
  • 2
    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

3 Answers3

20

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

Sam
  • 758
  • 3
  • 14
2

Following up on Sam's answer:

samps <- replicate(n, runif(d,a,b)) # draw samples
cov(t(samps))  # get the sample covariance matrix
Taylor
  • 18,278
  • 2
  • 31
  • 66
0

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.

Nick
  • 792
  • 5
  • 25