Dosen Pengampu: Prof. Dr. Suhartono, M.Kom
Mata Kuliah: Linear Algebra (A)
Prodi: Teknik Informatika
Lembaga: Universitas Islam Negeri Maulana Malik Ibrahim Malang
1 Membangun Regresi Linier Berganda
Regresi linear berganda adalah model regresi linear dengan melibatkan lebih dari satu variable bebas atau predictor. Dalam bahasa Inggris, istilah ini disebut dengan multiple linear regression.
1.1 Mengambil Data dan Menampilkannya
Di sini data diambil dari excel. Excel adalah salah satu jenis file eksternal yang sering digunakan untuk menyimpan data. Kita dapat menggunakan package {readxl} dengan fungsi read_excel() untuk import data dari file Excel. Argumen path = adalah lokasi dan nama file Excel yang akan kita gunakan.
library (readxl)
## Warning: package 'readxl' was built under R version 4.1.2
datacovidmobility <- read_excel(path = "DataMeninggalJuni2020.xlsx")
datacovidmobility
## # A tibble: 30 x 8
## Tanggal Meninggal retail_and_recreation_percent~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-06-01 00:00:00 521 -51 -18
## 2 2020-06-02 00:00:00 525 -46 -14
## 3 2020-06-03 00:00:00 529 -47 -16
## 4 2020-06-04 00:00:00 530 -46 -14
## 5 2020-06-05 00:00:00 532 -44 -13
## 6 2020-06-06 00:00:00 535 -48 -13
## 7 2020-06-07 00:00:00 537 -52 -18
## 8 2020-06-08 00:00:00 538 -41 -14
## 9 2020-06-09 00:00:00 547 -44 -16
## 10 2020-06-10 00:00:00 551 -42 -15
## # ... with 20 more rows, and 4 more variables:
## # 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>
1.2 Mengetahui Summary dari Data
Summary() atau ringkasan data digunakan untuk mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau median, Q3, maksimum).
summary(datacovidmobility)
## Tanggal Meninggal
## Min. :2020-06-01 00:00:00 Min. :521.0
## 1st Qu.:2020-06-08 06:00:00 1st Qu.:540.2
## Median :2020-06-15 12:00:00 Median :581.5
## Mean :2020-06-15 12:00:00 Mean :581.0
## 3rd Qu.:2020-06-22 18:00:00 3rd Qu.:618.8
## Max. :2020-06-30 00:00:00 Max. :641.0
## retail_and_recreation_percent_change_from_baseline
## Min. :-52.00
## 1st Qu.:-44.00
## Median :-38.00
## Mean :-38.63
## 3rd Qu.:-33.00
## Max. :-27.00
## grocery_and_pharmacy_percent_change_from_baseline
## Min. :-18.00
## 1st Qu.:-15.00
## Median :-13.00
## Mean :-12.97
## 3rd Qu.:-12.25
## Max. : -3.00
## parks_percent_change_from_baseline
## Min. :-91.00
## 1st Qu.:-88.75
## Median :-85.50
## Mean :-86.03
## 3rd Qu.:-84.00
## Max. :-77.00
## transit_stations_percent_change_from_baseline
## Min. :-69.00
## 1st Qu.:-54.00
## Median :-49.50
## Mean :-50.97
## 3rd Qu.:-47.00
## Max. :-40.00
## workplaces_percent_change_from_baseline
## Min. :-68.00
## 1st Qu.:-35.75
## Median :-34.00
## Mean :-32.47
## 3rd Qu.:-28.25
## Max. :-15.00
## residential_percent_change_from_baseline
## Min. :10.00
## 1st Qu.:14.00
## Median :16.00
## Mean :16.17
## 3rd Qu.:18.00
## Max. :27.00
1.3 Membuat Matriks Dengan Fungsi Pairs
Untuk membuat matriks scatterplot kita hanya perlu memasukkan objek datacovidmobility kedalam fungsi pairs(). Berikut adalah sintaks yang digunakan dan output yang dihasilkan
pairs(datacovidmobility)
Kita juga dapat melakukan drop terhadap panel bawah grafik tersebut, yaitu dengan memasukkan argumen lower.panel= NULL.
pairs(datacovidmobility, lower.panel=NULL)
1.4 Visualisasi Data Menggunakan Fungsi Plot
Fungsi plot() merupakan fungsi umum yang digunakan untuk membuat plot pada R.
plot(datacovidmobility$Meninggal ~ datacovidmobility$retail_and_recreation_percent_change_from_baseline, data = datacovidmobility)
Memvisualisasikan Data dengan Self Isolation sebagai variabel Y dan Google Mobility Index sebagai variabel X
plot(datacovidmobility$Meninggal ~ datacovidmobility$
retail_and_recreation_percent_change_from_baseline+datacovidmobility$
grocery_and_pharmacy_percent_change_from_baseline+datacovidmobility$
parks_percent_change_from_baseline+datacovidmobility$
transit_stations_percent_change_from_baseline+datacovidmobility$
workplaces_percent_change_from_baseline+datacovidmobility$
residential_percent_change_from_baseline, data = datacovidmobility)
1.5 Membuat Korelasi Antar Variabel
Korelasi merupakan keterhubungan antar variabel. Untuk mengukur seberapa jauh hubungan antara satu variabel dengan variabel yang lain kita dapat menggunakan fungsi cor() dengan sintaks sebagai berikut.
cor(datacovidmobility$Meninggal,datacovidmobility$
retail_and_recreation_percent_change_from_baseline)
## [1] 0.8724436
cor(datacovidmobility$Meninggal,datacovidmobility$
grocery_and_pharmacy_percent_change_from_baseline)
## [1] 0.6661621
cor(datacovidmobility$Meninggal,datacovidmobility$
parks_percent_change_from_baseline)
## [1] 0.890382
cor(datacovidmobility$Meninggal,datacovidmobility$
transit_stations_percent_change_from_baseline)
## [1] 0.8971743
cor(datacovidmobility$Meninggal,datacovidmobility$
workplaces_percent_change_from_baseline)
## [1] 0.4360668
cor(datacovidmobility$Meninggal,datacovidmobility$
residential_percent_change_from_baseline)
## [1] -0.6669158
Dari hasil seluruh output di atas dapat disimpulkan bahwa untuk tingkat keterhubungan antara variabel y dengan x1, x2, x3, x4, dan x5 memiliki hubungan karena nilai yang dihasilkan berjumlah lebih dari 0.4. Sedangkan untuk tingkat keterhubungan antara variabel y dan x6 tidak sangat terhubung karena nilai yang dihasilkan berjumlah kurang dari 0.
1.6 Melakukan Permodelan
Berikut cara melakukan permodelan regresi linier berganda.
model <- lm(datacovidmobility$Meninggal ~ datacovidmobility$Tanggal, data = datacovidmobility)
Selanjutnya dengan model yang telah dibuat di atas, kita akan menggunakan fungsi summary() untuk menjelaskan atau mereview hasil dari model tersebut. Dan dengan ringkasan summary(model) kita dapat melihat informasi terperinci tentang kinerja dan koefisian model.
summary(model)
##
## Call:
## lm(formula = datacovidmobility$Meninggal ~ datacovidmobility$Tanggal,
## data = datacovidmobility)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.4816 -4.0359 -0.1024 3.2798 8.6865
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.424e+04 1.955e+03 -43.09 <2e-16 ***
## datacovidmobility$Tanggal 5.327e-05 1.228e-06 43.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.03 on 28 degrees of freedom
## Multiple R-squared: 0.9853, Adjusted R-squared: 0.9848
## F-statistic: 1882 on 1 and 28 DF, p-value: < 2.2e-16
1.7 Menjelaskan Rincian Model Dengan Fungsi summary()
Di atas merupakan rincian dari model yang telah dibuat.
Di posisi paling atas terdapat lm formula adalah datacovidmobilityDIRAWAT datacovidmobility Tanggal, data = datacovidmobility.
Lalu di bawahnya terdapat 5 nilai residual. Residual adalah perbedaan antara nilai nyata dan nilai prediks, Yang mana semakin kecil nilai residual maka semakin baik atau benar model yang kita buat. Berikut nilai-nilai residual yang dihasilkan:
Nilai Minimum = -8.4816 Nilai Quartil 1 = -4.0359 Nilai Median = -0.1024 Nilai Quartil 3 = 3.2798 Nilai Maximum = 8.6865
Di bawah nilai residual terdapat koefisien, yang mana dalam koefisien tersebut terdapat nilai intersep, dan tanggal. Selain itu juga terdapat nilai-p dari koefisien
Selanjutnya terdapat dua R2 yaitu:
Multiple R-squared (pelipatan daripada variabel): 0.9853. Hal ini menunjukkan bahwa 0.009853% variasi variabel respon, y, dapat dijelaskan oleh variabel prediktor, x.
Multiple R-squared tidak dapat berkurang saat kita menambahkan lebih banyak variabel independen ke model yang kita buat.
Adjusted R-squared (tidak pelipatan pada variabel): 0.9848.
Adjusted R-squared lebih baik ada penambahan variabel. Jadi jika kita menambahkan lebih dari satu variabel ke model, itu hanya meningkat jika itu mengurangi kesalahan prediksi secara keseluruhan
1.8 Menggunakan Fungsi anova()
ANOVA (analysis of variance) adalah pengujian yang dilakukan dengan membandingkan varians. Dengan membandingkan varians tersebut, dapat diketahui ada tidaknya perbedaan rata-rata dari tiga atau lebih kelompok. Asumsi normalitas pada ANOVA adalah pada residual yaitu selisih antara Y Prediksi dengan Y Aktual. Tepatnya residual dapat dihitung sebagai berikut: Y Aktual – Y Prediksi. Dimana Y Aktual adalah Y sesungguhnya atau kenyataan. Sedangkan Y prediksi adalah Y hasil persamaan ANOVA.
anova(model)
## Analysis of Variance Table
##
## Response: datacovidmobility$Meninggal
## Df Sum Sq Mean Sq F value Pr(>F)
## datacovidmobility$Tanggal 1 47608 47608 1882 < 2.2e-16 ***
## Residuals 28 708 25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
1.9 Membuat plot() Model dari Data Real dan Data Prediksi
plot(datacovidmobility$Meninggal ~ datacovidmobility$
Tanggal,
data = datacovidmobility, col = "dodgerblue", pch = 20, cex = 1.5,
main = "Data Covid POSITIF di DKI Jakarta dan Google Mobility Index")
abline(model)
Dari Plot di atas perlu kita ketahui bahwa titik-titik hijau yang ada pada grafik tersebut adalah data real dan garis hitam di dalam kotak adalah data prediksi.
plot(cooks.distance(model), pch = 16, col = "dodgerblue")
plot(model)
1.10 Penggunaan AIC dan BIC
AIC dan BIC banyak digunakan dalam kriteria pemilihan model. AIC berarti Kriteria Informasi Akaike dan BIC berarti Kriteria Informasi Bayesian. Meskipun kedua istilah ini membahas pemilihan model, keduanya tidak sama. Seseorang dapat menemukan perbedaan antara dua pendekatan pemilihan model.
AIC(model)
## [1] 185.9859
BIC(model)
## [1] 190.1894
1.11 Memunculkan Nilai Predicted dan Memvisualisasikannya
head(predict(model), n = 15)
## 1 2 3 4 5 6 7 8
## 514.2645 518.8670 523.4694 528.0719 532.6743 537.2768 541.8792 546.4816
## 9 10 11 12 13 14 15
## 551.0841 555.6865 560.2890 564.8914 569.4939 574.0963 578.6988
plot(head(predict(model), n = 20))
1.12 Memunculkan Nilai Residuals
head(resid(model), n = 11)
## 1 2 3 4 5 6 7
## 6.7354839 6.1330367 5.5305895 1.9281424 -0.6743048 -2.2767519 -4.8791991
## 8 9 10 11
## -8.4816463 -4.0840934 -4.6865406 -5.2889878
coef(model)
## (Intercept) datacovidmobility$Tanggal
## -8.423520e+04 5.326906e-05
1.13 Membuat Tabel Untuk Menambah Data Residuals dan Data Predicted
Tabel di bawah merupakan semua proses yang telah dilakukan, sehingga terbuat tabel yang ada nilai residuals dan nilai protected.
datacovidmobility$residuals <- model$residuals
datacovidmobility$predicted <- model$fitted.values
datacovidmobility
## # A tibble: 30 x 10
## Tanggal Meninggal retail_and_recreation_percent~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-06-01 00:00:00 521 -51 -18
## 2 2020-06-02 00:00:00 525 -46 -14
## 3 2020-06-03 00:00:00 529 -47 -16
## 4 2020-06-04 00:00:00 530 -46 -14
## 5 2020-06-05 00:00:00 532 -44 -13
## 6 2020-06-06 00:00:00 535 -48 -13
## 7 2020-06-07 00:00:00 537 -52 -18
## 8 2020-06-08 00:00:00 538 -41 -14
## 9 2020-06-09 00:00:00 547 -44 -16
## 10 2020-06-10 00:00:00 551 -42 -15
## # ... with 20 more rows, and 6 more variables:
## # 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>, residuals <dbl>,
## # predicted <dbl>
1.14 Visualisasi Data Menggunakan scatter.smooth, boxplot dan plot
scatter.smooth(x=datacovidmobility$Tanggal, y=datacovidmobility$Meninggal,
main="Tanggal ~ Meninggal")
boxplot(datacovidmobility$Meninggal, main="Meninggal",
boxplot.stats(datacovidmobility$Meninggal)$out)
plot(density(datacovidmobility$Meninggal), main="Google Mobility Index: Meninggal",
ylab="Frequency")
coefs <- coef(model)
plot(Meninggal ~ Tanggal, data = datacovidmobility)
abline(coefs)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+',
round(coefs[2], 2), '*Meninggal'))
1.15 Melakukan Uji Korelasi Antar Variabel
Adanya korelasi antar variabel dapat dilakukan melalui visualisasi menggunakan scatterplot dan perhitungan matematis menggunakan metode Pearson untuk metode parametrik dan metode rangking Spearman dan Kendall untuk metode non-parametrik. Pada R uji korelasi dapat dilakukan dengan menggunakan fungsi cor.test(). Format fungsi tersebut adalah sebagai berikut:
Uji Korelasi Variabel y dengan x1
cor.test(datacovidmobility$
retail_and_recreation_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$retail_and_recreation_percent_change_from_baseline and datacovidmobility$Meninggal
## t = 9.4463, df = 28, p-value = 3.333e-10
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7469523 0.9379131
## sample estimates:
## cor
## 0.8724436
Uji Korelasi Variabel y dengan x2
cor.test(datacovidmobility$
grocery_and_pharmacy_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$grocery_and_pharmacy_percent_change_from_baseline and datacovidmobility$Meninggal
## t = 4.7264, df = 28, p-value = 5.859e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4024894 0.8277687
## sample estimates:
## cor
## 0.6661621
Uji Korelasi Variabel y dengan x3
cor.test(datacovidmobility$
parks_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$parks_percent_change_from_baseline and datacovidmobility$Meninggal
## t = 10.35, df = 28, p-value = 4.48e-11
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7804697 0.9469055
## sample estimates:
## cor
## 0.890382
Uji Korelasi Variabel y dengan x4
cor.test(datacovidmobility$
transit_stations_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$transit_stations_percent_change_from_baseline and datacovidmobility$Meninggal
## t = 10.749, df = 28, p-value = 1.91e-11
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7933280 0.9502875
## sample estimates:
## cor
## 0.8971743
Uji Korelasi Variabel y dengan x5
cor.test(datacovidmobility$
workplaces_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$workplaces_percent_change_from_baseline and datacovidmobility$Meninggal
## t = 2.5641, df = 28, p-value = 0.016
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.08992486 0.68821623
## sample estimates:
## cor
## 0.4360668
Uji Korelasi Variabel y dengan x6
cor.test(datacovidmobility$
residential_percent_change_from_baseline,
datacovidmobility$Meninggal)
##
## Pearson's product-moment correlation
##
## data: datacovidmobility$residential_percent_change_from_baseline and datacovidmobility$Meninggal
## t = -4.736, df = 28, p-value = 5.707e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8281952 -0.4036253
## sample estimates:
## cor
## -0.6669158
Berdasarkan seluruh output yang dihasilkan, metode Pearson menghasilkan output berupa nilai t uji, derajat kebebasan, nilai p-value, rentang estimasi nilai korelasi berdasarkan tingkat kepercayaan, dan estimasi nilai korelasi.
2.Referensi
2.1 https://rpubs.com/suhartono-uinmaliki/877449
2.2 https://riwayat-file-covid-19-dki-jakarta-jakartagis.hub.arcgis.com/