Lembaga : UIN Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika

1 . Pendahuluan

Smoothing splines adalah pendekatan yang ampuh untuk memperkirakan hubungan fungsional antara prediktor X dan respons Y. Smoothing splines dapat menggunakan fungsi smooth.spline (dalam paket stats) atau fungsi ss (dalam paket npreg). Dokumen ini memberikan latar belakang teoritis tentang smoothing splines, serta contoh-contoh yang menggambarkan bagaimana menggunakan fungsi smooth.spline dan ss. Seperti yang saya tunjukkan dalam tutorial ini, kedua fungsi memiliki sintaks yang sangat mirip, tetapi fungsi ss menawarkan beberapa opsi tambahan.

Regresi spline adalah suatu metode yang digunakan untuk mendapatkan dugaan kurva regresi melalui pendekatan pengepasan data. Metode ini merupakan model polinomial dengan sifat tersegmen yang memberikan fleksibiltas lebih tinggi.Kurva regresi spline dapat menyesuaikan diri secara efektif terhadap perubahan perilaku data, sehingga didapatkan hasil yang mendekati kebenaran (Eubank, 1999). Menurut Cox & O’Sullivan (1996), Kurva regresi spline memiliki kemampuan yang sangat baik untuk menangani data yang perilakunya berubah-ubah pada sub-sub interval tertentu. Menurut Budiantara (2009), model regresi spline mempunyai interpretasi statistik dan interpretasi visual yang sangat khusus dan sangat baik.

Berikut Penerapan Regresi Dari Dua data (Covid-19 Jakarta JULI 2020 & Google Mobility Index) menggunakan Pendekata Smoothing SPLine :

2 . Data Goolgle Mobility Index dan Covid-19 Jakarta Juli 2020

library(readxl) 
## Warning: package 'readxl' was built under R version 4.1.3
Data <- read_excel(path = "LA.xlsx")
Data
plot(Data$Tanggal,Data$Positif)

3 . Data Deskriptif

library(jmv)
## Warning: package 'jmv' was built under R version 4.1.3
# Mendapatkan data descriptive menggunakan fungsi descritptive
descriptives(Data, vars = vars(Positif, grocery_and_pharmacy_percent_change_from_baseline), freq = TRUE)
## 
##  DESCRIPTIVES
## 
##  Descriptives                                                                            
##  --------------------------------------------------------------------------------------- 
##                          Positif     grocery_and_pharmacy_percent_change_from_baseline   
##  --------------------------------------------------------------------------------------- 
##    N                           31                                                   31   
##    Missing                      0                                                    0   
##    Mean                  15748.10                                            -11.83871   
##    Median                15466.00                                            -9.000000   
##    Standard deviation    2971.733                                             8.355026   
##    Minimum               11482.00                                            -30.00000   
##    Maximum               21201.00                                            -3.000000   
##  ---------------------------------------------------------------------------------------

4 . Perbandingan Pendekatan

library(npreg)
## Warning: package 'npreg' was built under R version 4.1.3
## Membuat Prediksi

mod.ss <- ss(Data$Tanggal,Data$Positif, nknots = 10)
Data$prediksi_ss <- mod.ss$y
Data
mod.smsp <- smooth.spline( Data$Tanggal,Data$Positif, nknots = 10)
Data$prediksi_smsp <- mod.smsp$y
Data
# plot method
plot(Data$Tanggal, Data$Positif, lty = 10, col = 'Red', lwd =10)
# plot(mod.ss)
# add lm fit
abline(coef(lm( Data$Positif ~ Data$Tanggal  , data = Data)), lty = 2.5, col = 'blue', lwd =7)
rug(Data$Tanggal)  # add rug to plot

points(Data$Tanggal,mod.ss$y , lty = 2, col = 'Green', lwd = 5)

legend("bottomright", 
       legend = c("Real", "Model SS", "Trends"), 
       lty = 1:3, col = c("Red","Green","Blue"), lwd = 3, bty = "p")

## Membuat Prediksi 1

mod.ss1 <- ss(Data$Tanggal,Data$grocery_and_pharmacy_percent_change_from_baselineF, nknots = 10)
## Warning: Unknown or uninitialised column:
## `grocery_and_pharmacy_percent_change_from_baselineF`.
Data$prediksi_ss1 <- mod.ss1$y
Data
mod.smsp1 <- smooth.spline( Data$Tanggal,Data$grocery_and_pharmacy_percent_change_from_baseline, nknots = 10)
Data$prediksi_smsp1 <- mod.smsp1$y
Data
# Hasil plot

plot(Data$Tanggal, Data$grocery_and_pharmacy_percent_change_from_baseline, lty = 10, col = 'Purple', lwd =5)

# add lm fit
abline(coef(lm( Data$grocery_and_pharmacy_percent_change_from_baseline ~ Data$Tanggal  , data = Data)), lty = 10, col = 'Blue', lwd =5)
lines(Data$Tanggal, Data$prediksi_ss1 , lty = 2, col = 'Green', lwd = 4)
lines(Data$Tanggal, Data$prediksi_smsp1, lty = 4, col = 'Red', lwd = 2)

5 . Korelasi Pearson

Korelasi Pearson merupakan salah satu ukuran korelasi yang digunakan untuk mengukur kekuatan dan arah hubungan linier dari dua veriabel. Dua variabel dikatakan berkorelasi apabila perubahan salah satu variabel disertai dengan perubahan variabel lainnya, baik dalam arah yang sama ataupun arah yang sebaliknya.

cor.test(Data$Positif,Data$grocery_and_pharmacy_percent_change_from_baseline)
## 
##  Pearson's product-moment correlation
## 
## data:  Data$Positif and Data$grocery_and_pharmacy_percent_change_from_baseline
## t = -6.7054, df = 29, p-value = 2.347e-07
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.8885436 -0.5877144
## sample estimates:
##        cor 
## -0.7796846

Dari output tersebut dapat kita simpulkan bahwa adanya hubungan yang signifikan antara Data Positif dan Data grocery_and_pharmacy_percent_change_from_baseline (p-value>0,01). Nilai p-value dalam output R dituliskan 0.0281. Nilai koefisien korelasi r adalah sebesar 0.3944434 yang menunjukkan hubungan yang cukup kuat dan berbanding lurus antara variabel Positif dan grocery_and_pharmacy_percent_change_from_baseline.

6 . Hasil Regresi

model <- lm(Data$Positif ~ Data$grocery_and_pharmacy_percent_change_from_baseline, data = Data)
summary(model)
## 
## Call:
## lm(formula = Data$Positif ~ Data$grocery_and_pharmacy_percent_change_from_baseline, 
##     data = Data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3006.5 -1438.4  -202.3  1191.8  5326.1 
## 
## Coefficients:
##                                                        Estimate Std. Error
## (Intercept)                                            12464.99     596.05
## Data$grocery_and_pharmacy_percent_change_from_baseline  -277.32      41.36
##                                                        t value Pr(>|t|)    
## (Intercept)                                             20.913  < 2e-16 ***
## Data$grocery_and_pharmacy_percent_change_from_baseline  -6.705 2.35e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1893 on 29 degrees of freedom
## Multiple R-squared:  0.6079, Adjusted R-squared:  0.5944 
## F-statistic: 44.96 on 1 and 29 DF,  p-value: 2.347e-07
Data$prediksi_model <- model$fitted.values
Data  
# Menambahkan Histograms
panel.hist <- function(x, ...) {
    usr <- par("usr")
    on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5))
    his <- hist(x, plot = FALSE)
    breaks <- his$breaks
    nB <- length(breaks)
    y <- his$counts
    y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col = rgb(0, 1, 0, alpha = 0.5), ...)
    # lines(density(x), col = 2, lwd = 2) # Uncomment to add density lines
}
# Menyetarakan berdasarkan formula
pairs(Data$Positif~Data$grocery_and_pharmacy_percent_change_from_baseline, data = Data,
      upper.panel = NULL,         # Disabling the upper panel
      diag.panel = panel.hist)    # Adding the histograms

# plot method
plot(Data$Tanggal, Data$Positif, lty = 10, col = 'Red', lwd =5)

#plot(mod.ss)
# add lm fit
abline(coef(lm( Data$Positif ~ Data$Tanggal  , data = Data)), lty = 10, col = 'Blue', lwd =5)
rug(Data$Tanggal)  # add rug to plot

lines(Data$Tanggal,mod.ss$y , lty = 2, col = 'Purple', lwd = 4)

#plot(mod.smsp)

lines(Data$Tanggal, Data$prediksi_model, lty = 2, col = 'Green', lwd = 4)
legend("topleft", 
       legend = c("Real", "Model SS", "Trends", "Regresi Nonparametrik"), 
       lty = 1:4, col = c("Red","Purple","Blue","Green"), lwd = 3, bty = "p")