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.
Disini 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.3
datacovidmobility <- read_excel(path = "DataPasienDirawatDesemberDKIJakarta.xlsx")
datacovidmobility## # A tibble: 31 x 8
## Tanggal Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-12-31 00:00:00 5821 -24 1
## 2 2020-12-30 00:00:00 5654 -24 -3
## 3 2020-12-29 00:00:00 5059 -26 -6
## 4 2020-12-28 00:00:00 4581 -23 -2
## 5 2020-12-27 00:00:00 4452 -25 -2
## 6 2020-12-26 00:00:00 4510 -33 -13
## 7 2020-12-25 00:00:00 5742 -28 -9
## 8 2020-12-24 00:00:00 5305 -26 -6
## 9 2020-12-23 00:00:00 4947 -26 -9
## 10 2020-12-22 00:00:00 4462 -27 -7
## # ... with 21 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>
summary() atau ringkasan data digunakan untuk mencari
nilai statistik lima serangkai (minimum, Q1, Q2 atau median, Q3,
maksimum).
summary(datacovidmobility)## Tanggal Dirawat
## Min. :2020-12-01 00:00:00 Min. :1861
## 1st Qu.:2020-12-08 12:00:00 1st Qu.:2297
## Median :2020-12-16 00:00:00 Median :3705
## Mean :2020-12-16 00:00:00 Mean :3725
## 3rd Qu.:2020-12-23 12:00:00 3rd Qu.:4944
## Max. :2020-12-31 00:00:00 Max. :5821
## retail_and_recreation_percent_change_from_baseline
## Min. :-36.00
## 1st Qu.:-28.50
## Median :-27.00
## Mean :-27.48
## 3rd Qu.:-25.00
## Max. :-23.00
## grocery_and_pharmacy_percent_change_from_baseline
## Min. :-17.000
## 1st Qu.: -8.500
## Median : -6.000
## Mean : -6.548
## 3rd Qu.: -3.500
## Max. : 1.000
## parks_percent_change_from_baseline
## Min. :-59.00
## 1st Qu.:-49.50
## Median :-47.00
## Mean :-47.52
## 3rd Qu.:-45.50
## Max. :-37.00
## transit_stations_percent_change_from_baseline
## Min. :-53.00
## 1st Qu.:-39.00
## Median :-36.00
## Mean :-36.39
## 3rd Qu.:-33.50
## Max. :-27.00
## workplaces_percent_change_from_baseline
## Min. :-66.00
## 1st Qu.:-32.50
## Median :-30.00
## Mean :-30.77
## 3rd Qu.:-27.50
## Max. :-10.00
## residential_percent_change_from_baseline
## Min. : 6.00
## 1st Qu.:10.50
## Median :12.00
## Mean :11.87
## 3rd Qu.:13.00
## Max. :22.00
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)Fungsi plot() merupakan fungsi umum yang digunakan untuk membuat plot pada R.
plot(datacovidmobility$Dirawat ~ datacovidmobility$Tanggal, data = datacovidmobility)Memvisualisasikan Data dengan Self Isolation sebagai variabel Y dan Google Mobility Index sebagai variabel X
plot(datacovidmobility$Dirawat ~ 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)Korelasi merupakan keterhubungan antar variabel. Untuk mengukur seberapa jauh hubungan antara satu variabel dengan variabel yang lain kita dapat menggunakan fungsi cor().
cor(datacovidmobility$Dirawat,datacovidmobility$
retail_and_recreation_percent_change_from_baseline)## [1] 0.3800888
cor(datacovidmobility$Dirawat,datacovidmobility$
grocery_and_pharmacy_percent_change_from_baseline)## [1] 0.2644973
cor(datacovidmobility$Dirawat,datacovidmobility$
parks_percent_change_from_baseline)## [1] -0.1606742
cor(datacovidmobility$Dirawat,datacovidmobility$
transit_stations_percent_change_from_baseline)## [1] 0.1655492
cor(datacovidmobility$Dirawat,datacovidmobility$
workplaces_percent_change_from_baseline)## [1] 0.2648536
cor(datacovidmobility$Dirawat,datacovidmobility$
residential_percent_change_from_baseline)## [1] -0.216756
Dari hasil seluruh output di atas dapat disimpulkan bahwa untuk tingkat keterhubungan antara variabel y dengan x1, x2, x3, x4, dan x5 tidak memiliki hubungan sama sekali karena nilai yang dihasilkan berjumlah kurang dari 0. Sedangkan untuk tingkat keterhubungan antara variabel y dan x6 tidak sangat terhubung karena nilai yang dihasilkan di bawah 0,4.
Berikut cara melakukan permodelan regresi linier berganda.
model <- lm(datacovidmobility$Dirawat ~ 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$Dirawat ~ datacovidmobility$Tanggal,
## data = datacovidmobility)
##
## Residuals:
## Min 1Q Median 3Q Max
## -806.6 -379.5 -38.7 353.4 1136.6
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.551e+06 2.017e+05 -12.65 2.50e-13 ***
## datacovidmobility$Tanggal 1.589e-03 1.254e-04 12.67 2.41e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 539.7 on 29 degrees of freedom
## Multiple R-squared: 0.8469, Adjusted R-squared: 0.8416
## F-statistic: 160.5 on 1 and 29 DF, p-value: 2.408e-13
Menjelaskan rincian Model dengan fungsi summary() Di atas merupakan rincian dari model yang telah dibuat.
Di posisi paling atas terdapat lm formula adalah
datacovidmobility$SelfIsolation ~ datacovidmobility$Tanggal, data = datacovidmobility.
Lalu di bawahnya terdapat 5 nilai residual, sebelumnya kita perlu tahu bahwa Residual adalah perbedaan antara nilai nyata dan nilai prediksi. Yang mana semakin kecil nilai residual maka semakin baik atau benar model yang kita buat. Berikut nilai-nilai residual yang dihasilkan:
Nilai minimum = -806.6
Nilai maximum = 1136.6
Nilai median = -38.7
Nilai quartil 1 = -379.5
Nilai quartil 3 = 353.4
Dari nilai-nilai tersebut dapat kita lihat bahwa dalam konteks ini berupa nilai minimum, maximum, median, quartil 1 dan quartil 3. Dapat kita simpulkan bahwa model yang telah kita buat belum bisa dikatakan baik atau benar karena nilai-nilai yang dihasilkan tidak mendekati nol.
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 tidak dapat berkurang saat kita menambahkan lebih banyak variabel independen ke model yang kita buat.
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
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$Dirawat
## Df Sum Sq Mean Sq F value Pr(>F)
## datacovidmobility$Tanggal 1 46739392 46739392 160.45 2.408e-13 ***
## Residuals 29 8447632 291298
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(datacovidmobility$Dirawat ~ datacovidmobility$
Tanggal,
data = datacovidmobility, col = "Blue", pch = 20, cex = 1.5,
main = "Data Pasien Covid yang Dirawat 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 = "Blue") plot(model)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] 481.9519
BIC(model)## [1] 486.2538
head(predict(model), n = 11)## 1 2 3 4 5 6 7 8
## 5783.788 5646.506 5509.223 5371.940 5234.658 5097.375 4960.092 4822.810
## 9 10 11
## 4685.527 4548.244 4410.962
plot(head(predict(model), n = 10))head(resid(model), n = 11)## 1 2 3 4 5 6
## 37.211694 7.494355 -450.222984 -790.940323 -782.657661 -587.375000
## 7 8 9 10 11
## 781.907661 482.190323 261.472984 -86.244355 395.038306
coef(model)## (Intercept) datacovidmobility$Tanggal
## -2.55138e+06 1.58892e-03
Tabel di bawah merupakan semua proses yang telah dilakukan, sehingga terbuat tabel yang ada nilai residuals dan nilai protected.
datacovidmobility$residuals <- model$residualsdatacovidmobility$predicted <- model$fitted.values
datacovidmobility## # A tibble: 31 x 10
## Tanggal Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-12-31 00:00:00 5821 -24 1
## 2 2020-12-30 00:00:00 5654 -24 -3
## 3 2020-12-29 00:00:00 5059 -26 -6
## 4 2020-12-28 00:00:00 4581 -23 -2
## 5 2020-12-27 00:00:00 4452 -25 -2
## 6 2020-12-26 00:00:00 4510 -33 -13
## 7 2020-12-25 00:00:00 5742 -28 -9
## 8 2020-12-24 00:00:00 5305 -26 -6
## 9 2020-12-23 00:00:00 4947 -26 -9
## 10 2020-12-22 00:00:00 4462 -27 -7
## # ... with 21 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>
scatter.smooth(x=datacovidmobility$Tanggal, y=datacovidmobility$Dirawat,
main="Tanggal ~ Dirawat")boxplot(datacovidmobility$Dirawat, main="Dirawat",
boxplot.stats(datacovidmobility$Dirawat)$out)plot(density(datacovidmobility$Dirawat), main="Google Mobility Index: Pasien Dirawat",
ylab="Frequency")coefs <- coef(model)
plot(Dirawat ~ Tanggal, data = datacovidmobility)
abline(coefs)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+',
round(coefs[2], 2), '*Dirawat'))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:
cor.test(datacovidmobility$
retail_and_recreation_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$retail_and_recreation_percent_change_from_baseline and datacovidmobility$Dirawat
## t = 2.2129, df = 29, p-value = 0.03493
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.02975625 0.64725600
## sample estimates:
## cor
## 0.3800888
cor.test(datacovidmobility$
grocery_and_pharmacy_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$grocery_and_pharmacy_percent_change_from_baseline and datacovidmobility$Dirawat
## t = 1.477, df = 29, p-value = 0.1505
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.0991338 0.5658087
## sample estimates:
## cor
## 0.2644973
cor.test(datacovidmobility$
parks_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$parks_percent_change_from_baseline and datacovidmobility$Dirawat
## t = -0.87665, df = 29, p-value = 0.3879
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4872723 0.2053576
## sample estimates:
## cor
## -0.1606742
cor.test(datacovidmobility$
transit_stations_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$transit_stations_percent_change_from_baseline and datacovidmobility$Dirawat
## t = 0.90398, df = 29, p-value = 0.3735
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2005557 0.4910821
## sample estimates:
## cor
## 0.1655492
cor.test(datacovidmobility$
workplaces_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$workplaces_percent_change_from_baseline and datacovidmobility$Dirawat
## t = 1.4791, df = 29, p-value = 0.1499
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.09875446 0.56606911
## sample estimates:
## cor
## 0.2648536
cor.test(datacovidmobility$
residential_percent_change_from_baseline,
datacovidmobility$Dirawat)##
## Pearson's product-moment correlation
##
## data: datacovidmobility$residential_percent_change_from_baseline and datacovidmobility$Dirawat
## t = -1.1957, df = 29, p-value = 0.2415
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.5303616 0.1490304
## sample estimates:
## cor
## -0.216756
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.