Tôi có bộ dữ liệu đơn giản sau với hai biến liên tục; I E:
d = data.frame(x=runif(100,0,100),y = runif(100,0,100))
plot(d$x,d$y)
abline(lm(y~x,d), col="red")
cor(d$x,d$y) # = 0.2135273
Tôi cần sắp xếp lại dữ liệu theo cách để có mối tương quan giữa các biến là ~ 0,6. Tôi cần giữ phương tiện và thống kê mô tả khác (sd, min, max, v.v.) của cả hai biến không đổi.
Tôi biết có thể thực hiện hầu hết mọi tương quan với dữ liệu đã cho, ví dụ:
d2 = with(d,data.frame(x=sort(x),y=sort(y)))
plot(d2$x,d2$y)
abline(lm(y~x,d2), col="red")
cor(d2$x,d2$y) # i.e. 0.9965585
Nếu tôi cố gắng sử dụng sample
chức năng cho nhiệm vụ này:
cor.results = c()
for(i in 1:1000){
set.seed(i)
d3 = with(d,data.frame(x=sample(x),y=sample(y)))
cor.results = c(cor.results,cor(d3$x,d3$y))
}
Tôi nhận được khá nhiều mối tương quan:
> summary(cor.results)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.281600 -0.038330 -0.002498 -0.001506 0.034380 0.288800
nhưng phạm vi này phụ thuộc vào số lượng hàng trong khung dữ liệu và giảm khi tăng kích thước.
> d = data.frame(x=runif(1000,0,100),y = runif(1000,0,100))
> cor.results = c()
> for(i in 1:1000){
+ set.seed(i)
+ d3 = with(d,data.frame(x=sample(x),y=sample(y)))
+ cor.results = c(cor.results,cor(d3$x,d3$y))
+ }
> summary(cor.results)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.1030000 -0.0231300 -0.0005248 -0.0005547 0.0207000 0.1095000
Câu hỏi của tôi là:
Làm cách nào để sắp xếp lại tập dữ liệu đó để có được mối tương quan nhất định (tức là 0,7)? (Sẽ rất tốt nếu phương thức sẽ loại bỏ sự phụ thuộc vào kích thước tập dữ liệu)