library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.0 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.1 ✔ tibble 3.1.8
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(rsample)
library(splines)
library(ggplot2)
library(ISLR)
library(boot)
data("Auto")
sum(is.na(Auto))
## [1] 0
#analisis deskiptif awal
summary(Auto)
## mpg cylinders displacement horsepower weight
## Min. : 9.00 Min. :3.000 Min. : 68.0 Min. : 46.0 Min. :1613
## 1st Qu.:17.00 1st Qu.:4.000 1st Qu.:105.0 1st Qu.: 75.0 1st Qu.:2225
## Median :22.75 Median :4.000 Median :151.0 Median : 93.5 Median :2804
## Mean :23.45 Mean :5.472 Mean :194.4 Mean :104.5 Mean :2978
## 3rd Qu.:29.00 3rd Qu.:8.000 3rd Qu.:275.8 3rd Qu.:126.0 3rd Qu.:3615
## Max. :46.60 Max. :8.000 Max. :455.0 Max. :230.0 Max. :5140
##
## acceleration year origin name
## Min. : 8.00 Min. :70.00 Min. :1.000 amc matador : 5
## 1st Qu.:13.78 1st Qu.:73.00 1st Qu.:1.000 ford pinto : 5
## Median :15.50 Median :76.00 Median :1.000 toyota corolla : 5
## Mean :15.54 Mean :75.98 Mean :1.577 amc gremlin : 4
## 3rd Qu.:17.02 3rd Qu.:79.00 3rd Qu.:2.000 amc hornet : 4
## Max. :24.80 Max. :82.00 Max. :3.000 chevrolet chevette: 4
## (Other) :365
#filter 4 kolom data Auto
#mpg sebagai peubah respon
#weight, horsepower, origin sebagai peubah prediktor
auto <- Auto %>% select(mpg,weight,horsepower,origin)
auto$origin <- as.factor(auto$origin)
ggplot(auto, aes(x=horsepower,y=mpg, color=origin))+geom_point(size=1)
Scatter plot horsepower vs mpg dapat digunakan sebagai alat awal untuk
memahami hubungan antara variabel horsepower dan mpg sebelum melakukan
analisis lebih lanjut.
ggplot(auto, aes(x=horsepower,y=mpg, color=origin))+geom_point(size=1)+facet_wrap(~origin)
Plot menunjukkan pola garis lurus yang menurun, maka hal ini menunjukkan
bahwa semakin tinggi horsepower, semakin rendah mpg-nya. Pola garis yang
menurun (negative slope) juga menunjukkan adanya korelasi negatif antara
variablel horsepower dan mpg. Selain itu, diketahui juga bahwa
titik-titik data terkumpul secara erat pada area rentang horsepower
50-100, ini menunjukkan adanya konsentrasi data yang tinggi pada area
tersebut.
ggplot(auto, aes(x=weight,y=mpg, color=origin))+geom_point(size=1)
Plot perbandingan antara weight dengan mpg (miles per gallon) digunakan
untuk memvisualisasikan hubungan antara berat kendaraan (weight) dan
efisiensi bahan bakar (mpg) pada kendaraan.
ggplot(auto,aes(x=weight, y=mpg,color=origin))+geom_point(size=1)+facet_wrap(~origin)
Plot yang dihasilkan menunjukkan pola garis lurus yang menurun, maka hal
ini menunjukkan bahwa semakin tinggi weight, semakin rendah mpg-nya.
Selain itu, plot menunjukkan pola garis yang menurun (negative slope),
maka ini menunjukkan adanya korelasi negatif antara weight dan mpg.
set.seed(123)
deltas = rep(NA, 10)
for (i in 1:10) {
glm.fit = glm(mpg~poly(horsepower, i), data=auto)
deltas[i] = cv.glm(auto, glm.fit, K=10)$delta[1]
}
deltas
## [1] 24.31286 19.26303 19.27008 19.45712 18.77845 19.09834 18.84706 19.43794
## [9] 18.99339 19.91883
dev.new()
plot.new()
plot(1:10, deltas, xlab = "Degree", ylab = "CV Eror", type = "l")
d.min <- which.min(deltas)
points(which.min(deltas), deltas[which.min(deltas)], col = "red", cex = 2, pch = 20)
derajat optimal, d = 5 merupakan derajat optimal untuk optimal yang dipilih CV
lm1 <- lm(mpg ~ horsepower, data = auto)
lm2 <- lm(mpg ~ poly(horsepower, 2), data = auto)
lm3 <- lm(mpg ~ poly(horsepower, 3), data = auto)
lm4 <- lm(mpg ~ poly(horsepower, 4), data = auto)
lm5 <- lm(mpg ~ poly(horsepower, 5), data = auto)
anova(lm1, lm2, lm3, lm4, lm5)
## Analysis of Variance Table
##
## Model 1: mpg ~ horsepower
## Model 2: mpg ~ poly(horsepower, 2)
## Model 3: mpg ~ poly(horsepower, 3)
## Model 4: mpg ~ poly(horsepower, 4)
## Model 5: mpg ~ poly(horsepower, 5)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 390 9385.9
## 2 389 7442.0 1 1943.89 103.8767 < 2.2e-16 ***
## 3 388 7426.4 1 15.59 0.8333 0.361897
## 4 387 7399.5 1 26.91 1.4382 0.231169
## 5 386 7223.4 1 176.15 9.4131 0.002306 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova, P-value, menunjukkan bahwa regresi derajat polinomial tingkat 2 dan 5 memberikan kesesuaian yang wajar dengan data. Diantaranya Polinomial urutan ke-2 memberikan kesesuaian terbaik untuk data.
plot(mpg ~ horsepower, data = auto, col = "gray")
agelims <- range(auto$horsepower)
horsepower.grid <- seq(from = agelims[1], to = agelims[2])
poly2 <- lm(mpg ~ poly(horsepower, 2), data = auto)
preds <- predict(poly2, newdata = list(horsepower = horsepower.grid))
lines(horsepower.grid, preds, col = "blue", lwd = 2, lty = 1)
poly4 <- lm(mpg ~ poly(horsepower, 5), data = auto)
preds4 <- predict(poly4, newdata = list(horsepower = horsepower.grid))
lines(horsepower.grid, preds4, col = "red", lwd = 2, lty=2)
legend("topright", legend=c("poly2", "poly4"),
col=c("blue", "red"), lty=1:2, cex=0.8)
title("fig:1-Degree-1 and 5- Polynomial FIT",outer=FALSE)
cvs <- rep(NA, 10)
for (i in 2:10) {
auto$horsepower.cut <- cut(auto$horsepower, i)
fit <- glm(mpg ~ horsepower.cut, data = auto)
cvs[i] <- cv.glm(auto, fit, K = 10)$delta[1]
}
plot.new()
plot(2:10, cvs[-1], xlab = "Cuts", ylab = "Test Error", type = "l")
d.min <- which.min(cvs)
points(which.min(cvs), cvs[which.min(cvs)], col = "red", cex = 2, pch = 20)
title("Fig:2,10-Fold Cross Validation to find optimal cuts",outer=FALSE)
Dengan menggunakan cross validation, diketahui bahwa pada pembagian
segmen data yang menunjukkan kesalahan pada uji minimum yang berarti
pemotongan optimal terdapat pada simpuk k = 8.
Dengan menggunakan jumlah pemotongan yang optimal, didapatkan prediksi dari mpg menggunakan horsepower dengan cross validation adalah sebagai berikut.
lm.fit = glm(mpg~cut(horsepower, 8), data=auto)
horsepowerlims = range(auto$horsepower)
horsepower.grid = seq(from=horsepowerlims[1], to=horsepowerlims[2])
lm.pred = predict(lm.fit, data.frame(horsepower=horsepower.grid))
plot(mpg~horsepower, data=auto, col="gray")
lines(horsepower.grid, lm.pred, col="darkgreen", lwd=2)
title("Fig:3, Scatter plot of data with fitted line at cuts = 8",outer=FALSE)
fit2=smooth.spline(auto$horsepower, auto$mpg ,cv=TRUE)
## Warning in smooth.spline(auto$horsepower, auto$mpg, cv = TRUE): cross-validation
## with non-unique 'x' values seems doubtful
fit2$df
## [1] 5.784761
Didapatkan fitting pada splines sebesar 5.784761
fit2=lm(mpg~ns(horsepower ,df=5),data=auto)
pred2=predict(fit2,newdata=list(horsepower=horsepower.grid),se=T)
plot(auto$horsepower, auto$mpg ,xlim=horsepowerlims ,cex =.5, col = "darkgrey")
lines(horsepower.grid, pred2$fit, col="red",lwd=2)
title ("Smoothing Spline ")
Dengan menetapkan df=5, dapat menentukan nilai lambda mana yanh
menghasilkan 5 derajat kebebasan, dan memilih tingkat kehalusan dengan
CV , dengan hasil lambda adalah sebagai berikut.
plot(auto$horsepower, auto$mpg ,xlim=horsepowerlims ,cex =.5, col ="darkgrey")
title (" Local Regression ")
fit=loess(mpg~horsepower,span =.2, data=auto)
fit2=loess(mpg~horsepower ,span =.5, data=auto)
lines(horsepower.grid ,predict (fit ,data.frame(horsepower=horsepower.grid)),
col ="red",lwd =2)
lines(horsepower.grid ,predict (fit2,data.frame(horsepower=horsepower.grid)),
col ="blue",lwd =2)
legend("topright",legend=c("Span=0.2" ,"Span=0.5"),
col=c("red","blue"),lty =1, lwd =2, cex =.8)
Dengan menggunakan regresi linear dengan rentang 0,2 dan 0,5 atau biasa
disebut dengan 20% atau 50% pengamatan, jika semakin besar rentangnya
maka semakin halus.
Plot local regression dapat memberikan informasi yang lebih rinci tentang hubungan antara variabel horsepower dan mpg yang bersifat non-linear. Hal ini dapat diketahui dari perubahan bentuk hubungan pada rentang nilai horsepower tertentu. Pada nilai horsepower di kirisaran 100, terlihat bahwa hubungan antara horsepower dan bersifat lebih linier, sedangkan pada rentang horsepower yang lebih tinggi, hubungan tersebut menurun secara cepat.
Bagaimana pengaruh variabel prediktor Horse power terhadap MPG dalam model regresi polinomial dan regresi splines?
Pengaruh variabel prediktor Horse power terhadap MPG menunjukkan bahwa semakin tinggi horsepower, semakin rendah mpg-nya. Pola garis yang menurun (negative slope) juga menunjukkan adanya korelasi negatif antara variablel horsepower dan mpg.Anova, P-value, menunjukkan bahwa regresi derajat polinomial tingkat 2 dan 5 memberikan kesesuaian yang wajar dengan data. Diantaranya Polinomial urutan ke-2 memberikan kesesuaian terbaik untuk data.
Variabel horsepower adalah salah satu variabel untuk memprediksi Miles per Gallon (MPG), variabel ini berpengaruh terhadap MPG yang dapat dianalisis melalui regresi polinomial dan regresi splines. Dalam regresi polinomial, hubungan antara horsepower dengan MPG dapat diasumsikan sebagai polinomial , yang dimana jika koefisien bernilai negatif, maka semakin tinggi nilai horsepower dan semakin rendah nilai MPG. Namun, jika koefisien bernilai positif, maka semakin tinggi nilai horsepower dan semakin tinggi pula nilai MPG.
Dalam regresi splines, hubungan antara horsepower dan MPG dijelaskan pada fungsi spline yang terdiri dari beberapa titik pemotongan. Fungsi dari spline ini sendiri dapat memodelkan hubungan non-linear antara horsepower dengan MPG. Pengaruh horsepower terhadap MPG dalam model splines dapat berbeda di setiap bagian spline. Pada bagian yang rendah, pengaruh horsepower terhadap MPG mungkin lebih besar, sedangkan pada bagian yang tinggi, pengaruhnya mungkin lebih kecil. Oleh karena itu, regresi splines dapat memberikan prediksi yang lebih akurat tentang hubungan antara horsepower dengan MPG.
Secara umum, regresi polinomial ataupun regresi splines dapat digunakan untuk menganalisis pengaruh sebuah variabel prediktor horsepower terhadap MPG. Namun, regresi splines dapat memberikan informasi yang lebih akurat tentang hubungan non-linear antara horsepower dan MPG, sementara regresi polinomial hanya dapat menangkap hubungan polynomial antara variabel tersebut.