Date: 2022-04-25 Author : Setiyaris
Mata Kuliah : Pengantar Konsep Pemrograman Algoritma dan Struktur Data Magister Teknik Informatika
Dosen Pengampu : Prof Dr Suhartono M.Kom UIN Maulana Malik Ibrahim Malang 1. Penjelasan Smoothing Spline Model 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 November 2021.
library(readxl)
mobilityjakarta <- read_excel(path = "covidjakartanov.xlsx")
## Warning in strptime(x, format, tz = tz): unable to identify current timezone 'C':
## please set environment variable 'TZ'
mobilityjakarta
## # A tibble: 30 x 13
## Tanggal Nama_Kota POSITIF Dirawat Sembuh Meninggal
## <dttm> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2021-11-01 00:00:00 DKI Jakarta 861623 273 847066 13562
## 2 2021-11-02 00:00:00 DKI Jakarta 861700 266 847201 13562
## 3 2021-11-03 00:00:00 DKI Jakarta 861832 258 847353 13563
## 4 2021-11-04 00:00:00 DKI Jakarta 861943 258 847403 13564
## 5 2021-11-05 00:00:00 DKI Jakarta 862061 256 847438 13565
## 6 2021-11-06 00:00:00 DKI Jakarta 862130 231 847685 13566
## 7 2021-11-07 00:00:00 DKI Jakarta 862247 220 847808 13566
## 8 2021-11-08 00:00:00 DKI Jakarta 862276 198 847885 13566
## 9 2021-11-09 00:00:00 DKI Jakarta 862370 193 848034 13566
## 10 2021-11-10 00:00:00 DKI Jakarta 862465 198 848093 13566
## # ... with 20 more rows, and 7 more variables: `Self Isolation` <dbl>,
## # retail_and_recreation_percent_change_from_baseline <dbl>,
## # grocery_and_pharmacy_percent_change_from_baseline <dbl>,
## # parks_percent_change_from_baseline <dbl>,
## # transit_stations_percent_change_from_baseline <dbl>,
## # workplaces_percent_change_from_baseline <dbl>,
## # residential_percent_change_from_baseline <dbl>
library(jmv)
descriptives(mobilityjakarta, vars = vars(Dirawat, parks_percent_change_from_baseline), freq = TRUE)
##
## DESCRIPTIVES
##
## Descriptives
## ------------------------------------------------------------------------
## Dirawat parks_percent_change_from_baseline
## ------------------------------------------------------------------------
## N 30 30
## Missing 0 0
## Mean 204.5000 -22.80000
## Median 198.0000 -22.00000
## Standard deviation 30.06631 4.999310
## Minimum 168.0000 -35.00000
## Maximum 273.0000 -13.00000
## ------------------------------------------------------------------------
# 2. Density plot
d<-density(mobilityjakarta$Dirawat) # menghitung density variabel wt
plot(d, xlab="Dirawat di RS untuk Covid 19", main="Distribusi Dirawat di RS untuk Covid 19")
library(npreg)
mod.ss <- ss( mobilityjakarta$Tanggal,mobilityjakarta$Dirawat, nknots = 10)
mod.ss
##
## Call:
## ss(x = mobilityjakarta$Tanggal, y = mobilityjakarta$Dirawat,
## nknots = 10)
##
## Smoothing Parameter spar = 0.07486715 lambda = 2.070972e-07
## Equivalent Degrees of Freedom (Df) 10.52988
## Penalized Criterion (RSS) 1220.487
## Generalized Cross-Validation (GCV) 96.58671
mod.smsp <- smooth.spline( mobilityjakarta$Tanggal,mobilityjakarta$Dirawat, nknots = 10)
mod.smsp
## Call:
## smooth.spline(x = mobilityjakarta$Tanggal, y = mobilityjakarta$Dirawat,
## nknots = 10)
##
## Smoothing Parameter spar= 0.05018013 lambda= 5.636477e-06 (14 iterations)
## Equivalent Degrees of Freedom (Df): 11.14365
## Penalized Criterion (RSS): 1196.037
## GCV: 100.9138
sqrt(mean(( mod.ss$y - mod.smsp$y )^2))
## [1] 1.507532
sqrt(mean(( mobilityjakarta$Dirawat - mod.ss$y )^2))
## [1] 6.378315
sqrt(mean(( mobilityjakarta$Dirawat - mod.smsp$y )^2))
## [1] 6.314102
mobilityjakarta$prediksi_ss <- mod.ss$y
mobilityjakarta$prediksi_smsp <- mod.smsp$y
mobilityjakarta
## # A tibble: 30 x 15
## Tanggal Nama_Kota POSITIF Dirawat Sembuh Meninggal
## <dttm> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2021-11-01 00:00:00 DKI Jakarta 861623 273 847066 13562
## 2 2021-11-02 00:00:00 DKI Jakarta 861700 266 847201 13562
## 3 2021-11-03 00:00:00 DKI Jakarta 861832 258 847353 13563
## 4 2021-11-04 00:00:00 DKI Jakarta 861943 258 847403 13564
## 5 2021-11-05 00:00:00 DKI Jakarta 862061 256 847438 13565
## 6 2021-11-06 00:00:00 DKI Jakarta 862130 231 847685 13566
## 7 2021-11-07 00:00:00 DKI Jakarta 862247 220 847808 13566
## 8 2021-11-08 00:00:00 DKI Jakarta 862276 198 847885 13566
## 9 2021-11-09 00:00:00 DKI Jakarta 862370 193 848034 13566
## 10 2021-11-10 00:00:00 DKI Jakarta 862465 198 848093 13566
## # ... with 20 more rows, and 9 more variables: `Self Isolation` <dbl>,
## # retail_and_recreation_percent_change_from_baseline <dbl>,
## # grocery_and_pharmacy_percent_change_from_baseline <dbl>,
## # parks_percent_change_from_baseline <dbl>,
## # transit_stations_percent_change_from_baseline <dbl>,
## # workplaces_percent_change_from_baseline <dbl>,
## # residential_percent_change_from_baseline <dbl>, prediksi_ss <dbl>, ...
# plot results
plot(mobilityjakarta$Tanggal, mobilityjakarta$Dirawat)
lines(mobilityjakarta$Tanggal, mobilityjakarta$prediksi_ss , lty = 2, col = 'red', lwd = 4)
lines(mobilityjakarta$Tanggal, mobilityjakarta$prediksi_smsp, lty = 4, col = 'green', lwd = 2)
# plot method
plot(mobilityjakarta$Tanggal, mobilityjakarta$Dirawat, lty = 10, col = 'Green', lwd =5)
#plot(mod.ss)
# add lm fit
abline(coef(lm( mobilityjakarta$Dirawat ~ mobilityjakarta$Tanggal , data = mobilityjakarta)), lty = 10, col = 'Yellow', lwd =5)
rug(mobilityjakarta$Tanggal) # add rug to plot
#points(mobilityjakarta$Tanggal, mobilityjakarta$Dirawat, lty = 2, col = 2, lwd = 2)
points(mobilityjakarta$Tanggal,mod.ss$y , lty = 2, col = 'red', lwd = 4)
#points(mobilityjakarta$Tanggal,mod.smsp$y , lty = 2, col = 4, lwd = 2)
legend("topright",
legend = c("Real", "Model SS", "Trends"),
lty = 1:3, col = c("Green","Red","Yellow"), lwd = 3, bty = "p")
library(npreg)
# fit using ss
mod.ss1 <- ss( mobilityjakarta$Tanggal,mobilityjakarta$parks_percent_change_from_baseline, nknots = 10)
mod.ss1
##
## Call:
## ss(x = mobilityjakarta$Tanggal, y = mobilityjakarta$parks_percent_change_from_baseline,
## nknots = 10)
##
## Smoothing Parameter spar = 0.7161693 lambda = 0.008900255
## Equivalent Degrees of Freedom (Df) 2.243905
## Penalized Criterion (RSS) 627.9689
## Generalized Cross-Validation (GCV) 24.45359
mod.smsp1 <- smooth.spline( mobilityjakarta$Tanggal,mobilityjakarta$parks_percent_change_from_baseline, nknots = 10)
mod.smsp1
## Call:
## smooth.spline(x = mobilityjakarta$Tanggal, y = mobilityjakarta$parks_percent_change_from_baseline,
## nknots = 10)
##
## Smoothing Parameter spar= 0.697281 lambda= 0.2670617 (15 iterations)
## Equivalent Degrees of Freedom (Df): 2.243935
## Penalized Criterion (RSS): 627.966
## GCV: 24.45353
mobilityjakarta$prediksi_ss1 <- mod.ss1$y
mobilityjakarta$prediksi_smsp1 <- mod.smsp1$y
mobilityjakarta
## # A tibble: 30 x 17
## Tanggal Nama_Kota POSITIF Dirawat Sembuh Meninggal
## <dttm> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2021-11-01 00:00:00 DKI Jakarta 861623 273 847066 13562
## 2 2021-11-02 00:00:00 DKI Jakarta 861700 266 847201 13562
## 3 2021-11-03 00:00:00 DKI Jakarta 861832 258 847353 13563
## 4 2021-11-04 00:00:00 DKI Jakarta 861943 258 847403 13564
## 5 2021-11-05 00:00:00 DKI Jakarta 862061 256 847438 13565
## 6 2021-11-06 00:00:00 DKI Jakarta 862130 231 847685 13566
## 7 2021-11-07 00:00:00 DKI Jakarta 862247 220 847808 13566
## 8 2021-11-08 00:00:00 DKI Jakarta 862276 198 847885 13566
## 9 2021-11-09 00:00:00 DKI Jakarta 862370 193 848034 13566
## 10 2021-11-10 00:00:00 DKI Jakarta 862465 198 848093 13566
## # ... with 20 more rows, and 11 more variables: `Self Isolation` <dbl>,
## # retail_and_recreation_percent_change_from_baseline <dbl>,
## # grocery_and_pharmacy_percent_change_from_baseline <dbl>,
## # parks_percent_change_from_baseline <dbl>,
## # transit_stations_percent_change_from_baseline <dbl>,
## # workplaces_percent_change_from_baseline <dbl>,
## # residential_percent_change_from_baseline <dbl>, prediksi_ss <dbl>, ...
# plot results
plot(mobilityjakarta$Tanggal, mobilityjakarta$parks_percent_change_from_baseline, lty = 10, col = 'yellow', lwd =5)
# add lm fit
abline(coef(lm( mobilityjakarta$parks_percent_change_from_baseline ~ mobilityjakarta$Tanggal , data = mobilityjakarta)), lty = 10, col = 'green', lwd =5)
lines(mobilityjakarta$Tanggal, mobilityjakarta$prediksi_ss1 , lty = 2, col = 'yellow', lwd = 4)
lines(mobilityjakarta$Tanggal, mobilityjakarta$prediksi_smsp1, lty = 4, col = 'red', lwd = 2)
2.Korelasi Pearson Korelasi
Pearson digunakan untuk melakukan analisis korelasi Pearson cukup
sederhana. Semisal kita ingin mengetahui hubungan antara
mobilityjakartaDirawat dan
mobilityjakartaparks_percent_change_from_baseline
cor.test(mobilityjakarta$Dirawat,mobilityjakarta$parks_percent_change_from_baseline)
##
## Pearson's product-moment correlation
##
## data: mobilityjakarta$Dirawat and mobilityjakarta$parks_percent_change_from_baseline
## t = -1.2987, df = 28, p-value = 0.2046
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.5512856 0.1333649
## sample estimates:
## cor
## -0.2383567
model <- lm(mobilityjakarta$Dirawat ~ mobilityjakarta$parks_percent_change_from_baseline, data = mobilityjakarta)
summary(model)
##
## Call:
## lm(formula = mobilityjakarta$Dirawat ~ mobilityjakarta$parks_percent_change_from_baseline,
## data = mobilityjakarta)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37.821 -23.061 -5.636 8.290 62.681
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 171.816 25.745 6.674
## mobilityjakarta$parks_percent_change_from_baseline -1.433 1.104 -1.299
## Pr(>|t|)
## (Intercept) 3.05e-07 ***
## mobilityjakarta$parks_percent_change_from_baseline 0.205
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 29.72 on 28 degrees of freedom
## Multiple R-squared: 0.05681, Adjusted R-squared: 0.02313
## F-statistic: 1.687 on 1 and 28 DF, p-value: 0.2046
model$coefficients
## (Intercept)
## 171.816225
## mobilityjakarta$parks_percent_change_from_baseline
## -1.433499
model$fitted.values
## 1 2 3 4 5 6 7 8
## 219.1217 213.3877 209.0872 207.6537 193.3187 194.7522 221.9887 203.3532
## 9 10 11 12 13 14 15 16
## 209.0872 207.6537 200.4862 203.3532 214.8212 200.4862 206.2202 204.7867
## 17 18 19 20 21 22 23 24
## 201.9197 197.6192 190.4517 206.2202 201.9197 201.9197 207.6537 201.9197
## 25 26 27 28 29 30
## 197.6192 203.3532 204.7867 211.9542 196.1857 201.9197
mobilityjakarta$prediksi_linear <- model$fitted.values
mobilityjakarta
## # A tibble: 30 x 18
## Tanggal Nama_Kota POSITIF Dirawat Sembuh Meninggal
## <dttm> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2021-11-01 00:00:00 DKI Jakarta 861623 273 847066 13562
## 2 2021-11-02 00:00:00 DKI Jakarta 861700 266 847201 13562
## 3 2021-11-03 00:00:00 DKI Jakarta 861832 258 847353 13563
## 4 2021-11-04 00:00:00 DKI Jakarta 861943 258 847403 13564
## 5 2021-11-05 00:00:00 DKI Jakarta 862061 256 847438 13565
## 6 2021-11-06 00:00:00 DKI Jakarta 862130 231 847685 13566
## 7 2021-11-07 00:00:00 DKI Jakarta 862247 220 847808 13566
## 8 2021-11-08 00:00:00 DKI Jakarta 862276 198 847885 13566
## 9 2021-11-09 00:00:00 DKI Jakarta 862370 193 848034 13566
## 10 2021-11-10 00:00:00 DKI Jakarta 862465 198 848093 13566
## # ... with 20 more rows, and 12 more variables: `Self Isolation` <dbl>,
## # retail_and_recreation_percent_change_from_baseline <dbl>,
## # grocery_and_pharmacy_percent_change_from_baseline <dbl>,
## # parks_percent_change_from_baseline <dbl>,
## # transit_stations_percent_change_from_baseline <dbl>,
## # workplaces_percent_change_from_baseline <dbl>,
## # residential_percent_change_from_baseline <dbl>, prediksi_ss <dbl>, ...
# Function to add 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
}
# Equivalent with a formula
pairs(mobilityjakarta$Dirawat~mobilityjakarta$parks_percent_change_from_baseline, data = mobilityjakarta,
upper.panel = NULL, # Disabling the upper panel
diag.panel = panel.hist) # Adding the histograms
# plot method
plot(mobilityjakarta$Tanggal, mobilityjakarta$Dirawat, lty = 10, col = 'black', lwd =5)
#plot(mod.ss)
# add lm fit
abline(coef(lm( mobilityjakarta$Dirawat ~ mobilityjakarta$Tanggal , data = mobilityjakarta)), lty = 10, col = 'green', lwd =5)
rug(mobilityjakarta$Tanggal) # add rug to plot
#points(mobilityjakarta$Tanggal, mobilityjakarta$Dirawat, lty = 2, col = 2, lwd = 2)
lines(mobilityjakarta$Tanggal,mod.ss$y , lty = 2, col = 'Orange', lwd = 4)
#points(mobilityjakarta$Tanggal,mod.smsp$y , lty = 2, col = 4, lwd = 2)
lines(mobilityjakarta$Tanggal, mobilityjakarta$prediksi_linear, lty = 2, col = 6, lwd = 4)
legend("topright",
legend = c("Real", "Model SS", "Trends", "Linear Regresi"),
lty = 1:4, col = c("Black","Orange","green","Pink"), lwd = 3, bty = "p")
3. Referensi https://github.com/juba/rmdformats
https://medium.com/machine-learning-id/simple-linear-regression-r-ea42aed17c52