Cara melakukan regresi linier sederhana di r (langkah demi langkah)
Regresi linier sederhana adalah teknik yang dapat kita gunakan untuk memahami hubungan antara satu variabel penjelas dan satu variabel respon .
Singkatnya, teknik ini menemukan garis yang paling “sesuai” dengan data dan mengambil bentuk berikut:
ŷ = b 0 + b 1 x
Emas:
- ŷ : Perkiraan nilai respons
- b 0 : Asal garis regresi
- b 1 : Kemiringan garis regresi
Persamaan ini dapat membantu kita memahami hubungan antara variabel penjelas dan variabel respons dan (dengan asumsi variabel tersebut signifikan secara statistik) persamaan ini dapat digunakan untuk memprediksi nilai variabel respons dengan mempertimbangkan nilai variabel penjelas.
Tutorial ini memberikan penjelasan langkah demi langkah tentang cara melakukan regresi linier sederhana di R.
Langkah 1: Muat data
Untuk contoh ini, kita akan membuat dataset palsu yang berisi dua variabel berikut untuk 15 siswa:
- Jumlah total jam belajar untuk ujian tertentu
- Hasil ujian
Kami akan mencoba menyesuaikan model regresi linier sederhana dengan menggunakan jam sebagai variabel penjelas dan hasil pemeriksaan sebagai variabel respon.
Kode berikut menunjukkan cara membuat dataset palsu ini di R:
#create dataset df <- data.frame(hours=c(1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14), score=c(64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89)) #view first six rows of dataset head(df) hours score 1 1 64 2 2 66 3 4 76 4 5 73 5 5 74 6 6 81 #attach dataset to make it more convenient to work with attach(df)
Langkah 2: Visualisasikan datanya
Sebelum memasang model regresi linier sederhana, kita harus memvisualisasikan data terlebih dahulu untuk memahaminya.
Pertama, kami ingin memastikan bahwa hubungan antara jam kerja dan skor kira-kira linier, karena ini adalah asumsi besar yang mendasari regresi linier sederhana. Kita dapat membuat diagram sebar sederhana untuk memvisualisasikan hubungan antara dua variabel:
scatter.smooth(hours, score, main=' Hours studied vs. Exam Score ')
Dari grafik terlihat bahwa hubungannya tampak linier. Seiring bertambahnya jumlah jam , skor juga cenderung meningkat secara linier.
Kemudian kita dapat membuat diagram kotak untuk memvisualisasikan distribusi hasil ujian dan memeriksa outlier . Secara default, R mendefinisikan observasi sebagai outlier jika observasi tersebut 1,5 kali rentang interkuartil di atas kuartil ketiga (Q3) atau 1,5 kali rentang interkuartil di bawah kuartil pertama (Q1).
Jika observasinya outlier, lingkaran kecil akan muncul di plot kotak:
boxplot(score)
Tidak ada lingkaran kecil di boxplot, artinya tidak ada outlier di dataset kita.
Langkah 3: Lakukan Regresi Linier Sederhana
Setelah kita memastikan bahwa hubungan antar variabel adalah linier dan tidak ada outlier, kita dapat melanjutkan untuk menyesuaikan model regresi linier sederhana dengan menggunakan jam sebagai variabel penjelas dan skor sebagai variabel respons:
#fit simple linear regression model model <- lm(score~hours) #view model summary summary(model) Call: lm(formula = score ~ hours) Residuals: Min 1Q Median 3Q Max -5,140 -3,219 -1,193 2,816 5,772 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 65,334 2,106 31,023 1.41e-13 *** hours 1.982 0.248 7.995 2.25e-06 *** --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 3.641 on 13 degrees of freedom Multiple R-squared: 0.831, Adjusted R-squared: 0.818 F-statistic: 63.91 on 1 and 13 DF, p-value: 2.253e-06
Dari ringkasan model, kita dapat melihat bahwa persamaan regresi yang dipasang adalah:
Skor = 65.334 + 1.982*(jam)
Artinya, setiap tambahan jam belajar dikaitkan dengan peningkatan rata-rata nilai ujian sebesar 1.982 poin. Dan nilai awal sebesar 65.334 memberi tahu kita rata-rata nilai ujian yang diharapkan untuk seorang siswa yang belajar selama nol jam.
Kita juga dapat menggunakan persamaan ini untuk mencari nilai ujian yang diharapkan berdasarkan jumlah jam belajar seorang siswa. Misalnya, seorang siswa yang belajar selama 10 jam harus mencapai nilai ujian 85,15 :
Skor = 65.334 + 1.982*(10) = 85.15
Berikut cara menafsirkan ringkasan model lainnya:
- Pr(>|t|): Ini adalah nilai p yang terkait dengan koefisien model. Karena nilai p untuk jam (2,25e-06) secara signifikan kurang dari 0,05, kita dapat mengatakan bahwa ada hubungan yang signifikan secara statistik antara jam dan skor .
- Multiple R-squared: Angka ini menunjukkan bahwa persentase variasi nilai ujian dapat dijelaskan oleh jumlah jam belajar. Secara umum, semakin besar nilai R-squared suatu model regresi, maka variabel penjelas tersebut semakin mampu memprediksi nilai variabel respon. Dalam hal ini, 83,1% variasi skor dapat dijelaskan oleh jam belajar.
- Kesalahan standar sisa: ini adalah jarak rata-rata antara nilai yang diamati dan garis regresi. Semakin rendah nilainya, semakin mampu garis regresi tersebut berkorespondensi dengan data yang diamati. Dalam hal ini, rata-rata skor yang diamati pada ujian menyimpang sebesar 3,641 poin dari skor yang diprediksi oleh garis regresi.
- F-statistik dan nilai p: F-statistik ( 63.91 ) dan nilai p yang sesuai ( 2.253e-06 ) memberi tahu kita signifikansi model regresi secara keseluruhan, yaitu apakah variabel penjelas dalam model berguna untuk menjelaskan variasi . dalam variabel respons. Karena nilai p dalam contoh ini kurang dari 0,05, model kami signifikan secara statistik dan jam dianggap berguna dalam menjelaskan variasi skor .
Langkah 4: Buat Plot Sisa
Setelah model regresi linier sederhana disesuaikan dengan data, langkah terakhir adalah membuat plot sisa.
Salah satu asumsi utama regresi linier adalah bahwa residu model regresi mendekati terdistribusi normal dan bersifat homoskedastik pada setiap tingkat variabel penjelas. Jika asumsi-asumsi ini tidak terpenuhi, hasil model regresi kami bisa menyesatkan atau tidak dapat diandalkan.
Untuk memverifikasi bahwa asumsi ini terpenuhi, kita dapat membuat plot sisa berikut:
Plot residu versus nilai yang dipasang: Plot ini berguna untuk mengkonfirmasi homoskedastisitas. Sumbu x menampilkan nilai yang dipasang dan sumbu y menampilkan residu. Selama residu tampak terdistribusi secara acak dan seragam di seluruh grafik di sekitar nilai nol, kita dapat berasumsi bahwa homoskedastisitas tidak dilanggar:
#define residuals res <- resid(model) #produce residual vs. fitted plot plot(fitted(model), res) #add a horizontal line at 0 abline(0,0)
Residunya tampak tersebar secara acak di sekitar nol dan tidak menunjukkan pola yang nyata, sehingga asumsi ini terpenuhi.
Plot QQ: Plot ini berguna untuk menentukan apakah residu mengikuti distribusi normal. Jika nilai data pada plot mengikuti garis kira-kira lurus dengan sudut 45 derajat, maka data tersebut berdistribusi normal:
#create QQ plot for residuals qqnorm(res) #add a straight diagonal line to the plot qqline(res)
Residunya sedikit menyimpang dari garis 45 derajat, namun tidak cukup menimbulkan kekhawatiran serius. Kita dapat berasumsi bahwa asumsi normalitas terpenuhi.
Karena residu berdistribusi normal dan homoskedastik, kami memverifikasi bahwa asumsi model regresi linier sederhana terpenuhi. Dengan demikian, keluaran model kami dapat diandalkan.
Kode R lengkap yang digunakan dalam tutorial ini dapat ditemukan di sini .