Regresi linear berganda ialah salah satu model regresi yang di dalamnya melibatkan lebih dari satu variabel independen. Analisis ini berfungsi untuk mengetahui arah dan seberapa besar pengaruh variabel independen terhadap variabel dependen
Data yang digunakan adalah data kematian Covid-19 Bulan September yang disimpan di dalam excel, data disimpan di dalam excel karena excel berfungsi dalam pengolahan data yang dapat berupa angka maupun perhitunga.
library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
datadirawat<- read_excel(path = "DataDirawatSeptember.xlsx")
datadirawat
## # A tibble: 30 x 8
## Tanggal Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-09-01 00:00:00 3341 -24 -2
## 2 2020-09-02 00:00:00 3568 -25 -6
## 3 2020-09-03 00:00:00 3709 -25 -6
## 4 2020-09-04 00:00:00 3827 -22 -5
## 5 2020-09-05 00:00:00 3677 -25 -4
## 6 2020-09-06 00:00:00 4082 -30 -10
## 7 2020-09-07 00:00:00 4341 -25 -8
## 8 2020-09-08 00:00:00 4432 -26 -9
## 9 2020-09-09 00:00:00 4554 -26 -10
## 10 2020-09-10 00:00:00 4728 -26 -10
## # ... 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>
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.1.3
x <- datadirawat$Dirawat
retail <- datadirawat$retail_and_recreation_percent_change_from_baseline
grocery <- datadirawat$grocery_and_pharmacy_percent_change_from_baseline
park <- datadirawat$parks_percent_change_from_baseline
station <- datadirawat$transit_stations_percent_change_from_baseline
workplace <- datadirawat$workplaces_percent_change_from_baseline
residental <- datadirawat$residential_percent_change_from_baseline
df <- data.frame(x, retail, grocery, park, station, workplace,residental )
# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")
# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable))+
geom_point() +
geom_line() +
theme(legend.justification = "top") +
labs(title = "Google Mobility Index",
subtitle = "Provinsi DKI Jakarta Indonesia Bulan September 2020",
y = "Mobility", x = "Data Dirawat") +
theme(axis.text.x = element_text(angle = -90))
summary() atau ringkasan data digunakan untuk mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau median, Q3, maksimum).
summary(datadirawat)
## Tanggal Dirawat
## Min. :2020-09-01 00:00:00 Min. :1964
## 1st Qu.:2020-09-08 06:00:00 1st Qu.:3530
## Median :2020-09-15 12:00:00 Median :3834
## Mean :2020-09-15 12:00:00 Mean :3818
## 3rd Qu.:2020-09-22 18:00:00 3rd Qu.:4612
## Max. :2020-09-30 00:00:00 Max. :4802
## retail_and_recreation_percent_change_from_baseline
## Min. :-53.00
## 1st Qu.:-41.75
## Median :-38.50
## Mean :-35.00
## 3rd Qu.:-26.00
## Max. :-22.00
## grocery_and_pharmacy_percent_change_from_baseline
## Min. :-30.00
## 1st Qu.:-18.75
## Median :-12.00
## Mean :-13.47
## 3rd Qu.: -8.00
## Max. : -2.00
## parks_percent_change_from_baseline
## Min. :-76.00
## 1st Qu.:-65.00
## Median :-61.50
## Mean :-61.83
## 3rd Qu.:-59.00
## Max. :-51.00
## transit_stations_percent_change_from_baseline
## Min. :-55.0
## 1st Qu.:-52.0
## Median :-47.0
## Mean :-45.6
## 3rd Qu.:-41.0
## Max. :-34.0
## workplaces_percent_change_from_baseline
## Min. :-39.00
## 1st Qu.:-37.00
## Median :-32.00
## Mean :-30.27
## 3rd Qu.:-23.25
## Max. :-13.00
## residential_percent_change_from_baseline
## Min. : 8.0
## 1st Qu.:13.0
## Median :14.0
## Mean :14.9
## 3rd Qu.:18.0
## Max. :19.0
Untuk membuat matriks scatterplot kita hanya perlu memasukkan objek datacovidmobility kedalam fungsi pairs(). Berikut adalah sintaks yang digunakan dan output yang dihasilkan
pairs(datadirawat)
Kita juga dapat melakukan drop terhadap panel bawah grafik tersebut, yaitu dengan memasukkan argumen lower.panel=NULL.
pairs(datadirawat, lower.panel=NULL)
Fungsi plot() merupakan fungsi umum yang digunakan untuk membuat plot pada R.
plot(datadirawat$Dirawat ~ datadirawat$retail_and_recreation_percent_change_from_baseline, data = datadirawat)
Memvisualisasikan Data dengan Self Isolation sebagai variabel Y dan Google Mobility Index sebagai variabel X
plot(datadirawat$Dirawat ~ datadirawat$
retail_and_recreation_percent_change_from_baseline+datadirawat$
grocery_and_pharmacy_percent_change_from_baseline+datadirawat$
parks_percent_change_from_baseline+datadirawat$
transit_stations_percent_change_from_baseline+datadirawat$
workplaces_percent_change_from_baseline+datadirawat$
residential_percent_change_from_baseline, data = datadirawat)
Korelasi merupakan keterhubungan antar variabel. Untuk mengukur seberapa jauh hubungan antara satu variabel dengan variabel yang lain kita dapat menggunakan fungsi cor().
cor(datadirawat$Dirawat,datadirawat$
retail_and_recreation_percent_change_from_baseline)
## [1] 0.3679375
Korelasi variabel y dengan x2
cor(datadirawat$Dirawat,datadirawat$
grocery_and_pharmacy_percent_change_from_baseline)
## [1] -0.116743
Korelasi variabel y dengan x3
cor(datadirawat$Dirawat,datadirawat$
parks_percent_change_from_baseline)
## [1] 0.218901
Korelasi variabel y dengan x4
cor(datadirawat$Dirawat,datadirawat$
transit_stations_percent_change_from_baseline)
## [1] 0.1267941
Korelasi variabel y dengan x5
cor(datadirawat$Dirawat,datadirawat$
workplaces_percent_change_from_baseline)
## [1] 0.04815023
Korelasi variabel y dengan x6
cor(datadirawat$Dirawat,datadirawat$
residential_percent_change_from_baseline)
## [1] -0.1404836
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.3. Sedangkan untuk tingkat keterhubungan antara variabel y dan x6 tidak sangat terhubung karena nilai yang dihasilkan berjumlah kurang dari 0.
Berikut cara melakukan permodelan regresi linier berganda.
model <- lm(datadirawat$Dirawat ~ datadirawat$Tanggal, data = datadirawat)
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 = datadirawat$Dirawat ~ datadirawat$Tanggal, data = datadirawat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1291.1 -714.7 216.4 619.1 1012.2
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.044e+06 2.863e+05 3.646 0.00108 **
## datadirawat$Tanggal -6.499e-04 1.789e-04 -3.633 0.00111 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 732.8 on 28 degrees of freedom
## Multiple R-squared: 0.3203, Adjusted R-squared: 0.296
## F-statistic: 13.2 on 1 and 28 DF, p-value: 0.001115
Di atas merupakan rincian dari model yang telah dibuat.
Di posisi paling atas terdapat lm formula adalah datadirawatPOSITIF datacovidmobilityTanggal, 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 = -1291.1
Nilai maximum = 1012.2
Nilai median = 216.4
Nilai quartil 1 = -714.7
Nilai quartil 3 = -619.1
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 (pelipatan daripada variabel): 0.6423. Hal ini menunjukkan bahwa 0.006423% 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.6295.
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) merupakan salah satu pengujian yang dilakukan dengan cara membandingkan varians, sehingga dapat diketahui perbedaan rata-rata dari tiga atau lebih kelompok. Asumsi normalitas pada ANOVA adalah pada residual yaitu selisih antara Y Aktual(Y sesungguhnya atau kenyataan) – Y Prediksi(Y hasil persamaan ANOVA).
anova(model)
## Analysis of Variance Table
##
## Response: datadirawat$Dirawat
## Df Sum Sq Mean Sq F value Pr(>F)
## datadirawat$Tanggal 1 7085898 7085898 13.195 0.001115 **
## Residuals 28 15036174 537006
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(datadirawat$Dirawat ~ datadirawat$
Tanggal,
data = datadirawat, col = "red", pch = 20, cex = 1.5,
main = "Data Orang Dirawat Covid-19 di DKI Jakarta dan Google Mobility Index")
abline(model)
Keterangan : ) Titik-titik merah pada grafik merupakan data real ) Garis hitam yang membelah diagonal adalah data prediksi.
plot(cooks.distance(model), pch = 16, col = "blue")
plot(model)
AIC (Kriteria Informasi Akaike) dan BIC (Kriteria Informasi Bayesian). Kedua model ini memiliki karakteristik yang berbeda meskipun sekilas terlihat sama, adapun perbedaannya dapat dilihat melalui pendekatan pemilihan model.
AIC(model)
## [1] 484.8795
BIC(model)
## [1] 489.0831
head(predict(model), n = 20)
## 1 2 3 4 5 6 7 8
## 4632.071 4575.921 4519.772 4463.622 4407.472 4351.322 4295.173 4239.023
## 9 10 11 12 13 14 15 16
## 4182.873 4126.723 4070.574 4014.424 3958.274 3902.125 3845.975 3789.825
## 17 18 19 20
## 3733.675 3677.526 3621.376 3565.226
plot(head(predict(model), n = 20))
head(resid(model), n = 15)
## 1 2 3 4 5 6
## -1291.07097 -1007.92125 -810.77152 -636.62180 -730.47208 -269.32236
## 7 8 9 10 11 12
## 45.82736 192.97709 371.12681 601.27653 610.42625 669.57597
## 13 14 15
## 690.72570 728.87542 622.02514
coef(model)
## (Intercept) datadirawat$Tanggal
## 1.043739e+06 -6.498810e-04
Pada Tabel di bawah ini memuat proses yang telah dilakukan sebelumnya, sehingga terbuat tabel yang ada nilai residuals dan nilai protected.
datadirawat$residuals <- model$residuals
datadirawat$predicted <- model$fitted.values
datadirawat
## # A tibble: 30 x 10
## Tanggal Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
## <dttm> <dbl> <dbl> <dbl>
## 1 2020-09-01 00:00:00 3341 -24 -2
## 2 2020-09-02 00:00:00 3568 -25 -6
## 3 2020-09-03 00:00:00 3709 -25 -6
## 4 2020-09-04 00:00:00 3827 -22 -5
## 5 2020-09-05 00:00:00 3677 -25 -4
## 6 2020-09-06 00:00:00 4082 -30 -10
## 7 2020-09-07 00:00:00 4341 -25 -8
## 8 2020-09-08 00:00:00 4432 -26 -9
## 9 2020-09-09 00:00:00 4554 -26 -10
## 10 2020-09-10 00:00:00 4728 -26 -10
## # ... 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>
scatter.smooth(x=datadirawat$Tanggal, y=datadirawat$Dirawat,
main="Tanggal ~ Dirawat")
boxplot(datadirawat$Dirawat, main="Kasus Dirawat Covid",
boxplot.stats(datadirawat$Dirawat)$out)
plot(density(datadirawat$Dirawat), main="Google Mobility Index: Kasus Covid Dirawat",
ylab="Frequency")
coefs <- coef(model)
plot(Dirawat ~ Tanggal, data = datadirawat)
abline(coefs)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2), '+',
round(coefs[2], 2), '*Dirawat'))
Keterkaitan atau keterhubungan antar variabel bisa dilakukan dengan cara melakukan visualisasi menggunakan scatterplot dengan hitungan matematis yang menggunakan metode Pearson. Sedangkan metode parametrik, metode rangking Spearman dan Kendall digunakan untuk metode non-parametrik. Pada R uji keterhubungan dilakukan dengan menggunakan fungsi cor.test(). a) Uji Korelasi Antara Variabel Y Dengan X1
cor.test(datadirawat$
retail_and_recreation_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$retail_and_recreation_percent_change_from_baseline and datadirawat$Dirawat
## t = 2.0938, df = 28, p-value = 0.04545
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.008840048 0.642976009
## sample estimates:
## cor
## 0.3679375
cor.test(datadirawat$
grocery_and_pharmacy_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$grocery_and_pharmacy_percent_change_from_baseline and datadirawat$Dirawat
## t = -0.622, df = 28, p-value = 0.539
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4577593 0.2542184
## sample estimates:
## cor
## -0.116743
cor.test(datadirawat$
parks_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$parks_percent_change_from_baseline and datadirawat$Dirawat
## t = 1.1871, df = 28, p-value = 0.2452
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1534715 0.5368338
## sample estimates:
## cor
## 0.218901
cor.test(datadirawat$
transit_stations_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$transit_stations_percent_change_from_baseline and datadirawat$Dirawat
## t = 0.67639, df = 28, p-value = 0.5043
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2446507 0.4657862
## sample estimates:
## cor
## 0.1267941
cor.test(datadirawat$
workplaces_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$workplaces_percent_change_from_baseline and datadirawat$Dirawat
## t = 0.25508, df = 28, p-value = 0.8005
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3176289 0.4014554
## sample estimates:
## cor
## 0.04815023
cor.test(datadirawat$
residential_percent_change_from_baseline,
datadirawat$Dirawat)
##
## Pearson's product-moment correlation
##
## data: datadirawat$residential_percent_change_from_baseline and datadirawat$Dirawat
## t = -0.75082, df = 28, p-value = 0.459
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4766297 0.2315024
## sample estimates:
## cor
## -0.1404836
Dari seluruh output yang dihasilkan maka dapat dilihat bahwa Metode Pearson menghasilkan output berupa nilai t uji, derajat kebebasan, nilai p-value, rentang estimasi nilai korelasi berdasarkan tingkat kepercayaan, dan estimasi nilai korelasi.