Regresi Linear Smoothing Spline Model

~ Kasus Positif Covid-19 dibandingkan dengan Mobilitas di tempat perbelanjaan dan rekreasi ~


Oleh Sofyan Hadi Rahmawan
Dosen Pengampu Prof. Dr M. Suhartono, M.Kom
Program Magister Informatika
Tanggal 24 Mei 2022

1. Overview

Smoothing merupakan salah satu metode yang digunakan dalam analisis data non parametrik. Tujuan dari smoothing adalah untuk meminimalkan keragaman karakteristik data dari data yang tidak memiliki pengaruh sehingga ciri-ciri dari data akan tampak lebih jelas.

Smooth Spline Model adalah Salah satu model regresi dengan pendekatan non parametrik yang dapat digunakan untuk menduga kurva regresi adalah regresi spline.

Regresi spline merupakan smoothing untuk memplot data dengan mempertimbangkan kemulusan kurva. Spline adalah model polinomial yang tersegmentasi atau terbagi, dan sifat segmen ini memberikan fleksibilitas yang lebih besar daripada model polinomial biasa. Properti ini memungkinkan model regresi spline untuk secara efektif disesuaikan dengan properti lokal data.

Tujuan dari Analisa Data saat ini adalah membandingkan Kasus Positif Covid-19 dengan pergerakan orang di tempat perbelanjaan dan rekreasi. Masing-masing unsur menggunakan Smooth Spline sehingga akan didapat Regresi Linear diantaranya dan memprediksi adakah hubungan keterikatan antara Kasus Positif Covid-19 dan Lokasi tempat perbelanjaan dan rekreasi.

Sumber Data diambil dari Data Covid-19 DKI Jakarta dari website Pemprov DKI Jakarta dan Google mobility index pada bulan Oktober 2021.

2. Aktivasi Library

Pada Analisa regrresi tiga model memerlukan sejumlah library. Library yang digunakan dalam analisa studi kasus ini antara lain:

  1. readxl : library ini digunakan untuk membaca file xls/xlsx
  2. tidyverse : library yang berisi kumpulan fungsi untuk analisa data.
  3. skimr : library untuk membuat ringkasan data.
  4. npreg : library ini digunakan untuk membuat model ss
  5. stats : library ini digunakan untuk membuat model smooth spline

3. Import Dataset

Dataset yang digunakan dalam analisa ini adalah file excell datacovidDKI.xlsx. Berikut view dataset :

View Dataset

Cek Struktur Data

## Rows: 31
## Columns: 13
## $ `Nama Kota`                                        <chr> "Jakarta", "Jakarta~
## $ Tanggal                                            <dttm> 2021-10-01, 2021-1~
## $ Positif                                            <dbl> 857916, 858071, 858~
## $ Dirawat                                            <dbl> 504, 483, 500, 461,~
## $ Sembuh                                             <dbl> 842715, 842842, 842~
## $ Meninggal                                          <dbl> 13524, 13529, 13534~
## $ SelfIsolation                                      <dbl> 1173, 1217, 1235, 1~
## $ retail_and_recreation_percent_change_from_baseline <dbl> -9, -11, -13, -17, ~
## $ grocery_and_pharmacy_percent_change_from_baseline  <dbl> 16, 17, 11, 5, 9, 6~
## $ parks_percent_change_from_baseline                 <dbl> -29, -32, -39, -39,~
## $ transit_stations_percent_change_from_baseline      <dbl> -33, -24, -25, -34,~
## $ workplaces_percent_change_from_baseline            <dbl> -28, -17, -13, -30,~
## $ residential_percent_change_from_baseline           <dbl> 10, 4, 4, 10, 10, 1~

Ringkasan Data

Data summary
Name datacovidjkt
Number of rows 31
Number of columns 13
_______________________
Column type frequency:
character 1
numeric 11
POSIXct 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Nama Kota 0 1 7 7 0 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Positif 0 1 859866.23 1108.04 857916 858971.0 860014 860814.5 861540 ▆▆▃▇▇
Dirawat 0 1 357.77 80.71 256 289.5 348 437.0 504 ▇▅▃▅▃
Sembuh 0 1 844976.61 1373.93 842715 843780.0 845121 846120.5 847021 ▇▃▆▆▇
Meninggal 0 1 13548.77 9.66 13524 13542.0 13551 13555.5 13562 ▁▂▂▇▆
SelfIsolation 0 1 983.06 209.14 618 849.0 978 1202.0 1285 ▅▂▇▂▇
retail_and_recreation_percent_change_from_baseline 0 1 -14.42 3.69 -27 -16.0 -15 -12.5 -6 ▁▁▇▅▂
grocery_and_pharmacy_percent_change_from_baseline 0 1 6.71 5.37 -10 4.0 6 9.0 17 ▁▁▇▅▃
parks_percent_change_from_baseline 0 1 -30.77 6.65 -46 -35.0 -32 -26.0 -15 ▁▆▇▆▂
transit_stations_percent_change_from_baseline 0 1 -29.48 5.04 -44 -32.5 -31 -25.0 -19 ▁▁▇▃▂
workplaces_percent_change_from_baseline 0 1 -24.61 10.56 -65 -28.5 -27 -16.0 -9 ▁▁▁▇▅
residential_percent_change_from_baseline 0 1 8.19 3.11 3 5.0 9 10.0 17 ▅▁▇▁▁

Variable type: POSIXct

skim_variable n_missing complete_rate min max median n_unique
Tanggal 0 1 2021-10-01 2021-10-31 2021-10-16 31

4. Analisa Data Kasus Positif Covid-19

Untuk Analisa Data Kasus Positif Covid-19 digunakan lm model dan smooth-spline model serta visualisasi melalui Plot untuk mengetahui Prediksi Covid-19 kasus Positif Covid-19.

Linear Model (lm) merupakan bentuk regresi model yang paling simple, model ini akan memberikan nilai yang menunjukkan antara Tanggal dan Jumlah Pasien yang dirawat dengan visualisasi plot dalam bentuk garis lurus. Dapat dikatakan lm lebih mengarah pada nilai rata rata (mean) dari data set/data test/data real yang diolah.

Smooth Spline Model adalah Salah satu model regresi dengan pendekatan non parametrik yang dapat digunakan untuk menduga kurva regresi adalah regresi spline.

Regresi spline merupakan smoothing untuk memplot data dengan mempertimbangkan kemulusan kurva. Spline adalah model polinomial yang tersegmentasi atau terbagi, dan sifat segmen ini memberikan fleksibilitas yang lebih besar daripada model polinomial biasa.

4.1 Linear Model kasus POSITIF Covid-19

# linear / tren
model.linear <- lm(datacovidjkt$Positif ~ datacovidjkt$Tanggal, data = datacovidjkt)
model.linear
## 
## Call:
## lm(formula = datacovidjkt$Positif ~ datacovidjkt$Tanggal, data = datacovidjkt)
## 
## Coefficients:
##          (Intercept)  datacovidjkt$Tanggal  
##           -1.437e+06             1.405e-03

VieW Data Prediksi Linear Model Kasus Positif Covid-19

datacovidjkt$prediksi_model.linear <- model.linear$fitted.values
datacovidjkt$prediksi_model.linear
##        1        2        3        4        5        6        7        8 
## 858045.2 858166.6 858288.0 858409.4 858530.8 858652.2 858773.6 858895.0 
##        9       10       11       12       13       14       15       16 
## 859016.4 859137.8 859259.2 859380.6 859502.0 859623.4 859744.8 859866.2 
##       17       18       19       20       21       22       23       24 
## 859987.6 860109.0 860230.4 860351.8 860473.2 860594.6 860716.0 860837.4 
##       25       26       27       28       29       30       31 
## 860958.9 861080.3 861201.7 861323.1 861444.5 861565.9 861687.3

4.2 Smooth Spline Model Kasus Positif Covid-19

# fit using smooth.spline
model.sspline <- smooth.spline(datacovidjkt$Tanggal, datacovidjkt$Positif, nknots = 10)
model.sspline
## Call:
## smooth.spline(x = datacovidjkt$Tanggal, y = datacovidjkt$Positif, 
##     nknots = 10)
## 
## Smoothing Parameter  spar= 0.1678643  lambda= 4.265602e-05 (15 iterations)
## Equivalent Degrees of Freedom (Df): 9.336365
## Penalized Criterion (RSS): 19152.57
## GCV: 1265.104

VieW Data Prediksi Smooth Spline Model Kasus Positif Covid-19

datacovidjkt$prediksi_model.sspline <- model.sspline$y
datacovidjkt$prediksi_model.sspline
##  [1] 857925.6 858060.3 858189.7 858324.6 858472.3 858624.0 858767.3 858893.7
##  [9] 859010.0 859127.2 859256.1 859404.1 859563.6 859723.6 859874.6 860013.6
## [17] 860139.6 860252.4 860355.6 860454.0 860552.4 860654.0 860755.6 860852.6
## [25] 860942.2 861029.0 861119.7 861219.0 861324.7 861432.7 861539.0

4.3 Plot Regresi Linear kasus POSITIF Covid-19

Kasus Positif Covid-19 akan di bandingkan dengan Data Real, Linear Model dan Smooth Spline Model seperti pada gambar dibawah ini

5. Analisa Data Mobility Index DKI Jakarta Tempat perbelanjaan dan rekreasi (retail and recreation)

Untuk Analisa Data Mobility Index Wilayah DKI Jakarta pada tempat perbelanjaan dan rekreasi (retail and recreation) menggunakan lm model dan smooth-spline model serta visualisasi melalui Plot untuk mengetahui Prediksi Mobility Index terhadap berkembangnya kasus Positif Covid 19.

5.1 Linear Model Data Mobility Index DKI Jakarta Tempat perbelanjaan dan rekreasi (retail and recreation)

# linear / tren
model.linear_wp <- lm(datacovidjkt$retail_and_recreation_percent_change_from_baseline ~ datacovidjkt$Tanggal, data = datacovidjkt)
model.linear_wp
## 
## Call:
## lm(formula = datacovidjkt$retail_and_recreation_percent_change_from_baseline ~ 
##     datacovidjkt$Tanggal, data = datacovidjkt)
## 
## Coefficients:
##          (Intercept)  datacovidjkt$Tanggal  
##            4.966e+02            -3.127e-07

VieW Data Prediksi Linear Model Kasus Positif Covid-19

datacovidjkt$prediksi_model.linear_wp <- model.linear_wp$fitted.values
datacovidjkt$prediksi_model.linear_wp
##         1         2         3         4         5         6         7         8 
## -14.01411 -14.04113 -14.06815 -14.09516 -14.12218 -14.14919 -14.17621 -14.20323 
##         9        10        11        12        13        14        15        16 
## -14.23024 -14.25726 -14.28427 -14.31129 -14.33831 -14.36532 -14.39234 -14.41935 
##        17        18        19        20        21        22        23        24 
## -14.44637 -14.47339 -14.50040 -14.52742 -14.55444 -14.58145 -14.60847 -14.63548 
##        25        26        27        28        29        30        31 
## -14.66250 -14.68952 -14.71653 -14.74355 -14.77056 -14.79758 -14.82460

5.2 Smooth Spline Model Data Mobility Index DKI Jakarta Tempat perbelanjaan dan rekreasi (retail and recreation)

# fit using smooth.spline
model.sspline_wp <- smooth.spline(datacovidjkt$Tanggal, datacovidjkt$retail_and_recreation_percent_change_from_baseline, nknots = 10)
model.sspline_wp
## Call:
## smooth.spline(x = datacovidjkt$Tanggal, y = datacovidjkt$retail_and_recreation_percent_change_from_baseline, 
##     nknots = 10)
## 
## Smoothing Parameter  spar= 0.1193636  lambda= 1.901493e-05 (12 iterations)
## Equivalent Degrees of Freedom (Df): 10.16714
## Penalized Criterion (RSS): 158.3183
## GCV: 11.30824

VieW Data Prediksi Smooth Spline Model Data Mobility Index DKI Jakarta Tempat perbelanjaan dan rekreasi (retail and recreation)

datacovidjkt$prediksi_model.sspline_wp <- model.sspline_wp$y
datacovidjkt$prediksi_model.sspline_wp
##  [1]  -8.725376 -11.324472 -14.188463 -15.826442 -15.250892 -13.487850
##  [7] -12.066740 -12.122922 -13.215491 -14.509480 -15.169918 -14.688052
## [13] -13.859985 -13.808038 -15.264773 -17.403738 -19.008724 -19.172871
## [19] -18.226707 -16.810109 -15.562954 -14.988520 -15.043697 -15.548778
## [25] -16.242399 -16.536582 -15.761693 -13.575149 -10.942570  -9.156626
## [31]  -9.509988

5.3 Plot Regresi Linear ata Mobility Index DKI Jakarta Tempat perbelanjaan dan rekreasi (retail and recreation)

Mobility Index di Tempat Bekerja (Workplace) akan di bandingkan dengan Data Real, Linear Model dan Smooth Spline Model seperti pada gambar dibawah ini

Dari visualisasi diatas dengan menggunakan Smooth Spline Model prediksi mobilitas di tempat perbelanjaan dan rekreasi antara -20 dan -10 dengan kurva naik turun yang lebih stabil. Prediksi ini dapat menggambarkan bahwa mobilitas di tempat perbelanjaan dan rekreasi mempunyai angka prediksi yang merata dari tanggal 1 sampai dengan tanggal 31.

6. Korelasi Pearson

Korelasi Pearson adalah alat analisis statistik yang digunakan untuk melihat keeratan hubungan linier antara 2 variabel yang skala datanya adalah interval atau rasio.

Korelasi Pearson Untuk melakukan analisis korelasi Pearson cukup sederhana. Semisal kita ingin mengetahui hubungan antara Kasus Positif Covid-19 dan Mobilitas di Tempat perbelanjaan dan rekreasi (retail and recreation)

cor.test(datacovidjkt$Positif, datacovidjkt$retail_and_recreation_percent_change_from_baseline)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidjkt$Positif and datacovidjkt$retail_and_recreation_percent_change_from_baseline
## t = -0.57683, df = 29, p-value = 0.5685
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4440865  0.2575541
## sample estimates:
##       cor 
## -0.106506

Dari output tersebut dapat kita simpulkan bahwa hubungan sangat lemah Data Kasus Positif Covid-19 dan Mobilitas di tempat perbelanjaan dan rekreasi (retail and recreation) (p-value -0.4440865 s.d. 0,2575541). Nilai p-value dalam output R dituliskan 0,5685 Nilai koefisien korelasi r adalah sebesar -0.106506 yang menunjukkan hubungan sangat lemah

7. Hasil Regresi antara Kasus Positif Covid 19 dengan Mobility Index Tempat perbelanjaan dan rekreasi (retail and recreation)

Setelah dilakukan analisa untuk masing-masing data, maka kedua data tersebut akan di proses melalu linear model, apakah ada keterikatan antara Kasus Positif dan Mobility Index Tempat perbelanjaan dan rekreasi (retail and recreation).

model_gab <- lm(datacovidjkt$Positif ~ datacovidjkt$retail_and_recreation_percent_change_from_baseline, data = datacovidjkt)
summary(model_gab)
## 
## Call:
## lm(formula = datacovidjkt$Positif ~ datacovidjkt$retail_and_recreation_percent_change_from_baseline, 
##     data = datacovidjkt)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1777.13  -786.01    71.05   913.76  1814.93 
## 
## Coefficients:
##                                                                  Estimate
## (Intercept)                                                     859405.67
## datacovidjkt$retail_and_recreation_percent_change_from_baseline    -31.94
##                                                                 Std. Error
## (Intercept)                                                         823.40
## datacovidjkt$retail_and_recreation_percent_change_from_baseline      55.37
##                                                                  t value
## (Intercept)                                                     1043.729
## datacovidjkt$retail_and_recreation_percent_change_from_baseline   -0.577
##                                                                 Pr(>|t|)    
## (Intercept)                                                       <2e-16 ***
## datacovidjkt$retail_and_recreation_percent_change_from_baseline    0.569    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1121 on 29 degrees of freedom
## Multiple R-squared:  0.01134,    Adjusted R-squared:  -0.02275 
## F-statistic: 0.3327 on 1 and 29 DF,  p-value: 0.5685
model_gab$coefficients
##                                                     (Intercept) 
##                                                    859405.66848 
## datacovidjkt$retail_and_recreation_percent_change_from_baseline 
##                                                       -31.94022

Rumus linear regresi menjadi y = 859405.67 - 31.94022 data Mobilitas Index di Tempat perbelanjaan dan rekreasi (retail and recreation)

model_gab$fitted.values
##        1        2        3        4        5        6        7        8 
## 859693.1 859757.0 859820.9 859948.7 859884.8 859884.8 859820.9 859725.1 
##        9       10       11       12       13       14       15       16 
## 859789.0 859852.8 859916.7 859916.7 859884.8 859884.8 859789.0 859884.8 
##       17       18       19       20       21       22       23       24 
## 859980.6 860268.1 859916.7 859852.8 859980.6 859820.9 859884.8 859916.7 
##       25       26       27       28       29       30       31 
## 859916.7 859916.7 860012.5 859852.8 859597.3 859757.0 859725.1
datacovidjkt$prediksi_model_gab <- model_gab$fitted.values

Menambahkan Histogram dan Menyetarakan Formula Kasus Positif Covid-19 dan Mobilitas di Tempat perbelanjaan dan rekreasi (retail and recreation)

# 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, 0, 1, alpha = 0.5), ...)
    # lines(density(x), col = 2, lwd = 2) # Uncomment to add density lines
}
# Menyetarakan berdasarkan formula
pairs(datacovidjkt$Positif ~ datacovidjkt$retail_and_recreation_percent_change_from_baseline, data = datacovidjkt,
      upper.panel = NULL,         # Disabling the upper panel
      diag.panel = panel.hist)    # Adding the histograms

Plot Linear Regresi Kasus Covid-19 dengan Mobility Index retail and recreation (Mobilitas di Tempat perbelanjaan dan rekreasi)

Dari Visualisasi diatas Smooth Spline Model hampir 100% menyamai Data Real, sedangkan Linear Model menunjukkan prediksi positif smakin tajam keatas. Hasil

8. Kesimpulan

Dari Visualisasi Plot untuk RRegresi Linear Smoothing Spline Model untuk Kasus Positif Covid-19 dibandingkan dengan Mobilitas di Tempat perbelanjaan dan rekreasi dapat disimpulkan sebagai berikut :

  • Bahwa prediksi mobilitas Tempat perbelanjaan dan rekreasi tidak berdampak signifikan terhadap laju kasus Positif Covid-19, pergerakan di Tempat perbelanjaan dan rekreasi relatif stabil

  • Data diatas belum bisa dijadikan acuan, kapan dilakukan WFH (work from home) dan kapan tidak dilakukan.

  • Pada tanggal 15 Oktober terjadi x-axis dimana terjadi persilangan antara Data Real, Smooth Spline, dan Linear Model Tempat perbelanjaan dan rekreasi. Namun demikan x-axis ini tidak bisa dijadikan patokan untuk melakukan prediksi keterikatan hubungan kasus Positif dan Mobilitas di Tempat perbelanjaan dan rekreasi.