Regresi polinomial digunakan ketika hubungan antara variabel tidak linear.

Pada analisis ini:
- X = Jam Belajar
- Y = Nilai Ujian

Load Data

data <- read.csv("D:/Youtube/Regresi/Polinomial Regression/polinomial.csv")
head(data)
##   X.1        X        Y
## 1   1 3.725465 89.59499
## 2   2 6.729831 91.07812
## 3   3 4.453862 90.65933
## 4   4 7.298104 92.83841
## 5   5 7.642804 88.80217
## 6   6 2.273339 86.60200
# Ambil Variabel
X <- data$X
Y <- data$Y

Scatter Plot

plot(X,Y)

Berdasarkan plot diatas terjadi kenaikan dan pada titik tertentu terjadi penurunan yang mengindikasikan adanya hubungan non linear antara jam belajar dan nilai ujian.

Pemodelan

model_poly <- lm(Y ~ X + I(X^2), data = data)
summary(model_poly)
## 
## Call:
## lm(formula = Y ~ X + I(X^2), data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.3911 -1.2490 -0.0851  1.1498  4.4525 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 70.22140    1.79652  39.088  < 2e-16 ***
## X            7.43921    0.77028   9.658 7.35e-16 ***
## I(X^2)      -0.64713    0.07587  -8.530 1.98e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.944 on 97 degrees of freedom
## Multiple R-squared:  0.5919, Adjusted R-squared:  0.5835 
## F-statistic: 70.34 on 2 and 97 DF,  p-value: < 2.2e-16

Jadi diperoleh model sebagai berikut:

\[ Y=70.22140+7.43921X-0.64713X^2 \]

Visualisasi

library(ggplot2)
ggplot(data, aes(X, Y)) +
  geom_point(color = "blue") +
  stat_smooth(method = "lm",
              formula = y ~ x + I(x^2),
              color = "red",
              se = TRUE) +
  theme_minimal()

Uji Asumsi Klasis

1. Normalitas

library(nortest)
shapiro.test(residuals(model_poly))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_poly)
## W = 0.98908, p-value = 0.5907

Berdasarkan output diatas diperoleh nilai p-value > 0.05 sehingga residual berdistribusi normal

2. Heterokedastisitas

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(model_poly)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_poly
## BP = 0.088398, df = 2, p-value = 0.9568

Berdasarkan output diatas diperoleh nilai p-value > 0.05 sehingga model tidak ada masalah heterokedastisitas

3. Autokorelasi

dwtest(model_poly)
## 
##  Durbin-Watson test
## 
## data:  model_poly
## DW = 2.0769, p-value = 0.6522
## alternative hypothesis: true autocorrelation is greater than 0

Berdasarkan output diatas diperoleh nilai p-value > 0.05 sehingga model tidak ada masalah autokorelasi

Evaluasi Model

res <- model_poly$residuals
# MSE
MSE <- mean(res^2)

# RMSE
RMSE <- sqrt(MSE)

MSE
## [1] 3.664593
RMSE
## [1] 1.914313

Model regresi polinomial ini memiliki tingkat kesalahan yang relatif kecil dan stabil, dengan rata-rata deviasi prediksi sekitar ±1.9, sehingga dapat dianggap cukup baik dalam menjelaskan dan memprediksi Y.