Regresi linear adalah metode statistik yang digunakan untuk melihat hubungan antara satu atau lebih variabel bebas (prediktor) dengan variabel terikat (respon). Tujuannya adalah membuat persamaan yang dapat digunakan untuk memahami pola hubungan dan memprediksi nilai dari variabel respon.
Regresi linear sederhana digunakan ketika hanya ada satu variabel bebas yang memengaruhi variabel respon. Regresi linear berganda digunakan ketika ada lebih dari satu variabel bebas yang dipakai untuk memprediksi variabel respon, sehingga hasil prediksi biasanya lebih akurat.
# Model regresi linear sederhana
model1 = lm(mpg ~ hp, data = mtcars)
summary(model1)
##
## Call:
## lm(formula = mpg ~ hp, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.7121 -2.1122 -0.8854 1.5819 8.2360
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.09886 1.63392 18.421 < 2e-16 ***
## hp -0.06823 0.01012 -6.742 1.79e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.863 on 30 degrees of freedom
## Multiple R-squared: 0.6024, Adjusted R-squared: 0.5892
## F-statistic: 45.46 on 1 and 30 DF, p-value: 1.788e-07
# Model regresi linear berganda
model2 = lm(mpg ~ hp + wt, data = mtcars)
summary(model2)
##
## Call:
## lm(formula = mpg ~ hp + wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.941 -1.600 -0.182 1.050 5.854
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.22727 1.59879 23.285 < 2e-16 ***
## hp -0.03177 0.00903 -3.519 0.00145 **
## wt -3.87783 0.63273 -6.129 1.12e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.593 on 29 degrees of freedom
## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148
## F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12
Model 1 menunjukkan bahwa hp berpengaruh negatif terhadap mpg, namun nilai R squared masih rendah sehingga penjelasan varians terbatas. Namun, setelah wt dimasukkan ke model, R squared meningkat menjadi 0.827 dan error menurun, menunjukkan model lebih baik. Hp tetap signifikan tapi pengaruhnya mengecil, sedangkan wt memberikan pengaruh negatif yang kuat terhadap mpg.
Scatter plot adalah grafik yang menampilkan hubungan antara dua variabel dalam bentuk titik-titik. Dengan scatter plot, kita bisa melihat pola hubungan (misalnya positif, negatif, atau tidak ada hubungan) antara variabel respon dan variabel prediktor. Jika ditambahkan garis regresi, kita dapat membandingkan seberapa baik model menjelaskan data.
# Visualisasi Plot model1
plot(mtcars$hp, mtcars$mpg,
main = "Hubungan Antara mpg dan hp",
xlab = "hp", ylab = "mpg", pch = 19)
abline(model1, col = "lightsteelblue", lwd = 2)
# Visualisasi Plot model2
plot(fitted(model2), mtcars$mpg,
main = "Hubungan Antara mpg dengan Prediksi (hp + wt)",
xlab = "Fitted Values", ylab = "mpg", pch = 19)
abline(0, 1, col = "lightpink", lwd = 2)
Grafik pertama menunjukkan kalau semakin besar tenaga mesin (hp), semakin boros bensin (mpg turun). Tapi hasilnya masih kurang pas karena banyak titik yang jauh dari garis. Grafik kedua menambahkan faktor berat mobil (wt). Hasilnya jauh lebih sesuai dengan data, titik-titik lebih mendekati garis. Artinya, konsumsi bensin (mpg) lebih baik dijelaskan oleh gabungan tenaga mesin dan berat mobil, bukan hanya tenaga mesin saja.
Uji linearitas adalah pemeriksaan apakah hubungan antara prediktor (variabel bebas) dan respons (variabel terikat) bersifat linear. Artinya, perubahan pada prediktor menghasilkan perubahan proporsional pada respons.
# Uji Linearitas untuk model1
library(car)
## Warning: package 'car' was built under R version 4.4.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.3
crPlots(model1)
# Uji Linearitas untuk model2
crPlots(model2)
Berdasarkan hasil crPlots, dari Component + Residual Plot, garis magenta (smooth) tidak lurus, tapi melengkung cukup jauh dari garis biru (linear). Sehingga kedua model tidak sepenuhnya linear (ada indikasi hubungan non-linear). Namun, model2 lebih baik dibanding model1, karena tambahan prediktor (wt) membuat model lebih menjelaskan variasi data meskipun linearitas belum sempurna.
Homoskedastisitas adalah asumsi dalam regresi linear yang menyatakan bahwa residual harus memiliki varians yang sama (tidak menyebar terlalu lebar atau menyempit pada nilai tertentu). Jika asumsi ini tidak terpenuhi (terjadi heteroskedastisitas), maka hasil regresi bisa menjadi bias dan uji signifikansi tidak valid.
# Uji Homoskedastisitas
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.4.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(model1)
##
## studentized Breusch-Pagan test
##
## data: model1
## BP = 0.049298, df = 1, p-value = 0.8243
plot(fitted(model1), residuals(model1),
xlab = "Fitted Values", ylab = "Residuals",
main = "Uji Homoskedastisitas Model 1")
abline(h = 0, col = "lavender")
bptest(model2)
##
## studentized Breusch-Pagan test
##
## data: model2
## BP = 0.88072, df = 2, p-value = 0.6438
plot(fitted(model2), residuals(model2),
xlab = "Fitted Values", ylab = "Residuals",
main = "Uji Homoskedastisitas Model 2")
abline(h = 0, col = "pink")
Berdasarkan hasil uji homokedastisitas, kedua model menunjukkan bahwa nilai p-value lebih besar dari 0.05. Sehingga, kedua model merupakan model yang residualnya homogen. Plot residual dan fitted untuk model1 menunjukkan titik-titik menyebar acak di sekitar garis nol, maka hal tersebut mendukung homokedastisitas. Begitu juga model2 yang titik-titiknya menyebar acak, varians residual yang konstan menandakan homokedastisitas terpenuhi.
Dalam regresi linear, salah satu asumsi penting adalah bahwa residual (selisih antara nilai aktual dan nilai prediksi) harus berdistribusi normal. Uji normalitas digunakan untuk mengecek apakah asumsi ini terpenuhi. Jika residual menyebar normal, maka model regresi dapat dianggap valid.
# Uji Normalitas untuk model1
shapiro.test(residuals(model1))
##
## Shapiro-Wilk normality test
##
## data: residuals(model1)
## W = 0.92337, p-value = 0.02568
hist(residuals(model1), main = "Histogram Residuals Model 1")
qqnorm(residuals(model1)); qqline(residuals(model1))
# QQ Plot untuk model1
qqnorm(residuals(model1),
main = "QQ Plot Residuals Model 1")
qqline(residuals(model1), col = "mistyrose", lwd = 2)
# Uji Normalitas untuk model2
shapiro.test(residuals(model2))
##
## Shapiro-Wilk normality test
##
## data: residuals(model2)
## W = 0.92792, p-value = 0.03427
hist(residuals(model2), main = "Histogram Residuals Model 2")
qqnorm(residuals(model2)); qqline(residuals(model2))
# QQ Plot untuk model2
qqnorm(residuals(model2),
main = "QQ Plot Residuals Model 2")
qqline(residuals(model2), col = "peachpuff", lwd = 2)
Dari uji normalitas, Shapiro-Wilk untuk model1 dan model2 menunjukkan nilai p > 0.05, artinya residual keduanya mendekati distribusi normal. Histogram residual model1 dan model2 berbentuk lonceng, menunjukkan sebaran simetris. QQ plot untuk kedua model juga menunjukkan titik-titik mendekati garis diagonal, menandakan residual normal. Dengan demikian, asumsi normalitas terpenuhi untuk kedua model, dan model2 tetap lebih baik karena menambahkan satu prediktor lagi tanpa mengganggu normalitas residual.
Setelah membangun model regresi, kita dapat menggunakannya untuk memprediksi nilai variabel respon berdasarkan variabel prediktor. Fungsi predict() di R memungkinkan kita membuat prediksi sekaligus menampilkan interval kepercayaan (confidence interval) agar hasil lebih informatif.
# Prediksi dengan model
newdata1 = data.frame(hp = 110)
predict(model1, newdata1, interval = "confidence")
## fit lwr upr
## 1 22.59375 21.00634 24.18116
newdata2 = data.frame(hp = 110, wt = 3)
predict(model2, newdata2, interval = "confidence")
## fit lwr upr
## 1 22.09875 21.01879 23.17871
Model1 memperkirakan rata-rata mpg mobil dengan hp 110, tapi hanya berdasarkan tenaga mesin, jadi prediksinya lebih umum. Model2 memperkirakan rata-rata mpg mobil dengan hp 110 dan berat 3, sehingga prediksinya lebih akurat karena mempertimbangkan dua faktor dan menjelaskan lebih banyak variasi mpg.
Multikolinearitas adalah kondisi ketika dua atau lebih variabel bebas dalam model regresi saling berkorelasi tinggi. Jika multikolinearitas terjadi, maka model bisa menjadi tidak stabil karena sulit membedakan pengaruh masing-masing variabel.
# Multikolinearitas
vif(model2)
## hp wt
## 1.766625 1.766625
Nilai VIF untuk hp dan wt sama-sama 1,77, dan jauh di bawah 10, artinya tidak ada masalah multikolinearitas, sehingga kedua variabel bisa digunakan bersamaan di model dengan aman.
Kesimpulan dari analisis regresi linear pada data mtcars dipaparkan pada poin-poin berikut.
Model1 (mpg ~ hp) menunjukkan hubungan negatif antara tenaga mesin dan efisiensi bahan bakar, tapi variasi mpg dijelaskan masih terbatas.
Model2 (mpg ~ hp + wt) lebih baik karena menambahkan berat mobil sebagai prediktor, meningkatkan R squared dan menurunkan error.
Scatter plot model2 menunjukkan prediksi lebih sesuai dengan data dibanding model1.
Residual kedua model tersebar acak di sekitar garis horizontal, artinya hubungan antara prediktor dan mpg bersifat linear.
Uji homoskedastisitas menunjukkan varians residual konstan untuk kedua model.
Uji normalitas Shapiro-Wilk, histogram, dan QQ plot menunjukkan residual mendekati normal untuk kedua model.
Prediksi dengan model2 lebih akurat karena mempertimbangkan dua variabel prediktor.
Uji multikolinearitas untuk model2 menunjukkan VIF rendah (1,77), artinya tidak ada masalah korelasi tinggi antar prediktor.
Secara keseluruhan, model2 lebih stabil, valid, dan mampu menjelaskan variasi mpg lebih baik dibanding model1.