Regresi Linear Smoothing Spline Model

~ untuk Kasus Positif Covid-19 dibandingkan dengan Mobilitas di Tempat Kerja ~


Oleh Muhammad Isa Ansori (Cak Isa)
Dosen Pengampu Prof. Dr M. Suhartono, M.Kom
Program Magister Informatika
Tanggal 24 April 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 Bekerja. 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 Bekerja.

Sumber Data diambil dari Data Covid-19 DKI Jakarta dari website Pemprov DKI Jakarta dan Google mobility index pada bulan September 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 c19jakartasep21.xlsx. Berikut view dataset :

View Dataset

Cek Struktur Data

## Rows: 30
## Columns: 12
## $ Tanggal                                            <dttm> 2021-09-01, 2021-0~
## $ Positif                                            <dbl> 851256, 851686, 852~
## $ Dirawat                                            <dbl> 2172, 2043, 1914, 1~
## $ Sembuh                                             <dbl> 831293, 832130, 832~
## $ Meninggal                                          <dbl> 13302, 13312, 13322~
## $ SelfIsolation                                      <dbl> 4489, 4201, 3841, 3~
## $ retail_and_recreation_percent_change_from_baseline <dbl> -21, -20, -18, -21,~
## $ grocery_and_pharmacy_percent_change_from_baseline  <dbl> 8, 7, 8, 9, 3, 4, -~
## $ parks_percent_change_from_baseline                 <dbl> -45, -43, -37, -39,~
## $ transit_stations_percent_change_from_baseline      <dbl> -41, -42, -41, -35,~
## $ workplaces_percent_change_from_baseline            <dbl> -34, -34, -32, -19,~
## $ residential_percent_change_from_baseline           <dbl> 12, 12, 13, 6, 6, 1~

Ringkasan Data

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

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Positif 0 1 855111.87 1938.39 851256 853676.00 855512.0 856708.75 857765 ▃▃▅▆▇
Dirawat 0 1 1155.80 499.96 510 708.75 1044.0 1521.50 2172 ▇▆▃▃▂
Sembuh 0 1 838165.27 3344.65 831293 835821.75 838851.0 841001.75 842541 ▃▃▃▆▇
Meninggal 0 1 13438.00 67.81 13302 13389.25 13459.5 13492.25 13519 ▃▂▂▅▇
SelfIsolation 0 1 2352.80 980.40 1195 1506.00 2157.5 2943.50 4489 ▇▅▃▃▂
retail_and_recreation_percent_change_from_baseline 0 1 -20.30 3.32 -28 -21.00 -20.0 -18.00 -15 ▁▂▃▇▃
grocery_and_pharmacy_percent_change_from_baseline 0 1 3.30 4.26 -8 1.00 4.0 6.00 10 ▁▂▂▇▃
parks_percent_change_from_baseline 0 1 -41.77 4.61 -55 -44.75 -42.0 -39.00 -33 ▁▁▇▅▃
transit_stations_percent_change_from_baseline 0 1 -37.53 3.23 -44 -39.00 -38.0 -36.00 -29 ▃▇▅▂▁
workplaces_percent_change_from_baseline 0 1 -28.17 7.99 -38 -34.00 -31.5 -21.50 -12 ▇▇▁▂▃
residential_percent_change_from_baseline 0 1 10.13 2.71 5 7.75 11.0 12.00 15 ▆▁▇▇▁

Variable type: POSIXct

skim_variable n_missing complete_rate min max median n_unique
Tanggal 0 1 2021-09-01 2021-09-30 2021-09-15 12:00:00 30

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  
##           -3.246e+06             2.513e-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 
## 851963.0 852180.2 852397.3 852614.5 852831.6 853048.8 853266.0 853483.1 
##        9       10       11       12       13       14       15       16 
## 853700.3 853917.5 854134.6 854351.8 854569.0 854786.1 855003.3 855220.4 
##       17       18       19       20       21       22       23       24 
## 855437.6 855654.8 855871.9 856089.1 856306.3 856523.4 856740.6 856957.8 
##       25       26       27       28       29       30 
## 857174.9 857392.1 857609.3 857826.4 858043.6 858260.7

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.1079872  lambda= 1.476146e-05 (15 iterations)
## Equivalent Degrees of Freedom (Df): 10.40853
## Penalized Criterion (RSS): 22532.71
## GCV: 1761.167

VieW Data Prediksi Smooth Spline Model Kasus Positif Covid-19

datacovidjkt$prediksi_model.sspline <- model.sspline$y
datacovidjkt$prediksi_model.sspline
##  [1] 851270.6 851668.9 852039.7 852372.7 852664.6 852939.2 853227.2 853548.7
##  [9] 853881.7 854193.5 854460.8 854697.1 854924.9 855160.9 855397.5 855621.1
## [17] 855818.2 855980.6 856121.9 856261.4 856413.8 856577.2 856745.0 856911.0
## [25] 857069.3 857214.1 857343.1 857467.5 857602.2 857761.7

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 Kerja (Workplace)

Untuk Analisa Data Mobility Index Wilayah DKI Jakarta pada tempat bekerja (Workplace) 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 Kerja (Workplace)

# linear / tren
model.linear_wp <- lm(datacovidjkt$workplaces_percent_change_from_baseline ~ datacovidjkt$Tanggal, data = datacovidjkt)
model.linear_wp
## 
## Call:
## lm(formula = datacovidjkt$workplaces_percent_change_from_baseline ~ 
##     datacovidjkt$Tanggal, data = datacovidjkt)
## 
## Coefficients:
##          (Intercept)  datacovidjkt$Tanggal  
##           -1.805e+03             1.089e-06

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 
## -29.53118 -29.43708 -29.34297 -29.24887 -29.15476 -29.06066 -28.96656 -28.87245 
##         9        10        11        12        13        14        15        16 
## -28.77835 -28.68424 -28.59014 -28.49603 -28.40193 -28.30782 -28.21372 -28.11961 
##        17        18        19        20        21        22        23        24 
## -28.02551 -27.93141 -27.83730 -27.74320 -27.64909 -27.55499 -27.46088 -27.36678 
##        25        26        27        28        29        30 
## -27.27267 -27.17857 -27.08446 -26.99036 -26.89626 -26.80215

5.2 Smooth Spline Model Data Mobility Index DKI Jakarta Tempat Kerja (Workplace)

# fit using smooth.spline
model.sspline_wp <- smooth.spline(datacovidjkt$Tanggal, datacovidjkt$workplaces_percent_change_from_baseline, nknots = 10)
model.sspline_wp
## Call:
## smooth.spline(x = datacovidjkt$Tanggal, y = datacovidjkt$workplaces_percent_change_from_baseline, 
##     nknots = 10)
## 
## Smoothing Parameter  spar= 0.03009667  lambda= 4.037859e-06 (15 iterations)
## Equivalent Degrees of Freedom (Df): 11.33313
## Penalized Criterion (RSS): 852.4748
## GCV: 73.39389

VieW Data Prediksi Smooth Spline Model Data Mobility Index DKI Jakarta Tempat Kerja (Workplace)

datacovidjkt$prediksi_model.sspline_wp <- model.sspline_wp$y
datacovidjkt$prediksi_model.sspline_wp
##  [1] -34.75214 -35.51306 -26.23032 -18.76028 -21.65700 -30.26543 -36.62821
##  [8] -35.03912 -28.79643 -23.44953 -23.13651 -26.35031 -30.17259 -32.24307
## [15] -32.43379 -31.17490 -28.89651 -26.20373 -24.40160 -24.97011 -28.52798
## [22] -32.24868 -32.44440 -26.99562 -20.05609 -17.34786 -22.48398 -30.64136
## [29] -34.88790 -28.29151

5.3 Plot Regresi Linear ata Mobility Index DKI Jakarta Tempat Kerja (Workplace)

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 kerja antara -35 dan -20 dengan kurva naik turun yang lebih stabil. Prediksi ini dapat menggambarkan bahwa mobilitas di tempat kerja mempunyai angka prediksi yang merata dari tanggal 1 sampai dengan tanggal 30.

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 Kerja (Workplace)

cor.test(datacovidjkt$Positif, datacovidjkt$workplaces_percent_change_from_baseline)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidjkt$Positif and datacovidjkt$workplaces_percent_change_from_baseline
## t = 0.6283, df = 28, p-value = 0.5349
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.2531126  0.4586930
## sample estimates:
##       cor 
## 0.1179085

Dari output tersebut dapat kita simpulkan bahwa hubungan sangat lemah Data Kasus Positif Covid-19 dan Mobilitas di tempat Kerja (Workplace) (p-value 0 - 0,2). Nilai p-value dalam output R dituliskan 0,5349 Nilai koefisien korelasi r adalah sebesar 0,1179085 yang menunjukkan hubungan sangat lemah

7. Hasil Regresi antara Kasus Positif Covid 19 dengan Mobility Index Tempat Bekerja (Workplace)

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 Bekerja.

model_gab <- lm(datacovidjkt$Positif ~ datacovidjkt$workplaces_percent_change_from_baseline, data = datacovidjkt)
summary(model_gab)
## 
## Call:
## lm(formula = datacovidjkt$Positif ~ datacovidjkt$workplaces_percent_change_from_baseline, 
##     data = datacovidjkt)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3689.0 -1276.2   541.2  1591.7  2677.0 
## 
## Coefficients:
##                                                       Estimate Std. Error
## (Intercept)                                          855917.39    1331.03
## datacovidjkt$workplaces_percent_change_from_baseline     28.60      45.52
##                                                      t value Pr(>|t|)    
## (Intercept)                                          643.048   <2e-16 ***
## datacovidjkt$workplaces_percent_change_from_baseline   0.628    0.535    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1959 on 28 degrees of freedom
## Multiple R-squared:  0.0139, Adjusted R-squared:  -0.02132 
## F-statistic: 0.3948 on 1 and 28 DF,  p-value: 0.5349
model_gab$coefficients
##                                          (Intercept) 
##                                         855917.39329 
## datacovidjkt$workplaces_percent_change_from_baseline 
##                                             28.59858

Rumus linear regresi menjadi y = 855917.39 + 28.59858 data Mobilitas Index di Tempat Kerja (Workplace)

model_gab$fitted.values
##        1        2        3        4        5        6        7        8 
## 854945.0 854945.0 855002.2 855374.0 855517.0 854945.0 854916.4 854945.0 
##        9       10       11       12       13       14       15       16 
## 854973.6 855030.8 855402.6 855545.6 854945.0 854830.6 854945.0 854945.0 
##       17       18       19       20       21       22       23       24 
## 855002.2 855402.6 855488.4 854973.6 854945.0 855030.8 855030.8 855088.0 
##       25       26       27       28       29       30 
## 855459.8 855574.2 855030.8 855002.2 855030.8 855088.0
datacovidjkt$prediksi_model_gab <- model_gab$fitted.values

Menambahkan Histogram dan Menyetarakan Formula Kasus Positif Covid-19 dan Mobilitas di Tempat Kerja

# 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$workplaces_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 Workplace (Mobilitas di Tempat Kerja)

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 Kerja dapat disimpulkan sebagai berikut :

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

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

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