Dosen Pengampu: Prof. Dr. Suhartono, M.Kom.

Prodi : Teknik Informatika

Lembaga : UIN Maulana Malik Ibrahim Malang

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 biasa disebut dengan multiple linear regression.

Mengambil Data dan Menampilkannya

Di sini data diambil dari Excel. Excel adalah salah satu jenis program spreadsheet yang paling 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 digunakan.

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.3
datacoviddirawat <- read_excel(path = "Dirawat.xlsx")
datacoviddirawat
## # A tibble: 31 x 8
##    Tanggal             Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
##    <dttm>                <dbl>                            <dbl>            <dbl>
##  1 2021-08-01 00:00:00    6485                              -42               -5
##  2 2021-08-02 00:00:00    5777                              -32                2
##  3 2021-08-03 00:00:00    5299                              -34               -1
##  4 2021-08-04 00:00:00    4916                              -34               -2
##  5 2021-08-05 00:00:00    4419                              -37               -6
##  6 2021-08-06 00:00:00    3974                              -31                2
##  7 2021-08-07 00:00:00    3219                              -36                2
##  8 2021-08-08 00:00:00    3075                              -39               -5
##  9 2021-08-09 00:00:00    2926                              -32               -2
## 10 2021-08-10 00:00:00    3024                              -35               -6
## # ... 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>

Mengetahui summary() dari Data

summary() adalah ringkasan data yang digunakan untuk mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau median, Q3, maksimum).

summary(datacoviddirawat)
##     Tanggal                       Dirawat    
##  Min.   :2021-08-01 00:00:00   Min.   :2116  
##  1st Qu.:2021-08-08 12:00:00   1st Qu.:2760  
##  Median :2021-08-16 00:00:00   Median :2947  
##  Mean   :2021-08-16 00:00:00   Mean   :3265  
##  3rd Qu.:2021-08-23 12:00:00   3rd Qu.:3209  
##  Max.   :2021-08-31 00:00:00   Max.   :6485  
##  retail_and_recreation_percent_change_from_baseline
##  Min.   :-42.00                                    
##  1st Qu.:-34.00                                    
##  Median :-31.00                                    
##  Mean   :-31.16                                    
##  3rd Qu.:-28.00                                    
##  Max.   :-22.00                                    
##  grocery_and_pharmacy_percent_change_from_baseline
##  Min.   :-13.000                                  
##  1st Qu.: -5.500                                  
##  Median : -2.000                                  
##  Mean   : -2.161                                  
##  3rd Qu.:  0.000                                  
##  Max.   :  6.000                                  
##  parks_percent_change_from_baseline
##  Min.   :-67.0                     
##  1st Qu.:-54.0                     
##  Median :-50.0                     
##  Mean   :-50.9                     
##  3rd Qu.:-47.0                     
##  Max.   :-41.0                     
##  transit_stations_percent_change_from_baseline
##  Min.   :-61.00                               
##  1st Qu.:-51.00                               
##  Median :-47.00                               
##  Mean   :-47.84                               
##  3rd Qu.:-45.00                               
##  Max.   :-39.00                               
##  workplaces_percent_change_from_baseline
##  Min.   :-73.00                         
##  1st Qu.:-39.50                         
##  Median :-35.00                         
##  Mean   :-34.03                         
##  3rd Qu.:-23.50                         
##  Max.   :-14.00                         
##  residential_percent_change_from_baseline
##  Min.   : 7.00                           
##  1st Qu.:11.50                           
##  Median :14.00                           
##  Mean   :13.61                           
##  3rd Qu.:16.00                           
##  Max.   :22.00

Membuat Matriks dengan Fungsi pairs()

Untuk membuat matriks scatterplot kita perlu memasukkan objek datacoviddirawat kedalam fungsi pairs(). Berikut adalah sintaks yang digunakan dan output yang dihasilkan

pairs(datacoviddirawat)

Kita dapat melakukan drop terhadap panel bawah grafik tersebut, yaitu dengan memasukkan argumen lower.panel=NULL.

pairs(datacoviddirawat, lower.panel=NULL)

Visualisasi Data Menggunakan Fungsi plot()

Fungsi plot() yaitu fungsi umum yang digunakan untuk membuat plot pada R.

plot(datacoviddirawat$Dirawat ~ datacoviddirawat$Tanggal, data = datacoviddirawat)

Memvisualisasikan Data dengan Self Isolation sebagai variabel Y dan Google Mobility Index sebagai variabel X

plot(datacoviddirawat$Dirawat ~ datacoviddirawat$
              retail_and_recreation_percent_change_from_baseline+datacoviddirawat$
      grocery_and_pharmacy_percent_change_from_baseline+datacoviddirawat$
      parks_percent_change_from_baseline+datacoviddirawat$
      transit_stations_percent_change_from_baseline+datacoviddirawat$
      workplaces_percent_change_from_baseline+datacoviddirawat$
      residential_percent_change_from_baseline, data = datacoviddirawat)

Membuat Hubungan Antar Variabel

Korelasi atau Hubungan antar variabel. Untuk mengukur seberapa jauh hubungan antara satu variabel dengan variabel yang lain kita dapat menggunakan fungsi cor().

a. Hubungan variabel y dengan x1

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      retail_and_recreation_percent_change_from_baseline)
## [1] -0.5926327

b. Hubungan variabel y dengan x2

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      grocery_and_pharmacy_percent_change_from_baseline)
## [1] -0.1123763

c. Hubungan variabel y dengan x3

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      parks_percent_change_from_baseline)
## [1] -0.4639921

d. Hubungan variabel y dengan x4

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      transit_stations_percent_change_from_baseline)
## [1] -0.4421714

e. Hubungan variabel y dengan x5

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      workplaces_percent_change_from_baseline)
## [1] -0.1216177

f. Hubungan variabel y dengan x6

cor(datacoviddirawat$Dirawat,datacoviddirawat$
      residential_percent_change_from_baseline)
## [1] 0.2851904

Dari hasil seluruh output tersebut, dapat kita simpulkan bahwa untuk tingkat hubungan 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 hubungan antara variabel y dan x6 tidak sangat terhubung karena nilai yang dihasilkan di bawah 0,4.

Melakukan Permodelan

Berikut cara melakukan permodelan regresi linier berganda.

model <- lm(datacoviddirawat$Dirawat ~ datacoviddirawat$Tanggal, data = datacoviddirawat)

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 = datacoviddirawat$Dirawat ~ datacoviddirawat$Tanggal, 
##     data = datacoviddirawat)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -977.8 -474.1  162.3  247.9 1850.9 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)               1.725e+06  2.455e+05   7.025 1.00e-07 ***
## datacoviddirawat$Tanggal -1.057e-03  1.507e-04  -7.012 1.04e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 648.4 on 29 degrees of freedom
## Multiple R-squared:  0.629,  Adjusted R-squared:  0.6162 
## F-statistic: 49.17 on 1 and 29 DF,  p-value: 1.036e-07

Menjelaskan rincian Model dengan fungsi summary()

Di atas merupakan rincian dari model yang telah dibuat.

Di posisi paling atas terdapat lm formula adalah datacoviddirawat\(Dirawat ~ datacoviddirawat\)Tanggal, data = datacoviddirawat.

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 = -977.8

Nilai maximum = 1079.7

Nilai median = 162.3

Nilai quartil 1 = -474.1

Nilai quartil 3 = 1850.9

Dari nilai-nilai tersebut dapat dilihat 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 dan benar karena nilai-nilai yang dihasilkan tidak mendekati nol.

Di bawah nilai residual terdapat koefisien, 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 dari variabel): 0.629. Hal ini menunjukkan bahwa 0.00629% 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.6162

Adjusted R-squared lebih baik jika ada penambahan variabel. Jadi saat kita menambahkan lebih dari satu variabel kedalam model, itu hanya meningkat jika itu mengurangi kesalahan prediksi secara keseluruhan.

Menggunakan Fungsi anova()

ANOVA (analysis of variance) adalah pengujian yang dilakukan dengan cara membandingkan varians. Dengan membandingkan varians tersebut, dapat diketahui ada atau 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. Y Aktual adalah Y sesungguhnya. Sedangkan Y prediksi adalah Y hasil persamaan ANOVA.

anova(model)
## Analysis of Variance Table
## 
## Response: datacoviddirawat$Dirawat
##                          Df   Sum Sq  Mean Sq F value    Pr(>F)    
## datacoviddirawat$Tanggal  1 20669407 20669407   49.17 1.036e-07 ***
## Residuals                29 12190535   420363                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Membuat plot() Model dari Data Real dan Data Prediksi

plot(datacoviddirawat$Dirawat ~ datacoviddirawat$
              Tanggal, 
     data = datacoviddirawat, col = "green", pch = 20, cex = 1.5, 
     main = "Data Covid Self Isolation di DKI Jakarta dan Google Mobility Index")
abline(model) #Add a regression line

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 = "green") #Plot the Cooks Distances.

plot(model)

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] 493.3219
BIC(model)
## [1] 497.6238

Memunculkan Nilai Predicted dan Memvisualisasikannya

head(predict(model), n = 11)
##        1        2        3        4        5        6        7        8 
## 4634.107 4542.814 4451.521 4360.227 4268.934 4177.641 4086.348 3995.055 
##        9       10       11 
## 3903.762 3812.469 3721.175
plot(head(predict(model), n = 10))

Memunculkan Nilai Residuals

head(resid(model), n = 11)
##         1         2         3         4         5         6         7         8 
## 1850.8931 1234.1863  847.4794  555.7726  150.0657 -203.6411 -867.3480 -920.0548 
##         9        10        11 
## -977.7617 -788.4685 -493.1754
coef(model)
##              (Intercept) datacoviddirawat$Tanggal 
##             1.724597e+06            -1.056634e-03

Membuat Tabel Untuk Menambah Data Residuals dan Data Predicted

Tabel dberikut merupakan semua proses yang telah dilakukan, sehingga tabel yang ada nilai residuals dan nilai protected.

datacoviddirawat$residuals <- model$residuals
datacoviddirawat$predicted <- model$fitted.values
datacoviddirawat
## # A tibble: 31 x 10
##    Tanggal             Dirawat retail_and_recreation_percent_c~ grocery_and_pha~
##    <dttm>                <dbl>                            <dbl>            <dbl>
##  1 2021-08-01 00:00:00    6485                              -42               -5
##  2 2021-08-02 00:00:00    5777                              -32                2
##  3 2021-08-03 00:00:00    5299                              -34               -1
##  4 2021-08-04 00:00:00    4916                              -34               -2
##  5 2021-08-05 00:00:00    4419                              -37               -6
##  6 2021-08-06 00:00:00    3974                              -31                2
##  7 2021-08-07 00:00:00    3219                              -36                2
##  8 2021-08-08 00:00:00    3075                              -39               -5
##  9 2021-08-09 00:00:00    2926                              -32               -2
## 10 2021-08-10 00:00:00    3024                              -35               -6
## # ... 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>

Visualisasi Data Menggunakan scatter.smooth, boxplot dan plot

scatter.smooth(x=datacoviddirawat$Tanggal, y=datacoviddirawat$Dirawat, 
               main="Tanggal ~ Dirawat")

boxplot(datacoviddirawat$Dirawat, main="Dirawat", 
        boxplot.stats(datacoviddirawat$Dirawat)$out)

plot(density(datacoviddirawat$Dirawat), main="Google Mobility Index: Dirawat", 
     ylab="Frequency")

coefs <- coef(model)
plot(Dirawat ~ Tanggal, data = datacoviddirawat)
abline(coefs)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2),  '+', 
                           round(coefs[2], 2), '*Dirawat'))

Melakukan Uji Korelasi Antar Variabel

Adanya hubungan 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 bisa dilakukan dengan menggunakan fungsi cor.test(). Format fungsi tersebut adalah sebagai berikut:

a. Uji korelasi variabel y dengan x1

cor.test(datacoviddirawat$
 retail_and_recreation_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$retail_and_recreation_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = -3.9622, df = 29, p-value = 0.0004433
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.7826263 -0.3016337
## sample estimates:
##        cor 
## -0.5926327

b. Uji korelasi variabel y dengan x2

cor.test(datacoviddirawat$
 grocery_and_pharmacy_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$grocery_and_pharmacy_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = -0.60902, df = 29, p-value = 0.5473
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4488437  0.2519982
## sample estimates:
##        cor 
## -0.1123763

c. Uji korelasi variabel y dengan x3

cor.test(datacoviddirawat$
 parks_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$parks_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = -2.8207, df = 29, p-value = 0.008557
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.7027864 -0.1312271
## sample estimates:
##        cor 
## -0.4639921

d. Uji korelasi variabel y dengan x4

cor.test(datacoviddirawat$
 transit_stations_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$transit_stations_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = -2.6548, df = 29, p-value = 0.01275
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.6886193 -0.1041492
## sample estimates:
##        cor 
## -0.4421714

e. Uji korelasi variabel y dengan x5

cor.test(datacoviddirawat$
 workplaces_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$workplaces_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = -0.65983, df = 29, p-value = 0.5146
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4562943  0.2432030
## sample estimates:
##        cor 
## -0.1216177

f. Uji korelasi variabel y dengan x6

cor.test(datacoviddirawat$
 residential_percent_change_from_baseline, 
         datacoviddirawat$Dirawat)
## 
##  Pearson's product-moment correlation
## 
## data:  datacoviddirawat$residential_percent_change_from_baseline and datacoviddirawat$Dirawat
## t = 1.6023, df = 29, p-value = 0.1199
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.07692312  0.58083464
## sample estimates:
##       cor 
## 0.2851904

Dari 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.

Referensi

https://rpubs.com/suhartono-uinmaliki/877449