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)
Mei <- read_excel(path = "D:/Kuliah/Linier Algebra/Mei_2021_Positif.xlsx")
## New names:
## * `` -> ...10
## * `` -> ...11
Mei
## # A tibble: 31 x 11
## Nama_provinsi Tanggal Positif Retail Grocery Park Station
## <chr> <dttm> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DKI Jakarta 2021-05-01 00:00:00 409546 -6 21 -19 -20
## 2 DKI Jakarta 2021-05-02 00:00:00 410400 -7 19 -27 -22
## 3 DKI Jakarta 2021-05-03 00:00:00 411157 -2 25 -9 -21
## 4 DKI Jakarta 2021-05-04 00:00:00 411573 -3 26 -9 -16
## 5 DKI Jakarta 2021-05-05 00:00:00 412418 -1 27 -7 -16
## 6 DKI Jakarta 2021-05-06 00:00:00 413323 -2 26 -9 -31
## 7 DKI Jakarta 2021-05-07 00:00:00 414106 -2 25 -12 -34
## 8 DKI Jakarta 2021-05-08 00:00:00 414838 -4 25 -20 -33
## 9 DKI Jakarta 2021-05-09 00:00:00 415647 -2 26 -23 -35
## 10 DKI Jakarta 2021-05-10 00:00:00 416341 6 36 1 -31
## # ... with 21 more rows, and 4 more variables: Workplace <dbl>,
## # 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(Mei)
## Nama_provinsi Tanggal Positif
## Length:31 Min. :2021-05-01 00:00:00 Min. :409546
## Class :character 1st Qu.:2021-05-08 12:00:00 1st Qu.:415243
## Mode :character Median :2021-05-16 00:00:00 Median :419208
## Mean :2021-05-16 00:00:00 Mean :419589
## 3rd Qu.:2021-05-23 12:00:00 3rd Qu.:424419
## Max. :2021-05-31 00:00:00 Max. :430059
## 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 ...10 ...11
## Min. :-73.00 Min. : 2.000 Mode:logical Mode:logical
## 1st Qu.:-35.00 1st Qu.: 5.000 NA's:31 NA's:31
## 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 Positif.
library(dplyr)
##
## 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
Mei1 <- select(Mei, Tanggal, Positif)
Mei1
## # A tibble: 31 x 2
## Tanggal Positif
## <dttm> <dbl>
## 1 2021-05-01 00:00:00 409546
## 2 2021-05-02 00:00:00 410400
## 3 2021-05-03 00:00:00 411157
## 4 2021-05-04 00:00:00 411573
## 5 2021-05-05 00:00:00 412418
## 6 2021-05-06 00:00:00 413323
## 7 2021-05-07 00:00:00 414106
## 8 2021-05-08 00:00:00 414838
## 9 2021-05-09 00:00:00 415647
## 10 2021-05-10 00:00:00 416341
## # ... with 21 more rows
Langkah 4 digunakan untuk membuat graphical parameter
pairs(Mei1)
Langkah 5 merupakan visualisasi dari tabel yang dibuat dimana x adalah kolom tanggal dan y adalah data pasien positf.
plot(Mei1$Positif ~ Mei1$Tanggal, data = Mei1, main="Data Pasien Positif Covid Mei 2021")
Langkah 6 digunakan untuk menguban kolom tanggal menjadi tipe numeric
Mei1$Tanggal <- as.numeric(Mei1$Tanggal)
Mei1
## # A tibble: 31 x 2
## Tanggal Positif
## <dbl> <dbl>
## 1 1619827200 409546
## 2 1619913600 410400
## 3 1620000000 411157
## 4 1620086400 411573
## 5 1620172800 412418
## 6 1620259200 413323
## 7 1620345600 414106
## 8 1620432000 414838
## 9 1620518400 415647
## 10 1620604800 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(Mei1$Positif, Mei1$Tanggal)
## [1] 0.9965461
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(Mei1$Positif ~ Mei1$Tanggal)
summary(model)
##
## Call:
## lm(formula = Mei1$Positif ~ Mei1$Tanggal)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1065.95 -294.71 75.77 390.97 788.58
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.169e+07 1.874e+05 -62.39 <2e-16 ***
## Mei1$Tanggal 7.471e-03 1.156e-04 64.62 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 497.4 on 29 degrees of freedom
## Multiple R-squared: 0.9931, Adjusted R-squared: 0.9929
## F-statistic: 4176 on 1 and 29 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: Mei1$Positif
## Df Sum Sq Mean Sq F value Pr(>F)
## Mei1$Tanggal 1 1033200215 1033200215 4176.4 < 2.2e-16 ***
## Residuals 29 7174383 247393
## ---
## 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(Mei1$Positif ~ Mei1$Tanggal, data = Mei1, col = "magenta", pch = 20, cex = 1.7, main = "Data Pasien Positif Covid Mei 2021")
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] 476.8874
Membandingkan kesesuian beberapa model regresi namun dengan sensitifitas penalty pemasukan varible baru yang lebih tinggi.
BIC(model)
## [1] 481.1894
Melakukan prediksi nilai pada model berdasar data input
head(predict(model), n = 11)
## 1 2 3 4 5 6 7 8
## 409906.7 410552.2 411197.7 411843.1 412488.6 413134.0 413779.5 414424.9
## 9 10 11
## 415070.4 415715.8 416361.3
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
## -360.74597 -152.20161 -40.65726 -270.11290 -70.56855 188.97581 326.52016
## 8 9 10 11
## 413.06452 576.60887 625.15323 385.69758
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) Mei1$Tanggal
## -1.169110e+07 7.470551e-03
Memasukkan nilai residual dan fitted values kedalam variable baru
Mei1$residuals <- model$residuals
Mei1$predicted <- model$fitted.values
Mei1
## # A tibble: 31 x 4
## Tanggal Positif residuals predicted
## <dbl> <dbl> <dbl> <dbl>
## 1 1619827200 409546 -361. 409907.
## 2 1619913600 410400 -152. 410552.
## 3 1620000000 411157 -40.7 411198.
## 4 1620086400 411573 -270. 411843.
## 5 1620172800 412418 -70.6 412489.
## 6 1620259200 413323 189. 413134.
## 7 1620345600 414106 327. 413779.
## 8 1620432000 414838 413. 414425.
## 9 1620518400 415647 577. 415070.
## 10 1620604800 416341 625. 415716.
## # ... with 21 more rows
Menciptakan estimasi kepadatan kernel warna halus dari scatterplot R.
scatter.smooth(x=Mei1$Positif, y=Mei1$Tanggal, main="Data Pasien Positif Covid Mei 2021")
Memebagi data dalam 3 Quartil dan melakukan pengecekan seberapa baik data didistribusikan
boxplot(Mei1$Positf, Mei1$Tanggal, main="Positif", boxplot.stats(Mei1$Positif)$out)
## Warning: Unknown or uninitialised column: `Positf`.
Membuat visualisasi kepadatan variable dalam mengambil nilai tertentu.
plot(density(Mei1$Positif), main="Pasien Positif Covid Mei 2021", ylab="Frequency")
Memasukkan koefisien model dalam variable kemudian di visualisasikan dengan menyertakan garis lurus untuk membatu analisa regresi linieer
coefs <- coef(model)
plot(Mei1$Positif ~ Mei1$Tanggal, data = Mei1)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+', round(coefs[2], 2), '*Positif'))
abline(coefs, col="blue")
Mengubah variabel tanggal ke bentuk numerik dan melakukan test korelasi (hubungan) antara variable tanggal dan variable positif
Mei1$Tanggal <- as.numeric(Mei1$Tanggal)
cor.test(Mei1$Tanggal, Mei1$Positif)
##
## Pearson's product-moment correlation
##
## data: Mei1$Tanggal and Mei1$Positif
## t = 64.625, df = 29, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9927687 0.9983519
## sample estimates:
## cor
## 0.9965461