Bagaimana cara menyajikan gain dalam varian yang dijelaskan berkat korelasi Y dan X?


11

Saya mencari cara (secara visual) menjelaskan korelasi linier sederhana untuk siswa tahun pertama.

Cara klasik untuk memvisualisasikan adalah dengan memberikan plot sebaran Y ~ X dengan garis regresi lurus.

Baru-baru ini, saya datang dengan ide untuk memperluas jenis grafik ini dengan menambahkan ke plot 3 lebih banyak gambar, meninggalkan saya dengan: plot pencar y ~ 1, kemudian dari y ~ x, resid (y ~ x) ~ x dan terakhir residu (y ~ x) ~ 1 (berpusat pada rata-rata)

Berikut ini contoh visualisasi tersebut: teks alternatif

Dan kode R untuk memproduksinya:

set.seed(345)
x <- runif(50) * 10
y <- x +rnorm(50)


layout(matrix(c(1,2,2,2,2,3 ,3,3,3,4), 1,10))
plot(y~rep(1, length(y)), axes = F, xlab = "", ylim = range(y))
points(1,mean(y), col = 2, pch = 19, cex = 2)
plot(y~x, ylab = "", )
abline(lm(y~x), col = 2, lwd = 2)

plot(c(residuals(lm(y~x)) + mean(y))~x, ylab = "", ylim = range(y))
abline(h =mean(y), col = 2, lwd = 2)

plot(c(residuals(lm(y~x)) + mean(y))~rep(1, length(y)), axes = F, xlab = "", ylab = "", ylim = range(y))
points(1,mean(y), col = 2, pch = 19, cex = 2)

Yang mengarahkan saya ke pertanyaan saya: Saya akan menghargai setiap saran tentang bagaimana grafik ini dapat ditingkatkan (baik dengan teks, tanda, atau jenis visualisasi lain yang relevan). Menambahkan kode R yang relevan juga akan menyenangkan.

Satu arah adalah untuk menambahkan beberapa informasi dari R ^ 2 (baik dengan teks, atau dengan entah bagaimana menambahkan garis menyajikan besarnya varians sebelum dan setelah pengenalan x) Pilihan lain adalah untuk menyoroti satu titik dan menunjukkan bagaimana itu "lebih baik menjelaskan "terima kasih kepada garis regresi. Masukan apa pun akan dihargai.


1
Pada saat yang sama Anda menunjukkan seberapa baik regresi linier dapat, harap juga tunjukkan kepada audiens Anda bagaimana itu gagal dalam situasi di mana hubungan tidak dijelaskan dengan baik oleh garis lurus:require(mlbench) ; cor( mlbench.smiley()$x ); plot(mlbench.smiley()$x)
DWin

Will do Dwin ... :-)
Tal Galili

Jawaban:


4

Berikut adalah beberapa saran (tentang plot Anda, bukan tentang bagaimana saya menggambarkan analisis korelasi / regresi):

  • Dua plot univariat yang Anda tunjukkan di margin kanan dan kiri dapat disederhanakan dengan panggilan ke rug();
  • Saya menemukan lebih informatif untuk menunjukkan plot densitas dan atau boxplot, yang berisiko menggugah ide asumsi dua normal yang tidak masuk akal dalam konteks ini;YXY
  • Selain garis regresi, ada baiknya menunjukkan perkiraan tren non-parametrik, seperti loess (ini adalah praktik yang baik dan sangat informatif tentang kemungkinan non linearitas lokal);
  • Poin mungkin disorot (dengan berbagai warna atau ukuran) sesuai dengan efek Leverage atau jarak Cook, yaitu salah satu dari tindakan itu yang menunjukkan seberapa berpengaruh nilai individu pada garis regresi yang diperkirakan. Saya akan komentar kedua @ DWin dan saya pikir lebih baik untuk menyoroti bagaimana poin individu "menurunkan" good-of-fit atau mendorong semacam keberangkatan dari asumsi linearitas.

Sebagai catatan, grafik ini mengasumsikan X dan Y adalah data yang tidak berpasangan, jika tidak saya akan tetap menggunakan plot Bland-Altman ( terhadap ), selain sebar scatterplot.( X + Y ) / 2(XY)(X+Y)/2


1

Tidak menjawab pertanyaan persis Anda, tetapi yang berikut ini mungkin menarik dengan memvisualisasikan satu kemungkinan jebakan korelasi linear berdasarkan jawaban dari stackoveflow :

par(mfrow=c(2,1))

set.seed(1)
x <- rnorm(1000)
y <- rnorm(1000)
plot(y~x, ylab = "", main=paste('1000 random values (r=', round(cor(x,y), 4), ')',  sep=''))
abline(lm(y~x), col = 2, lwd = 2)

x <- c(x, 500)
y <- c(y, 500)
cor(x,y)
plot(y~x, ylab = "", main=paste('1000 random values and (500, 500) (r=', round(cor(x,y), 4), ')',  sep=''))
abline(lm(y~x), col = 2, lwd = 2)

teks alternatif

Jawaban @ Gavin Simpson dan @ bill_080 juga mencakup plot korelasi yang bagus dalam topik yang sama.


1

Saya akan memiliki dua plot dua panel, keduanya memiliki plot xy di sebelah kiri, dan histogram di sebelah kanan. Dalam plot pertama, garis horizontal ditempatkan pada rata-rata y dan garis memanjang dari ini ke setiap titik, mewakili residu dari nilai-nilai y dari rata-rata. Histogram dengan ini hanya plot residu ini. Kemudian pada pasangan berikutnya, plot xy berisi garis yang mewakili kesesuaian linier dan lagi garis vertikal yang mewakili residu, yang direpresentasikan dalam histogram di sebelah kanan. Pertahankan sumbu x histogram konstan untuk menyorot pergeseran ke nilai yang lebih rendah dalam kesesuaian linier dengan rata-rata "kesesuaian".


1

Saya pikir apa yang Anda usulkan itu baik, tetapi saya akan melakukannya dalam tiga contoh berbeda

1) X dan Y sama sekali tidak berhubungan. Cukup hapus "x" dari kode r yang menghasilkan y (y1 <-rnorm (50))

2) Contoh yang Anda posting (y2 <- x + rnorm (50))

3) X adalah Y adalah variabel yang sama. Cukup hapus "rnorm (50)" dari kode r yang menghasilkan y (y3 <-x)

Ini akan lebih eksplisit menunjukkan bagaimana meningkatkan korelasi mengurangi variabilitas dalam residu. Anda hanya perlu memastikan bahwa sumbu vertikal tidak berubah dengan setiap plot, yang mungkin terjadi jika Anda menggunakan penskalaan default.

Jadi Anda bisa membandingkan tiga plot r1 vs x, r2 vs x dan r3 vs x. Saya menggunakan "r" untuk mengindikasikan residu dari fit menggunakan y1, y2, dan y3.

Keterampilan R saya dalam merencanakan tidak ada harapan, jadi saya tidak bisa menawarkan banyak bantuan di sini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.