Menyajikan Data dengan Ggplot2
Ggplot2 adalah salah satu paket yang paling populer dalam R untuk membuat plot. Salah satu contoh penggunaannya adalah membuat plot scatter dengan menggunakan data yang kita miliki.
Kita akan menggunakan data yang berisi dua variabel, Diameter dan Height. Kita dapat menghubungkan data ini dengan menggunakan aes() argument dalam geom_point() function.
library(ggplot2)
# Membuat data dummy
set.seed(1)
df <- data.frame(Diameter=sample(1:50,50))
df$Height <- with(df,2*Diameter + .5*Diameter^2 + 4 + rnorm(50,sd=30))
# Membuat plot scatter
ggplot(df, aes(x=Diameter, y=Height)) +
geom_point()
Pada awalnya, plot scatter yang dibuat mungkin tidak apa-apa. Namun, jika kita lihat lebih dekat ke legenda, ggplot2 memperlakukan variabel sex sebagai kuantitatif ketika sebenarnya adalah kategorikal. Kita perlu memberitahu aes() argument dalam geom_point() untuk memperlakukan sex sebagai kategorikal dengan menggunakan argument factor(sex).
Hasilnya lebih baik, namun legenda tidak akan menjadi jelas bagi pembaca. Salah satu cara untuk membuat ggplot2 mengenali entri-entri dalam variabel sex sebagai kategorikal dan membuat legenda lebih bermakna adalah dengan mengubah entri-entri yang berupa angka menjadi non-numerik. Kita akan mengubah semua entri yang memiliki nilai 1 menjadi male dan semua entri yang memiliki nilai 0 menjadi female.
Mari kita ulangi plot scatter.
Plot scatter sekarang terbagi dalam warna berdasarkan sex, dan legenda menjadi lebih bermakna. Untuk membuat plot look fancier, kita dapat mengubah bentuk point dengan menggunakan argument geom_point().
Warna dan bentuk akan dipilih secara otomatis oleh ggplot2. Anda dapat mengubah warna dan bentuk yang Anda inginkan, namun itu menjadi tugas Anda untuk menjelajahi.
Menarik Garis Regresi dengan Ggplot2
Untuk menarik garis regresi, kita tambahkan fungsi geom_smooth() ke kode plot scatter. Namun, geom_smooth() perlu mengetahui jenis garis yang akan dihasilkan, seperti vertical, horizontal, dll. Pada kasus ini, kita ingin membuat garis regresi, yang R menyebutnya sebagai "lm" untuk linear model.
Perhatikan bahwa default untuk geom_smooth() adalah untuk menggambar jangkar kepercayaan untuk mean response, yang akan keluar sebagai band abu-abu. Untuk menghapus band abu-abu, tambahkan argument "se= FALSE" dalam fungsi geom_smooth() seperti berikut.
ggplot(df, aes(x=Diameter, y=Height)) +
geom_point() +
geom_smooth(method="lm", se=FALSE)
Menarik Garis Regresi dan Kurva Pasanggaris dengan Ggplot2
Untuk menggunakan bentuk yang berbeda untuk plot scatter dan menarik garis regresi ke atas plot, kita tambahkan argument "method" dan "se" dalam fungsi geom_smooth() seperti berikut.
ggplot(df, aes(x=Diameter, y=Height)) +
geom_point(shape=16) +
geom_smooth(method="lm", se=FALSE)
Membuat Model Non-Linear dengan Ggplot2
Ada kesalahpahaman di sini tentang linear vs. non-linear models. Model linear adalah linear dalam koefisien. Model non-linear bukan linear. Apakah model adalah linear dalam variabel prediktor (Diameter pada kasus Anda) tidak relevan. Sebaliknya, apakah model memiliki bentuk yang linear atau tidak adalah yang penting.
Pada kasus Anda, model berbentuk:
Height = a * Diameter + b * Diameter^2 + c
adalah model linear. Kita tidak perlu menggunakan nls(…). Kita dapat memilih formula model dalam dua cara, keduanya akan menghasilkan hasil yang sama:
Height~Diameter + I(Diameter^2)
atau
Height~poly(Diameter,2,raw=TRUE)
Cara pertama lebih sederhana kecuali Anda ingin membuat polinomial dari orde yang lebih besar daripada 2. Cara kedua menggunakan fungsi poly(…) untuk membuat polinomial dari orde 2. raw=T menginstruksikan poly(…) untuk membuat polinomial yang tidak berbasis numerik.
ggplot(df, aes(x=Diameter, y=Height)) +
geom_point() +
geom_smooth(method="lm", se=FALSE)
Membuat Kurva Pasanggaris dengan Ggplot2
Untuk menarik garis regresi dan kurva pasanggaris, kita tambahkan fungsi geom_line() dan geom_ribbon() seperti berikut.
ggplot(df, aes(x=Diameter, y=Height)) +
geom_point(shape=16) +
geom_smooth(method="lm", se=FALSE) +
geom_line(aes(y= predict(lm(Height ~ Diameter), newdata=data.frame(Diameter=c(1,50))), colour = "red")) +
geom_ribbon(aes(ymin=predict(lm(Height ~ Diameter), newdata=data.frame(Diameter=c(1,50)), se.fit), ymax=predict(lm(Height ~ Diameter), newdata=data.frame(Diameter=c(1,50)), fit), fill="blue")
Kita dapat menggunakan fungsi predict() untuk membuat prediksi nilai Height berdasarkan model yang kita buat. Kemudian, kita dapat menarik garis regresi dan kurva pasanggaris dengan menggunakan geom_line() dan geom_ribbon().