Dosen Pengampu: Prof. Dr. Suhartono, M.Kom
Lembaga: Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan: Teknik Informatika
Fakultas : Sains dan Teknologi
Program ini dibuat untuk menganalisa Regresi Linier pada data pasien positif covid Mei 2021 yang disandingkan dengan data mobility index di daerah DKI Jakarta.
Langkah pertama adalah memasukkan tabel data yang akan digunakan kedalam sebuah variable.
library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
April <- read_excel(path = "April_2021_Positif.xlsx")
## New names:
## * `` -> ...10
## * `` -> ...11
April
## # A tibble: 31 x 11
## Nama_provinsi Tanggal Positif Retail Grocery Park Station Workplace
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DKI Jakarta 44287 409546 -6 21 -19 -20 -36
## 2 DKI Jakarta 44288 410400 -7 19 -27 -22 -7
## 3 DKI Jakarta 44289 411157 -2 25 -9 -21 -24
## 4 DKI Jakarta 44290 411573 -3 26 -9 -16 -25
## 5 DKI Jakarta 44291 412418 -1 27 -7 -16 -26
## 6 DKI Jakarta 44292 413323 -2 26 -9 -31 -26
## 7 DKI Jakarta 44293 414106 -2 25 -12 -34 -23
## 8 DKI Jakarta 44294 414838 -4 25 -20 -33 -17
## 9 DKI Jakarta 44295 415647 -2 26 -23 -35 -6
## 10 DKI Jakarta 44296 416341 6 36 1 -31 -32
## # ... with 21 more rows, and 3 more variables: Residental <dbl>, ...10 <lgl>,
## # ...11 <lgl>
Perintah summary digunakan untuk menampilkan beberapa informasi terkait data yang diberikan seperti: panjang data (length), tipe data (mode), nilai minimal (Min), nilai Maksimal (Max), Quartil 1 (1st Qu), Quartil 3 (3rd Qu), nilai rata-rata (mean), dan nilai tengan (median) setiap kolomnya.
summary(April)
## Nama_provinsi Tanggal Positif Retail
## Length:31 Length:31 Min. :409546 Min. :-13.000
## Class :character Class :character 1st Qu.:415243 1st Qu.: -5.000
## Mode :character Mode :character Median :419208 Median : -2.000
## Mean :419589 Mean : -2.161
## 3rd Qu.:424419 3rd Qu.: -1.000
## Max. :430059 Max. : 8.000
## Grocery Park Station Workplace
## Min. : 8.00 Min. :-27.000 Min. :-45.00 Min. :-73.00
## 1st Qu.:18.50 1st Qu.: -8.000 1st Qu.:-31.50 1st Qu.:-35.00
## Median :23.00 Median : 5.000 Median :-22.00 Median :-24.00
## Mean :23.87 Mean : 3.677 Mean :-24.32 Mean :-28.65
## 3rd Qu.:25.50 3rd Qu.: 14.500 3rd Qu.:-17.50 3rd Qu.:-19.50
## Max. :55.00 Max. : 34.000 Max. :-14.00 Max. : -4.00
## Residental ...10 ...11
## Min. : 2.000 Mode:logical Mode:logical
## 1st Qu.: 5.000 NA's:31 NA's:31
## Median : 6.000
## Mean : 6.129
## 3rd Qu.: 7.000
## Max. :12.000
Langkah 3 adalah menyeleksi data yang akan digunakan, yakni kolom Tanggal dan Positif.
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
April1 <- select(April, Tanggal, Positif)
April1
## # A tibble: 31 x 2
## Tanggal Positif
## <chr> <dbl>
## 1 44287 409546
## 2 44288 410400
## 3 44289 411157
## 4 44290 411573
## 5 44291 412418
## 6 44292 413323
## 7 44293 414106
## 8 44294 414838
## 9 44295 415647
## 10 44296 416341
## # ... with 21 more rows
Langkah 4 digunakan untuk membuat graphical parameter
Langkah 5 merupakan visualisasi dari tabel yang dibuat dimana x adalah kolom tanggal dan y adalah data pasien positf.
plot(April1$Positif ~ April1$Tanggal, data = April1, main="Data Pasien Positif Covid April 2021")
## Warning in xy.coords(x, y, xlabel, ylabel, log): NAs introduced by coercion
## Langkah 6 Langkah 6 digunakan untuk menguban kolom tanggal menjadi tipe numeric
April1$Tanggal <- as.numeric(April1$Tanggal)
## Warning: NAs introduced by coercion
April1
## # A tibble: 31 x 2
## Tanggal Positif
## <dbl> <dbl>
## 1 44287 409546
## 2 44288 410400
## 3 44289 411157
## 4 44290 411573
## 5 44291 412418
## 6 44292 413323
## 7 44293 414106
## 8 44294 414838
## 9 44295 415647
## 10 44296 416341
## # ... with 21 more rows
Perintah disini adalah untuk menampilkan hubungan keterkatan (korelasi) antara data tanggal dan data pasien positif covid. dimanajika mendekati +1 maka korelasi nya sangat kuat.
cor(April1$Positif, April1$Tanggal)
## [1] NA
Di langkah ke 8 terdapat perintah untuk membuat regresi linier antara data tanggal dan pasien positif kemudian menampilkannya hasil koefisien dan kinerja model dengan summarry.
model <- lm(April1$Positif ~ April1$Tanggal)
summary(model)
##
## Call:
## lm(formula = April1$Positif ~ April1$Tanggal)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1020.63 -294.20 48.37 388.78 813.18
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.793e+07 4.490e+05 -62.21 <2e-16 ***
## April1$Tanggal 6.400e+02 1.014e+01 63.14 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 480.5 on 28 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.993, Adjusted R-squared: 0.9928
## F-statistic: 3987 on 1 and 28 DF, p-value: < 2.2e-16
ANOVA adalah tes statistik untuk memperkirakan bagaimana variabel dependen kuantitatif berubah sesuai dengan tingkat satu atau lebih variabel independen kategoris.
anova(model)
## Analysis of Variance Table
##
## Response: April1$Positif
## Df Sum Sq Mean Sq F value Pr(>F)
## April1$Tanggal 1 920625281 920625281 3987 < 2.2e-16 ***
## Residuals 28 6465313 230904
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Disini dilakukan visualisasi data dengan menampilkan abline (garis regresi) dimana semakin dekat dengan garis maka semakin bagus model.
plot(April1$Positif ~ April1$Tanggal, data = April1, col = "magenta", pch = 20, cex = 1.7, main = "Data Pasien Positif Covid April 2021")
abline(model, col="blue")
## Langkah 10 Disini dilakukan visualisasi perkiraan umum pengaruh titik data dalam regresi linier.
plot(cooks.distance(model), pch = 16, col = "magenta")
## Langkah 11 visualisasi model
plot(model)
Membandingkan kesesuian beberapa model regresi
AIC(model)
## [1] 459.5592
Membandingkan kesesuian beberapa model regresi namun dengan sensitifitas penalty pemasukan varible baru yang lebih tinggi.
BIC(model)
## [1] 463.7628
Melakukan visualisasi dari prediksi nilai model
plot(head(predict(model), n = 11))
## Langkah 16 Menampilkan residual dari model. Dimana residual adalah selisih antara nilai sesungguhnya dengan nilai prediksi pada analisis regresi linear, baik berganda maupun sederhana
head(resid(model), n = 11)
## 1 2 3 4 5 6 7
## -413.31828 -199.33541 -82.35254 -306.36967 -101.38680 163.59607 306.57894
## 8 9 10 11
## 398.56181 567.54468 621.52755 387.51042
Menciptakan estimasi kepadatan kernel warna halus dari scatterplot R.
scatter.smooth(x=April1$Positif, y=April1$Tanggal, main="Data Pasien Positif Covid April 2021")
## Langkah 18 Memebagi data dalam 3 Quartil dan melakukan pengecekan seberapa baik data didistribusikan
boxplot(April1$Positf, April1$Tanggal, main="Positif", boxplot.stats(April1$Positif)$out)
## Warning: Unknown or uninitialised column: `Positf`.
## Langkah 20 Membuat visualisasi kepadatan variable dalam mengambil nilai tertentu.
plot(density(April1$Positif), main="Pasien Positif Covid April 2021", ylab="Frequency")
## Langkah 21 Memasukkan koefisien model dalam variable kemudian di visualisasikan dengan menyertakan garis lurus untuk membatu analisa regresi linieer
coefs <- coef(model)
plot(April1$Positif ~ April1$Tanggal, data = April1)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+', round(coefs[2], 2), '*Positif'))
abline(coefs, col="blue")
## Langkah 22 Mengubah variabel tanggal ke bentuk numerik dan melakukan test korelasi (hubungan) antara variable tanggal dan variable positif
April1$Tanggal <- as.numeric(April1$Tanggal)
cor.test(April1$Tanggal, April1$Positif)
##
## Pearson's product-moment correlation
##
## data: April1$Tanggal and April1$Positif
## t = 63.143, df = 28, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9925874 0.9983557
## sample estimates:
## cor
## 0.996507