Saya memiliki dataset sederhana berikut dengan dua variabel kontinu; yaitu:
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
Saya perlu mengatur ulang data agar memiliki korelasi antara variabel menjadi ~ 0,6. Saya perlu menjaga statistik statistik deskriptif dan lainnya (sd, min, max, dll.) Dari kedua variabel konstan.
Saya tahu adalah mungkin untuk membuat hampir semua korelasi dengan data yang diberikan yaitu:
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
Jika saya mencoba menggunakan sample
fungsi untuk tugas ini:
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))
}
Saya mendapatkan rentang korelasi yang cukup luas:
> summary(cor.results)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.281600 -0.038330 -0.002498 -0.001506 0.034380 0.288800
tetapi rentang ini tergantung pada jumlah baris dalam bingkai data dan menurun dengan bertambahnya ukuran.
> 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
Pertanyaanku adalah:
Bagaimana mengatur ulang dataset tersebut untuk mendapatkan korelasi yang diberikan (yaitu 0,7)? (Ini juga akan baik jika metode akan menghapus ketergantungan pada ukuran dataset)
sumber
Untuk menghasilkan dua distribusi seragam dengan korelasi yang ditentukan, algoritma Ruscio & Kaczetow (2008) akan berfungsi. Mereka menyediakan kode R . Anda kemudian dapat mentransformasikannya dengan fungsi linear sederhana untuk mendapatkan target min, maks, rata-rata, dan SD Anda.
Algoritma Ruscio & Kaczetow
Perhatikan bahwa ini sangat mirip dengan solusi @Sven Hohenstein, kecuali bahwa itu iteratif, sehingga korelasi antara akan semakin dekat dengan korelasi target sampai mereka tidak bisa dibedakan. Juga, perhatikan bahwa algoritma ini dapat digunakan untuk menghasilkan populasi yang besar (misalnya, N = 1 juta) untuk mengambil sampel yang lebih kecil - yang berguna jika Anda perlu memiliki kesalahan pengambilan sampel.
Untuk pos terkait: Korelasi dan distribusi tidak normal
Melestarikan Statistik Deskriptif
Tidak ada jaminan bahwa algoritma akan menghasilkan deskripsi yang sama persis. Namun, karena rerata distribusi seragam dan SD ditentukan oleh min dan maksnya, Anda cukup menyesuaikan min dan maks untuk memperbaiki semuanya.
Referensi:
Ruscio, J., & Kaczetow, W. (2008). Mensimulasikan data nonnormal multivarian menggunakan algoritma iteratif. Penelitian Perilaku Multivariat, 43, 355-381. doi: 10.1080 / 00273170802285693
sumber
Saya menduga bahwa ketika Anda mengatakan "sampel ulang" berarti "simulasi", yang lebih umum. Berikut ini adalah cara paling ringkas yang saya tahu untuk mensimulasikan data normal, bivariat dengan korelasi yang ditentukan. Ganti nilai yang Anda inginkan untuk r dan n.
sumber