Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malan”
Jurusan : Teknik Informatika
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.
library(readxl)
## Warning: package 'readxl' was built under R version 4.1.3
dataDirawat <- read_excel((path = "Data Dirawat Covid DKI Jakarta Bulan Agustus.xlsx"))
dataDirawat
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 Agustus 2020",
y = "Mobility", x = "Data Dirawat") +
theme(axis.text.x = element_text(angle = -90))
summary(dataDirawat)
## Tanggal Dirawat
## Min. :2020-08-01 00:00:00 Min. :2153
## 1st Qu.:2020-08-08 12:00:00 1st Qu.:2508
## Median :2020-08-16 00:00:00 Median :2576
## Mean :2020-08-16 00:00:00 Mean :2611
## 3rd Qu.:2020-08-23 12:00:00 3rd Qu.:2716
## Max. :2020-08-31 00:00:00 Max. :3288
## retail_and_recreation_percent_change_from_baseline
## Min. :-37.00
## 1st Qu.:-32.00
## Median :-27.00
## Mean :-28.32
## 3rd Qu.:-26.00
## Max. :-21.00
## grocery_and_pharmacy_percent_change_from_baseline
## Min. :-19.000
## 1st Qu.:-14.000
## Median : -9.000
## Mean : -9.871
## 3rd Qu.: -7.000
## Max. : -2.000
## parks_percent_change_from_baseline
## Min. :-71.00
## 1st Qu.:-65.50
## Median :-62.00
## Mean :-62.06
## 3rd Qu.:-59.00
## Max. :-49.00
## transit_stations_percent_change_from_baseline
## Min. :-57.00
## 1st Qu.:-42.00
## Median :-41.00
## Mean :-40.84
## 3rd Qu.:-38.50
## Max. :-32.00
## workplaces_percent_change_from_baseline
## Min. :-70.0
## 1st Qu.:-33.0
## Median :-31.0
## Mean :-30.1
## 3rd Qu.:-20.0
## Max. :-12.0
## residential_percent_change_from_baseline
## Min. : 7.00
## 1st Qu.: 9.00
## Median :14.00
## Mean :12.58
## 3rd Qu.:14.00
## Max. :21.00
pairs(dataDirawat)
pairs(dataDirawat, lower.panel=NULL)
plot(dataDirawat$Dirawat ~ dataDirawat$Tanggal, data = dataDirawat)
Mengvisualisasikan dengan Data Positif sebagai Variable Y dan Google Mobility Index sebagai Variable 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)
## Warning in plot.window(...): "data" is not a graphical parameter
## Warning in plot.xy(xy, type, ...): "data" is not a graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "data" is not a
## graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "data" is not a
## graphical parameter
## Warning in box(...): "data" is not a graphical parameter
## Warning in title(...): "data" is not a graphical parameter
Korelasi Variable Y dengan X1
cor(dataDirawat$Dirawat,dataDirawat$retail_and_recreation_percent_change_from_baseline)
## [1] 0.418288
Korelasi Variable Y dengan X2
cor(dataDirawat$Dirawat,dataDirawat$grocery_and_pharmacy_percent_change_from_baseline)
## [1] 0.2548986
Korelasi Variable Y dengan X3
cor(dataDirawat$Dirawat,dataDirawat$parks_percent_change_from_baseline)
## [1] 0.4896806
Korelasi Variable Y dengan X4
cor(dataDirawat$Dirawat,dataDirawat$transit_stations_percent_change_from_baseline)
## [1] 0.1840179
Korelasi Variable Y dengan X5
cor(dataDirawat$Dirawat,dataDirawat$workplaces_percent_change_from_baseline)
## [1] 0.130145
Korelasi Variable Y dengan X6
cor(dataDirawat$Dirawat,dataDirawat$residential_percent_change_from_baseline)
## [1] 0.03703214
Permodelan Regresi Linier Berganda
model <- lm(dataDirawat$Dirawat ~ dataDirawat$Tanggal, data = dataDirawat)
summary(model)
##
## Call:
## lm(formula = dataDirawat$Dirawat ~ dataDirawat$Tanggal, data = dataDirawat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -297.06 -105.33 20.39 73.12 385.16
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.569e+05 5.305e+04 -6.728 2.21e-07 ***
## dataDirawat$Tanggal 2.251e-04 3.321e-05 6.778 1.93e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 142.9 on 29 degrees of freedom
## Multiple R-squared: 0.613, Adjusted R-squared: 0.5997
## F-statistic: 45.94 on 1 and 29 DF, p-value: 1.935e-07
Di atas merupakan rincian dari model yang telah dibuat.
Di posisi paling atas terdapat lm formula adalah dataDirawat$Dirawat ~ dataDirawat$Tanggal, data = dataDirawat
Lalu di bawahnya terdapat 5 nilai residual, sebelumnya kita perlu tahu bahwa Residual merupakan selisih dari nilai prediksi dan nilai sebenarnya (actual) atau ei =Yi - (a + b Xi ). Jika nilai pengamatan terletak dalam garis regresi maka nilai residunya sama dengan nol. Yang mana semakin kecil nilai residual maka semakin baik atau benar model yang kita buat. Berikut nilai-nilai residual yang dihasilkan:
Nilai minimum = -22.032
Nilai maximum = 10.413
Nilai median = 1.523
Nilai quartil 1 = -4.415
Nilai quartil 3 = 6.648
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, retail_and_recreation, grocery_and_pharmacy, parks, transit_stations, workplaces dan residential. Selain itu juga terdapat nilai-p dari koefisien
Uji Anova(Analysis of Variance Table) berfungsi untuk membandingkan rata-rata populasi untuk mengetahui perbedaan signifikan dari dua atau lebih kelompok data.
anova(model)
plot(dataDirawat$Dirawat ~ dataDirawat$Tanggal, data = dataDirawat, col = "navy", pch = 20, cex = 1.5, main = "Data Inflow Covid DKI Jakarta Agustus 2020 dan Google Mobility Index")
abline(model)
Titik-titik biru tua yang ada pada grafik tersebut adalah data real dan garis hitam di dalam kotak adalah data prediksi
plot(cooks.distance(model), pch = 16, col = "navy") #Plot the Cooks Distances.
plot(model)
AIC(model)
## [1] 399.5496
BIC(model)
## [1] 403.8516
Nilai Predicted dan Residuals
head(predict(model), n = 11)
## 1 2 3 4 5 6 7 8
## 2319.484 2338.929 2358.374 2377.819 2397.265 2416.710 2436.155 2455.600
## 9 10 11
## 2475.045 2494.490 2513.935
plot(head(predict(model), n = 10))
head(resid(model), n = 11)
## 1 2 3 4 5 6 7
## -166.48387 -179.92903 -31.37419 54.18065 85.73548 135.29032 158.84516
## 8 9 10 11
## 32.40000 -59.04516 60.50968 34.06452
coef(model)
## (Intercept) dataDirawat$Tanggal
## -3.569299e+05 2.250597e-04
Tabel Data Predicted dan Data Residuals
dataDirawat$residuals <- model$residuals
dataDirawat$predicted <- model$fitted.values
dataDirawat
Visualisasi Data Menggunakan Scatter.Smooth, Boxplot dan Plot
scatter.smooth(x=dataDirawat$Tanggal, y=dataDirawat$Dirawat, main="Tanggal ~ Dirawat")
boxplot(dataDirawat$Dirawat, main="Data Dirawat", boxplot.stats(dataDirawat$Dirawat)$out)
plot(density(dataDirawat$Dirawat), main="Google Mobility Index : Data 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), '*dataDirawat'))
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.
Uji Korelasi Variable 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.4799, df = 29, p-value = 0.01919
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.07507529 0.67289430
## sample estimates:
## cor
## 0.418288
Uji Korelasi Variable Y dengan X2
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 = 1.4196, df = 29, p-value = 0.1664
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1093150 0.5587701
## sample estimates:
## cor
## 0.2548986
Uji Korelasi Variable Y dengan X3
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 = 3.0244, df = 29, p-value = 0.005173
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1637540 0.7192254
## sample estimates:
## cor
## 0.4896806
Uji Korelasi Variable Y dengan X4
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 = 1.0082, df = 29, p-value = 0.3217
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1822028 0.5054032
## sample estimates:
## cor
## 0.1840179
Uji Korelasi Variable Y dengan X5
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.70686, df = 29, p-value = 0.4853
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2350338 0.4631277
## sample estimates:
## cor
## 0.130145
Uji Korelasi Variable Y dengan X6
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.19956, df = 29, p-value = 0.8432
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3215270 0.3863032
## sample estimates:
## cor
## 0.03703214