hw<-function(r){ (3-sqrt(1+8*r))/4 }
x<-runif(1000) y<-(x+runif(1000,-hw(0.5),hw(0.5))) %% 1 x and y will have correlation 0.5 and will be uniformly distributed on the unit interval. Replacing 0.5 by any nonnegative number r between 0 and 1 will create correlated uniformly distributed random numbers with correlation r. plot(x,y) will show the construction of the joint distribution of these random numbers. The rest is simple algebra. On 2/20/2011 3:17 AM, Søren Faurby wrote: > I wish to generate a vector of uniformly distributed data with a defined > correlation to another vector > > The only function I have been able to find doing something similar is > corgen from the library ecodist. > > The following code generates data with the desired correlation to the > vector x but the resulting vector y is normal and not uniform distributed > > library(ecodist) > x <- runif(10^5) > y <- corgen(x=x, r=.5)$y > > Do anyone know a similar function generating uniform distributed data or > a way of transforming y to the desired distribution while keeping the > correlation between x and y > > Kind regards, Soren > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.