Apa yang Ditunjukkan Scatter Plot
Scatter plot menampilkan hubungan antara dua variabel numerik: setiap observasi menjadi satu titik, yang diposisikan berdasarkan nilai pertamanya di sumbu horizontal dan nilai keduanya di sumbu vertikal. Kalau kedua variabel bergerak bersama, titik-titiknya membentuk pola; kalau tidak, kamu mendapat awan titik tanpa bentuk. Inilah pandangan pertama yang standar sebelum membuat model apa pun, dan R menggambarnya dengan fungsi plot() yang sama seperti yang dibahas di panduan plot().
Kita akan memakai mtcars, dataset bawaan berisi 32 mobil, dan mengajukan pertanyaan fisik: apakah mobil yang lebih berat punya mesin yang lebih bertenaga?
Membuat Plot
wt adalah berat dalam ribuan pon, hp adalah tenaga kuda:
plot(mtcars$wt, mtcars$hp,
main = "Horsepower vs. weight",
xlab = "Weight (1000 lbs)",
ylab = "Horsepower",
pch = 19,
col = "steelblue")
Gambarannya: tiga puluh dua titik padat yang naik dari sudut bawah plot (mobil ringan, sekitar 1,5 di skala berat, dengan tenaga sekitar 60 sampai 90 tenaga kuda) ke arah mobil berat di atas 5 yang melewati 200 tenaga kuda. Kenaikannya jelas, tetapi tidak rapi: pada berat berapa pun, titik-titiknya tersebar di rentang tenaga kuda yang cukup lebar.
Gaya tampilannya memakai perangkat plot dasar yang biasa: pch = 19 untuk lingkaran padat (lingkaran berongga bawaan menghilang di tangkapan layar), col untuk warna, cex = 1.3 kalau titiknya perlu lebih besar. Untuk mewarnai titik berdasarkan variabel kategori ketiga, indeks sebuah vector warna dengan factor: col = c("tomato", "steelblue", "darkgreen")[factor(mtcars$cyl)] memberi setiap jumlah silinder warnanya sendiri.
Membacanya: Arah, Kekuatan, Bentuk
Tiga pertanyaan, berurutan, setiap kali kamu melihat scatter plot:
- Arah. Apakah titik-titiknya naik (hubungan positif) atau turun (negatif) saat kamu menyusuri sumbu horizontal? Di sini titiknya naik: makin berat berarti makin bertenaga. Kalau kamu memplot
mpgterhadapwt, awannya turun: makin berat berarti makin boros. - Kekuatan. Seberapa rapat titik-titiknya mengikuti satu jalur? Pita setipis pensil berarti hubungan yang kuat; semburan yang longgar berarti hubungan yang lemah. Awan ini cukup rapat.
- Bentuk dan kejutan. Apakah jalurnya lurus atau melengkung? Apakah ada kelompok, atau titik yang jauh dari yang lain? Di
mtcars, Maserati Bora mencolok di atas kerumunan: 335 tenaga kuda pada berat yang biasa saja. Satu titik seperti itu bisa menarik garis hasil fitting cukup jauh, itulah sebabnya kamu melihat dulu sebelum membuat model.
Menambahkan Garis Tren
Scatter plot menyatakan sebuah hubungan; garis yang melewatinya merangkum klaim itu. Buat model linear lalu berikan langsung ke abline():
plot(mtcars$wt, mtcars$hp,
pch = 19, col = "steelblue",
xlab = "Weight (1000 lbs)", ylab = "Horsepower")
abline(lm(hp ~ wt, data = mtcars), col = "tomato", lwd = 2)
lm(hp ~ wt) membuat garis kuadrat terkecil (baca formulanya sebagai "hp dijelaskan oleh wt", dengan variabel sumbu vertikal ditulis sebelum ~), dan abline() menggambarnya melintasi plot. Garisnya naik sekitar 46 tenaga kuda per seribu pon. Arti model itu, dan cara membaca ringkasannya, menjadi bahasan regresi linear.
Kalau kamu tidak ingin mengasumsikan garis lurus, lowess() menggambar kurva halus yang mengikuti data ke mana pun arahnya:
lines(lowess(mtcars$wt, mtcars$hp), col = "darkgreen", lwd = 2, lty = 2)
Ketika kurva lowess dan garis lurus kurang lebih sejalan, ringkasan linear itu wajar. Ketika kurvanya melengkung menjauh, hubungannya tidak linear, dan garis lurus akan menggambarkannya secara keliru.
Memeriksa Angkanya dengan cor()
Plot memberimu bentuknya; cor() memberimu kekuatannya dalam satu angka. Langkah ini sepenuhnya berupa output teks, jadi jalankan di sini:
Berat dan tenaga kuda berkorelasi sekitar 0.66, yaitu awan titik naik yang cukup rapat tadi, dalam bentuk angka. Matriksnya menambahkan bahwa mpg berkorelasi negatif dengan kuat terhadap keduanya (sekitar −0.87 dengan berat). Tetapi jaga urutannya: plot dulu, koefisien kemudian. Satu nilai r bisa menyembunyikan sebuah kurva atau membesar karena satu pencilan. Lihat korelasi untuk cara-cara klasik angka ini menyesatkan.
Matriks Scatter Plot: pairs()
Dengan beberapa kolom numerik, menggambar setiap pasangan secara manual cepat membosankan. pairs() melakukannya dalam satu panggilan:
pairs(mtcars[, c("mpg", "wt", "hp")],
pch = 19, col = "steelblue")
Hasilnya grid 3 × 3: nama variabel berjajar di diagonal, dan setiap panel di luar diagonal adalah scatter plot dari satu pasangan, mpg terhadap wt, mpg terhadap hp, wt terhadap hp, masing-masing muncul dua kali dengan sumbu yang ditukar. Inilah cara tercepat memilah dataset baru: sekali lihat, kamu tahu pasangan mana yang berhubungan, hubungan mana yang melengkung, dan di mana pencilan bersembunyi. Ambil subset kolomnya dulu, seperti di sini, karena lebih dari enam atau tujuh variabel membuat panelnya mengecil sampai tidak terbaca.
Versi ggplot2
Di ggplot2, scatter plot ditambah garis hasil fitting terdiri dari dua layer:
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = hp)) +
geom_point(color = "steelblue", size = 2) +
geom_smooth(method = "lm", color = "tomato") +
labs(title = "Horsepower vs. weight",
x = "Weight (1000 lbs)", y = "Horsepower")
geom_smooth(method = "lm") adalah abline(lm(...)) dengan bonus: pita kepercayaan berbayang di sekitar garisnya. Kalau method tidak diatur, ia membuat kurva loess, padanan ggplot2 untuk lowess(). R dasar unggul dalam kecepatan mengetik untuk pandangan cepat; ggplot2 unggul begitu kamu ingin titik diwarnai per kelompok dengan legenda otomatis.
Yang Perlu Kamu Ingat
plot(x, y)dengan dua vector numerik adalah scatter plot;pch = 19dan sumbu berlabel membuatnya layak ditampilkan.- Baca arah, kekuatan, dan bentuknya, dan temukan pencilan, sebelum menghitung apa pun.
abline(lm(y ~ x, data = df))menambahkan garis regresi;lines(lowess(x, y))menambahkan kurva yang tidak mengasumsikan garis lurus.cor()mengukur apa yang ditunjukkan plot; plot menjaga angka itu tetap jujur.pairs(df[, cols])menggambar setiap scatter plot berpasangan sekaligus, cara tercepat memilah dataset baru.
Berikutnya: diagram batang, meninggalkan pasangan numerik untuk membandingkan jumlah antarkategori.
Pertanyaan yang sering diajukan
Bagaimana cara membuat scatter plot di R?
Panggil plot(x, y) dengan dua vector numerik, misalnya plot(mtcars$wt, mtcars$hp). Setiap observasi menjadi satu titik. Tambahkan pch = 19 untuk titik padat, serta main, xlab, ylab untuk label.
Bagaimana cara menambahkan garis regresi ke scatter plot di R?
Buat modelnya lalu berikan ke abline(): abline(lm(hp ~ wt, data = mtcars)) menggambar garis kuadrat terkecil di atas plot yang sudah ada. Perhatikan urutan formulanya: variabel sumbu vertikal ditulis sebelum ~.
Bagaimana cara memplot banyak pasangan variabel sekaligus di R?
pairs(df) menggambar matriks scatter plot: satu panel kecil untuk setiap pasangan kolom. Ambil subset dulu, misalnya pairs(mtcars[, c("mpg", "wt", "hp")]), karena lebih dari enam atau tujuh kolom membuat panelnya terlalu kecil untuk dibaca.
Apa yang ditunjukkan scatter plot tetapi tidak ditunjukkan korelasi?
Bentuknya. Koefisien korelasi hanyalah satu angka, dan bisa identik untuk garis yang rapi, kurva, atau awan titik dengan satu pencilan ekstrem. Scatter plot menunjukkan lengkungan, kelompok, dan pencilan secara langsung, itulah sebabnya kamu membuat plot lebih dulu dan menghitung cor() sesudahnya.