Non Linear Regression

Analisis regresi umumnya digunakan untuk data dengan hubungan antara peubah respon (Y) dengan peubah prediktor (X) yang linear dalam parameter. Linear dalam parameter menunjukkan hubungan berordo satu antara peubah respon dengan peubah prediktornya. Oleh karena itu, model regresi adalah Y = Xb + e. Namun dalam banyak kasus, hubungan antara Y dan X tidak linear dalam parameter melainkan memiliki pola hubungan eksponensial dan lainnya. Untuk menangani kasus data yang seperti ini, analisis regresi tak linear adalah solusinya.

Analisis regresi nonlinier terutama menyangkut prediksi respons, inferensi statistik dari estimasi parameter, dan kecocokan model non-linier (Huang et al. 2010) . Konsep dari analisis ini adalah membagi data dalam beberapa bagian kemudian melakukan regresi pada setiap bagian ataupun pemulusan untuk mendekati bentuk regresi. Adapun model regresi nonlinear adalah Y = F(x)+e.

Berikut ini beberapa metode natau teknik yang dapat digunakan dalam analisis regresi non linear dan penerapannya di R.

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(ggplot2)
library(dplyr)
library(purrr)
library(rsample)
## Warning: package 'rsample' was built under R version 4.2.2
library(readxl)

Non Linear Regression Data Bangkitan

set.seed(123)
data.x <- rnorm(1000,1,1)
err <- rnorm(1000)
y <- 6+3*data.x+5*data.x^2+err
plot(data.x,y)

data.x adalah data yang dibangkitkan berdasarkan persamaan kuadratik. Oleh sebab itu, data.x adalah data non linear berordo 2. Plot di atas memberikan gambaran bentuk pola kuadratik yang menunjukkan pola data tidak linear(garis lurus).

Selanjutnya kita akan membandingkan metode regresi manakah yang paling baik digunakan untuk pola data kuadratik seperti pola di atas.

Analisis Regresi Linear

lin.mod <-lm( y~data.x)
plot( data.x,y)
lines(data.x,lin.mod$fitted.values,col="red")

summary(lin.mod)
## 
## Call:
## lm(formula = y ~ data.x)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -7.651 -4.283 -2.606  1.855 45.603 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   5.3740     0.3115   17.25   <2e-16 ***
## data.x       13.5729     0.2194   61.86   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.878 on 998 degrees of freedom
## Multiple R-squared:  0.7931, Adjusted R-squared:  0.7929 
## F-statistic:  3826 on 1 and 998 DF,  p-value: < 2.2e-16

Berdasarkan diagaram pencar hasil model regresi linear, garis regresi banyak yang menyimpang dari kondisi data sebenernya. Cukup terlihat bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini memberikan dugaan kasar bahwa error dari hasil regresi linear yang diperoleh cenderung besar.

Walaupun demikian, hasil R-squared model regresi tersebut cukup baik sebab dapat menjelaskan 79% keragaman data dan 21% lainnya dijelaskan oleh faktor lainnya di luar model.

Analisis Regresi Non Linear

Regresi non linear dapat menggunakan beberapa metode, diantaranya : - Polynomial - Fungsi tangga - logaritma - Fungsi Gausian - Metode Fitting/ - Kurva Lorenz

Polynomial

Regresi polinomial dapat diduga dengan menggunakan MKT (OLS), karena setara dengan linier model dengan prediktornya adalah xi, xi^2, xi^3,…

Model regresi polynomial : yi = b0 + b1Xi + b2Xi^2 + b3Xi^3+…+ bnXi^n dengan i = 1,2,3,… n = banyaknya ordo polynomial

Berdasarkan pola data yang ditunjukkan scatter plot, hubungan antara Y dengan X cenderung kuadratik. Oleh karena itu, polynomial berordo 2 dapat digunakan dengan bantuan asumsi hasil eksplorasi ini.

pol.mod <- lm( y~data.x+I(data.x^2))
ix <- sort( data.x,index.return=T)$ix
plot(data.x,y)
lines(data.x[ix], pol.mod$fitted.values[ix],col="blue", cex=2)

summary(pol.mod)
## 
## Call:
## lm(formula = y ~ data.x + I(data.x^2))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.0319 -0.6942  0.0049  0.7116  3.2855 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.95193    0.04568  130.31   <2e-16 ***
## data.x       3.10732    0.05861   53.02   <2e-16 ***
## I(data.x^2)  4.99081    0.02338  213.48   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.007 on 997 degrees of freedom
## Multiple R-squared:  0.9956, Adjusted R-squared:  0.9956 
## F-statistic: 1.121e+05 on 2 and 997 DF,  p-value: < 2.2e-16

Plot tebaran hasil model regresi nonlinear dengan metode polynomial menunjukkan bahwa hasil metode tersebut sudah menghasilkan garis dugaan regresi yang mengikuti pola data dan cenderung menghasilkan error yang kecil karena sebagian besar amatan berhimpitan, bersinggungan, atau berpotongan dengan garis dugaan regresinya. Model regresi polynomial ini menghasilkan R-squared sebesar 0.9956 yang menunjukkan bahwa 99,56% data amatan dapat dijelaskan oleh model.

Fungsi Tangga

Fungsi tangga menggunakan konsep regresi linear terhadap daerah tertentu dalam data. Fungsi ini membagi data menjadi beberapa daerah (tangga) dan melakukan regresi di setiap daerah tersebut.

range( data.x)
## [1] -1.809775  4.241040
c1 <- as.factor(ifelse(data.x<=0.5,1,0))
c2 <- as.factor(ifelse(data.x<=1 & data.x>0.5,1,0))
c3 <- as.factor(ifelse(data.x<=2.5 & data.x>1,1,0))
c4 <- as.factor(ifelse(data.x>2.5,1,0))
step.mod <- lm(y~c1+c2+c3+c4)
plot(data.x,y,xlim=c(-2,5), ylim=c(-10,70))
lines(data.x,lin.mod$fitted.values,col="red")

summary(step.mod)
## 
## Call:
## lm(formula = y ~ c1 + c2 + c3 + c4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.762  -2.689  -0.441   1.854  49.141 
## 
## Coefficients: (1 not defined because of singularities)
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  59.3994     0.7317   81.18   <2e-16 ***
## c11         -52.5604     0.8183  -64.23   <2e-16 ***
## c21         -48.1373     0.8564  -56.21   <2e-16 ***
## c31         -35.0367     0.7920  -44.24   <2e-16 ***
## c41               NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.294 on 996 degrees of freedom
## Multiple R-squared:  0.8271, Adjusted R-squared:  0.8266 
## F-statistic:  1588 on 3 and 996 DF,  p-value: < 2.2e-16

Berdasarkan hasil regresi dengan fungsi tangga, garis pendugaan regresi yang didapatkan tidak terlalu jauh bersimpangan dengan amatan aslinya. Walaupum demikian, masih cukuo banyak amatan yang berada dilar garis dugaan regresi nonlinear. Hasil model regresi ini dapat menjelaskan 79,29% keragaman amatan dan sisanya oleh faktor lainnya.

Piecewise Cubic Polynominal

Piecewise Cubic Polynomial adalah model lanjutan dari model polynomial berordo 3. Perbedaannya dibandingkan polynomial ordo 3 terletak pada operasi data yang dipartisi terlebih dahulu berdasarkan sebuah atau beberapa kategori lalu dilakukan teknik regresi Non Linear polynomial ordo 3.

dt.all <-cbind(data.x,y)
dt1 <- dt.all[data.x <=1,]
dim(dt1)
## [1] 495   2
dt2 <- dt.all[data.x > 1,]
dim(dt2)
## [1] 505   2

Data dt1 ddan dt2 merupakan data hasil partisi dengan membagi data menjadi 2 bagian dengan jumlah 495 amatan pada dt1 dan 505 pada dt2. Selanjutnya, dt1 dan dt2 akan diregresikan menggunakan metode polynomial ordo 3.

plot(data.x,y, pch=16,col="red")

cub.mod1 <-lm(dt1[,2]~dt1[,1]+I(dt1[,1]^1)+I(dt1[,1]^3))
ix <- sort(dt1[,1],index.return=T)$ix
lines(dt1[ix,1],cub.mod1$fitted.values[ix],col="blue", lwd=2)

cub.mod2 <- lm(dt2[,2]~dt2[,1]+I(dt2[,1]^1)+I(dt2[,1]^3))
ix2 <- sort(dt2[,1],index.return=T)$ix
lines(dt2[ix2,1],cub.mod2$fitted.values[ix2],col="blue",lwd=2)

Plot di atas adalah hasil pemodelan regresi dengan Piecewise Cubic Polynominal. Kekurangan dari teknik ini adalah hasil regresi yang tidak menyatu antara regresi dt1 dan dt2, seperti dalam grafik di atas. Untuk memperoleh hasil model yang menghasilkan grafik regresi bersambung, truncated power basis dapat digunakan.

Perbandingan Model Terbaik

nilai_AIC <- rbind(AIC(lin.mod),
                   AIC(pol.mod),
                   AIC(step.mod))

nama_model <- c("Linear","Poly (ordo=2)","Tangga (breaks=3)")
data.frame(nama_model,nilai_AIC)
##          nama_model nilai_AIC
## 1            Linear  6698.451
## 2     Poly (ordo=2)  2856.470
## 3 Tangga (breaks=3)  6523.108

Berdasarkan hasil perbandingan model regresi di atas, model regresi non linear polynomial merupakan model regresi terbaik untuk mengetahui pola hubungan antara Y dan X karena nilai AIC model tersebut adalah yang paling kecil dibandingkan model lainnya.

Analisis Regresi Non Lienar Data Resikomiopoi

Data yang digunakan dalam ilustrasi berasal dari suatu pemeriksaan terhadap 618 siswa di suatu sekolah. Data ini menghimpun data kebiasaan siswa dalam melakukan kegiatan jarak dekat (seperti membaca, bekerja/bermain komputer, menonton televisi, dan sebagainya) dengan tingkat resiko siswa tersebut terkena rabun jauh atau miopi. Kegiatan jarak dekat ini diukur dalam peubah diopter hour, yakni akumulasi jam dalam seminggu secara rata-rata siswa melakukan aktivitas jarak dekat.

Data ini saya himpun melalui laman https://bagusco.staff.ipb.ac.id/eksplorasi-data/

Impor dan Eksplorasi Data

Resmio <- read_excel("C:/Users/ASUS/OneDrive/Documents/Kuliah/Semester 5/Pengantar Sains Data/PDS Project/Resikomiopi.xlsx")
## New names:
## • `` -> `...1`
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")

Pola hubungan yang terbentuk pada plot tebaran tidak terlihat jelas, walaupun ada kecenderungan pola data bergerak dari kiri bawah ke kanan atas. Hal ini mengindikasikan bahwa hubungan anatar diopeter hour dengan resiko miopi positif yang menunjukkan bahwa siswa dengan jam aktivitas jarak dekatnya banyak, cenderung berisiko untuk menderita miopi.

Analisis Regresi Linear

miop_linear = lm(resiko~diopterhr,data=Resmio)
summary(miop_linear)
## 
## Call:
## lm(formula = resiko ~ diopterhr, data = Resmio)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.11668 -0.06495 -0.01610  0.03101  0.25688 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.1107959  0.0060959  18.175  < 2e-16 ***
## diopterhr   0.0007792  0.0001995   3.905 0.000105 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07945 on 616 degrees of freedom
## Multiple R-squared:  0.02416,    Adjusted R-squared:  0.02258 
## F-statistic: 15.25 on 1 and 616 DF,  p-value: 0.0001045
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr,miop_linear$fitted.values,col="red")

Berdasarkan diagaram pencar hasil model regresi linear di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi linear yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 2,26% keragaman data. Hal ini jelas menunjukkan bahwa model regresi linear tidak baik digunakan dalam data ini.

Regresi Non Linear Polynomial

Data resikomiopi ini memiliki pola antara Y dan X yang tidak begitu jelas. Hal ini menyulitkan kita untuk menentukan pola polynomial yang tepat. Namun, pola data tersebut cenderung memiliki sebuah pola berpangkat genap sebab data tidak pernah bernilai negatif. Oleh karena itu, trial and error dilakukan untuk mendapatkan model terbaik dengan pangkat genap.

Polynomial Ordo 2

pol2.mod <- lm( Resmio$resiko~Resmio$diopterhr+I(Resmio$diopterhr^2))
ix <- sort( Resmio$diopterhr,index.return=T)$ix
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr[ix], pol2.mod$fitted.values[ix],col="blue", cex=2)

summary(pol2.mod)
## 
## Call:
## lm(formula = Resmio$resiko ~ Resmio$diopterhr + I(Resmio$diopterhr^2))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.13570 -0.06617 -0.01571  0.03204  0.21502 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            1.269e-01  9.857e-03  12.871   <2e-16 ***
## Resmio$diopterhr      -4.246e-04  6.141e-04  -0.691   0.4896    
## I(Resmio$diopterhr^2)  1.633e-05  7.882e-06   2.072   0.0387 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07924 on 615 degrees of freedom
## Multiple R-squared:  0.03092,    Adjusted R-squared:  0.02777 
## F-statistic: 9.813 on 2 and 615 DF,  p-value: 6.383e-05

Berdasarkan diagaram pencar hasil model regresi non linear polynomial ordo 2 di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi non linear polynomial ordo 2 yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 2,27% keragaman data. Hal ini jelas menunjukkan bahwa model regresi non linear polynomial ordo 2 tidak baik digunakan dalam data ini.

Polynomial Ordo 4

pol4.mod <- lm( Resmio$resiko~Resmio$diopterhr+I(Resmio$diopterhr^4))
ix <- sort( Resmio$diopterhr,index.return=T)$ix
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr[ix], pol4.mod$fitted.values[ix],col="blue", cex=2)

summary(pol4.mod)
## 
## Call:
## lm(formula = Resmio$resiko ~ Resmio$diopterhr + I(Resmio$diopterhr^4))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.15050 -0.06582 -0.01566  0.03304  0.20913 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           1.230e-01  7.368e-03  16.699  < 2e-16 ***
## Resmio$diopterhr      1.474e-04  2.934e-04   0.502  0.61563    
## I(Resmio$diopterhr^4) 1.723e-09  5.898e-10   2.922  0.00361 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07897 on 615 degrees of freedom
## Multiple R-squared:  0.03752,    Adjusted R-squared:  0.03439 
## F-statistic: 11.99 on 2 and 615 DF,  p-value: 7.819e-06

Berdasarkan diagaram pencar hasil model regresi non linear polynomial ordo 2 di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi non linear polynomial ordo 2 yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 3,44% keragaman data. Hal ini jelas menunjukkan bahwa model regresi non linear polynomial ordo 4 masih tidak baik digunakan dalam data ini, walaupun cenderung lebih baik dibandingkan polynomial ordo 2.

Polynomial Ordo 8

pol8.mod <- lm( Resmio$resiko~Resmio$diopterhr+I(Resmio$diopterhr^8))
ix <- sort( Resmio$diopterhr,index.return=T)$ix
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr[ix], pol8.mod$fitted.values[ix],col="blue", cex=2)

summary(pol8.mod)
## 
## Call:
## lm(formula = Resmio$resiko ~ Resmio$diopterhr + I(Resmio$diopterhr^8))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.14263 -0.06607 -0.01568  0.03377  0.20694 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           1.191e-01  6.421e-03  18.547  < 2e-16 ***
## Resmio$diopterhr      3.946e-04  2.223e-04   1.776 0.076310 .  
## I(Resmio$diopterhr^8) 2.466e-17  6.546e-18   3.767 0.000181 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07861 on 615 degrees of freedom
## Multiple R-squared:  0.04616,    Adjusted R-squared:  0.04306 
## F-statistic: 14.88 on 2 and 615 DF,  p-value: 4.878e-07

Berdasarkan diagaram pencar hasil model regresi non linear polynomial ordo 8 di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi non linear polynomial ordo 8 yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 8 4,306% keragaman data. Hal ini jelas menunjukkan bahwa model regresi non linear polynomial ordo 8 masih tidak baik digunakan dalam data ini, walaupun cenderung lebih baik dibandingkan polynomial ordo 2 dan 4.

Polynomial Ordo 11

pol11.mod <- lm( Resmio$resiko~Resmio$diopterhr+I(Resmio$diopterhr^11))
ix <- sort( Resmio$diopterhr,index.return=T)$ix
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr[ix], pol11.mod$fitted.values[ix],col="blue", cex=2)

summary(pol11.mod)
## 
## Call:
## lm(formula = Resmio$resiko ~ Resmio$diopterhr + I(Resmio$diopterhr^11))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.12627 -0.06637 -0.01633  0.03322  0.20578 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            1.172e-01  6.247e-03  18.761  < 2e-16 ***
## Resmio$diopterhr       4.879e-04  2.109e-04   2.313 0.021038 *  
## I(Resmio$diopterhr^11) 2.641e-23  6.775e-24   3.898 0.000108 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07855 on 615 degrees of freedom
## Multiple R-squared:  0.04769,    Adjusted R-squared:  0.04459 
## F-statistic:  15.4 on 2 and 615 DF,  p-value: 2.983e-07

Berdasarkan diagaram pencar hasil model regresi non linear polynomial ordo 11 di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi non linear polynomial ordo 11 yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 11 4,46% keragaman data. Hal ini jelas menunjukkan bahwa model regresi non linear polynomial ordo 11 masih tidak baik digunakan dalam data ini, walaupun cenderung lebih baik dibandingkan polynomial ordo 2, 4, dan 8. Namun jika melihat hanya pada R-squarednya, maka dapat disimpulkan bahwa model terbaik sementara adalah model polynominal ordo 11.

Fungsi Tangga

range(Resmio$diopterhr)
## [1]   2 101
d1 <- as.factor(ifelse(Resmio$diopterhr<=20,1,0))
d2 <- as.factor(ifelse(Resmio$diopterhr<=40 & Resmio$diopterhr>20,1,0))
d3 <- as.factor(ifelse(Resmio$diopterhr<=60 & Resmio$diopterhr>40,1,0))
d4 <- as.factor(ifelse(Resmio$diopterhr<=80 & Resmio$diopterhr>60,1,0))
d5 <- as.factor(ifelse(Resmio$diopterhr>80,1,0))
step2.mod <- lm(Resmio$resiko~d1+d2+d3+d4+d5)
plot(Resmio$diopterhr,Resmio$resiko, xlab="Diopter Hour (Jam Per Minggu)", ylab= "Resiko Miopi")
lines(Resmio$diopterhr,miop_linear$fitted.values,col="red")
lines(Resmio$diopterhr[ix], step2.mod$fitted.values[ix],col="dark green")

summary(step2.mod)
## 
## Call:
## lm(formula = Resmio$resiko ~ d1 + d2 + d3 + d4 + d5)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.21546 -0.06621 -0.01537  0.03676  0.21308 
## 
## Coefficients: (1 not defined because of singularities)
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.28618    0.03539   8.086 3.30e-15 ***
## d11         -0.15797    0.03571  -4.424 1.15e-05 ***
## d21         -0.16018    0.03576  -4.480 8.92e-06 ***
## d31         -0.14169    0.03667  -3.864 0.000124 ***
## d41         -0.14127    0.03890  -3.631 0.000306 ***
## d51               NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.07914 on 613 degrees of freedom
## Multiple R-squared:  0.03655,    Adjusted R-squared:  0.03026 
## F-statistic: 5.814 on 4 and 613 DF,  p-value: 0.000135

Berdasarkan diagaram pencar hasil model regresi non linear fungsi tangga dengan 5 break di atas, garis dugaan regresi terlihat tidak mampu mewakili keadaan data amatan. Terlihat jelas bahwa banyak amatan yang sangat jauh dari garis dugaan regresinya. Hal ini mengindikasikan bahwa error dari hasil regresi non linear yang diperoleh cenderung besar.Hal ini didukung oleh hasil R-squared model regresi tersebut yang hanya dapat menjelaskan 3,026% keragaman data. Hal ini jelas menunjukkan bahwa model regresi non linear ini masih belum cukup untuk melihat pola hubungan antara diopter hour dengan resiko.

Pembandingan Model Regresi Non Linear

nilai_AIC <- rbind(AIC(miop_linear),AIC(pol2.mod),
                   AIC(pol4.mod),AIC(pol8.mod),
                   AIC(pol8.mod),AIC(step2.mod))

nama_model <- c("Linear","Poly (ordo=2)","Poly (ordo=4)","Poly (ordo=8)","Poly (ordo=11)","Tangga (breaks=3)")
data.frame(nama_model,nilai_AIC)
##          nama_model nilai_AIC
## 1            Linear -1372.513
## 2     Poly (ordo=2) -1374.812
## 3     Poly (ordo=4) -1379.031
## 4     Poly (ordo=8) -1384.607
## 5    Poly (ordo=11) -1384.607
## 6 Tangga (breaks=3) -1374.409

Berdasarkan hasil perbandingan model regresi di atas, model regresi non linear polynomial ordo 11 merupakan model regresi terbaik untuk mengetahui pola hubungan antara Y dan X karena nilai AIC model tersebut adalah yang paling kecil dan nilai R-squared terbesar dibandingkan model lainnya.

Evaluasi Model Menggunakan Cross Validation