Universitas :“UIN MAULANA MALIK IBRAHIM MALANG”
Jurusan : “Teknik Informatika”
Program ini dibuat untuk menganalisa Regresi Linier pada data pasien isolasi 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
Mei <- read_excel(path = "isolasi.xlsx")
Mei
## # A tibble: 31 x 9
## Nama_provinsi Tanggal isolasi Retail Grocery Park Station
## <chr> <dttm> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DKI Jakarta 2021-05-01 00:00:00 3533 -6 21 -19 -20
## 2 DKI Jakarta 2021-05-02 00:00:00 3450 -7 19 -27 -22
## 3 DKI Jakarta 2021-05-03 00:00:00 3483 -2 25 -9 -21
## 4 DKI Jakarta 2021-05-04 00:00:00 3247 -3 26 -9 -16
## 5 DKI Jakarta 2021-05-05 00:00:00 3240 -1 27 -7 -16
## 6 DKI Jakarta 2021-05-06 00:00:00 3406 -2 26 -9 -31
## 7 DKI Jakarta 2021-05-07 00:00:00 3485 -2 25 -12 -34
## 8 DKI Jakarta 2021-05-08 00:00:00 3569 -4 25 -20 -33
## 9 DKI Jakarta 2021-05-09 00:00:00 3648 -2 26 -23 -35
## 10 DKI Jakarta 2021-05-10 00:00:00 3723 6 36 1 -31
## # ... with 21 more rows, and 2 more variables: Workplace <dbl>,
## # Residental <dbl>
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(Mei)
## Nama_provinsi Tanggal isolasi
## Length:31 Min. :2021-05-01 00:00:00 Min. :3158
## Class :character 1st Qu.:2021-05-08 12:00:00 1st Qu.:3404
## Mode :character Median :2021-05-16 00:00:00 Median :3569
## Mean :2021-05-16 00:00:00 Mean :3968
## 3rd Qu.:2021-05-23 12:00:00 3rd Qu.:4868
## Max. :2021-05-31 00:00:00 Max. :5280
## Retail Grocery Park Station
## Min. :-13.000 Min. : 8.00 Min. :-27.000 Min. :-45.00
## 1st Qu.: -5.000 1st Qu.:18.50 1st Qu.: -8.000 1st Qu.:-31.50
## Median : -2.000 Median :23.00 Median : 5.000 Median :-22.00
## Mean : -2.161 Mean :23.87 Mean : 3.677 Mean :-24.32
## 3rd Qu.: -1.000 3rd Qu.:25.50 3rd Qu.: 14.500 3rd Qu.:-17.50
## Max. : 8.000 Max. :55.00 Max. : 34.000 Max. :-14.00
## Workplace Residental
## Min. :-73.00 Min. : 2.000
## 1st Qu.:-35.00 1st Qu.: 5.000
## Median :-24.00 Median : 6.000
## Mean :-28.65 Mean : 6.129
## 3rd Qu.:-19.50 3rd Qu.: 7.000
## Max. : -4.00 Max. :12.000
Langkah 3 adalah menyeleksi data yang akan digunakan, yakni kolom Tanggal dan isolasi.
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
Mei <- select(Mei, Tanggal, isolasi)
Mei
## # A tibble: 31 x 2
## Tanggal isolasi
## <dttm> <dbl>
## 1 2021-05-01 00:00:00 3533
## 2 2021-05-02 00:00:00 3450
## 3 2021-05-03 00:00:00 3483
## 4 2021-05-04 00:00:00 3247
## 5 2021-05-05 00:00:00 3240
## 6 2021-05-06 00:00:00 3406
## 7 2021-05-07 00:00:00 3485
## 8 2021-05-08 00:00:00 3569
## 9 2021-05-09 00:00:00 3648
## 10 2021-05-10 00:00:00 3723
## # ... with 21 more rows
Langkah 4 digunakan untuk membuat graphical parameter
pairs(Mei)
Langkah 5 merupakan visualisasi dari tabel yang dibuat dimana x adalah kolom tanggal dan y adalah data pasien isolasi.
plot(Mei$isolasi ~ Mei$Tanggal, data = Mei, main="isolasi")
Langkah 6 digunakan untuk menguban kolom tanggal menjadi tipe numeric
Mei$Tanggal <- as.numeric(Mei$Tanggal)
Mei
## # A tibble: 31 x 2
## Tanggal isolasi
## <dbl> <dbl>
## 1 1619827200 3533
## 2 1619913600 3450
## 3 1620000000 3483
## 4 1620086400 3247
## 5 1620172800 3240
## 6 1620259200 3406
## 7 1620345600 3485
## 8 1620432000 3569
## 9 1620518400 3648
## 10 1620604800 3723
## # ... with 21 more rows
Perintah disini adalah untuk menampilkan hubungan keterkatan (korelasi) antara data tanggal dan data pasien isolasi. dimanajika mendekati +1 maka korelasi nya sangat kuat.
cor(Mei$isolasi, Mei$Tanggal)
## [1] 0.820758
Di langkah ke 8 terdapat perintah untuk membuat regresi linier antara data tanggal dan pasien isolasi kemudian menampilkannya hasil koefisien dan kinerja model dengan summarry.
model <- lm(Mei$isolasi ~ Mei$Tanggal)
summary(model)
##
## Call:
## lm(formula = Mei$isolasi ~ Mei$Tanggal)
##
## Residuals:
## Min 1Q Median 3Q Max
## -878.6 -230.2 136.7 315.7 597.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.287e+06 1.669e+05 -7.713 1.66e-08 ***
## Mei$Tanggal 7.966e-04 1.030e-04 7.737 1.57e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 443 on 29 degrees of freedom
## Multiple R-squared: 0.6736, Adjusted R-squared: 0.6624
## F-statistic: 59.86 on 1 and 29 DF, p-value: 1.566e-08
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: Mei$isolasi
## Df Sum Sq Mean Sq F value Pr(>F)
## Mei$Tanggal 1 11749253 11749253 59.86 1.566e-08 ***
## Residuals 29 5692094 196279
## ---
## 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(Mei$isolasi ~ Mei$Tanggal, data = Mei, col = "magenta", pch = 20, cex = 1.7, main = "isolasi")
abline(model, col="blue")
Disini dilakukan visualisasi perkiraan umum pengaruh titik data dalam regresi linier.
plot(cooks.distance(model), pch = 16, col = "magenta")
visualisasi model
plot(model)
Membandingkan kesesuian beberapa model regresi
AIC(model)
## [1] 469.7128
Membandingkan kesesuian beberapa model regresi namun dengan sensitifitas penalty pemasukan varible baru yang lebih tinggi.
BIC(model)
## [1] 474.0148
Melakukan prediksi nilai pada model berdasar data input
head(predict(model), n = 11)
## 1 2 3 4 5 6 7 8
## 2935.321 3004.151 3072.981 3141.811 3210.642 3279.472 3348.302 3417.132
## 9 10 11
## 3485.963 3554.793 3623.623
Melakukan visualisasi dari prediksi nilai model
plot(head(predict(model), n = 11))
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
## 597.67944 445.84919 410.01895 105.18871 29.35847 126.52823 136.69798
## 8 9 10 11
## 151.86774 162.03750 168.20726 -133.62298
Menampilkan koefisien dari model dengan maksud mengukur kemampuan model dalam menerangkan seberapa pengaruh variabel independen secara bersama–sama (stimultan) mempengaruhi variabel dependen yang dapat diindikasikan oleh nilai adjusted R – Squared. Koefisien determinasi menunjukkan sejauh mana kontribusi variabel bebas dalam model regresi mampu menjelaskan variasi dari variabel terikatnya. Koefisien determinasi dapat dilihat melalui nilai R-square (R2) pada tabel Model Summary.
coef(model)
## (Intercept) Mei$Tanggal
## -1.287494e+06 7.966463e-04
Memasukkan nilai residual dan fitted values kedalam variable baru
Mei$residuals <- model$residuals
Mei$predicted <- model$fitted.values
Mei
## # A tibble: 31 x 4
## Tanggal isolasi residuals predicted
## <dbl> <dbl> <dbl> <dbl>
## 1 1619827200 3533 598. 2935.
## 2 1619913600 3450 446. 3004.
## 3 1620000000 3483 410. 3073.
## 4 1620086400 3247 105. 3142.
## 5 1620172800 3240 29.4 3211.
## 6 1620259200 3406 127. 3279.
## 7 1620345600 3485 137. 3348.
## 8 1620432000 3569 152. 3417.
## 9 1620518400 3648 162. 3486.
## 10 1620604800 3723 168. 3555.
## # ... with 21 more rows
Menciptakan estimasi kepadatan kernel warna halus dari scatterplot R.
scatter.smooth(x=Mei$isolasi, y=Mei$Tanggal, main="isolasi")
Memebagi data dalam 3 Quartil dan melakukan pengecekan seberapa baik data didistribusikan
boxplot(Mei$isolasi, Mei$Tanggal, main="isolasi", boxplot.stats(Mei$isolasi)$out)
Membuat visualisasi kepadatan variable dalam mengambil nilai tertentu.
plot(density(Mei$isolasi), main="isolasi", ylab="Frequency")
Memasukkan koefisien model dalam variable kemudian di visualisasikan dengan menyertakan garis lurus untuk membatu analisa regresi linieer
coefs <- coef(model)
plot(Mei$isolasi ~ Mei$Tanggal, data = Mei)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+', round(coefs[2], 2), '*isolasi'))
abline(coefs, col="blue")
Mengubah variabel tanggal ke bentuk numerik dan melakukan test korelasi (hubungan) antara variable tanggal dan variable isolasi
Mei$Tanggal <- as.numeric(Mei$Tanggal)
cor.test(Mei$Tanggal, Mei$isolasi)
##
## Pearson's product-moment correlation
##
## data: Mei$Tanggal and Mei$isolasi
## t = 7.7369, df = 29, p-value = 1.566e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6576931 0.9103448
## sample estimates:
## cor
## 0.820758