Ich habe den folgenden einfachen Datensatz mit zwei kontinuierlichen Variablen; dh:
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
Ich muss die Daten so umordnen, dass die Korrelation zwischen Variablen ~ 0,6 beträgt. Ich muss die Mittelwerte und andere beschreibende Statistiken (sd, min, max usw.) Beide Variablen konstant halten.
Ich weiß, dass es möglich ist, fast jede Korrelation mit den angegebenen Daten herzustellen, dh:
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
Wenn ich versuche, die sample
Funktion für diese Aufgabe zu verwenden:
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))
}
Ich bekomme ziemlich viele Korrelationen:
> summary(cor.results)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.281600 -0.038330 -0.002498 -0.001506 0.034380 0.288800
Dieser Bereich hängt jedoch von der Anzahl der Zeilen im Datenrahmen ab und nimmt mit zunehmender Größe ab.
> 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
Meine Frage ist:
Wie ordne ich einen solchen Datensatz neu an, um eine gegebene Korrelation zu erhalten (dh 0,7)? (Es ist auch gut, wenn die Methode die Abhängigkeit von der Datensatzgröße beseitigt.)