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

UIN Maulana Malik Ibrahim Malang - Teknik Informatika

Membangun Regresi Linear Berganda

Regresi linear ganda adalah model regresi linear dengan melibatkan lebih dari satu variabel bebas atau predictor. Dalam bahasa inggris, istilah ini disebut dengan multiple linear regression.

Data Covid dan Google Mobility Indeks

Data ini diambil dan disimpan pada suatu platform yang bernama excel. Platform ini umumnya digunakan untuk menyimpan data. Dalam RStudio ini jika ingin memanggil data dari file excel menggunakan peckage readxl dengan fungsi read_excel(). Juga menggunakan argumen path = untuk meletakkan nama file excel yang akan ditampilkan.

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
datacovidagustus<- read_excel(path = "DataMobility.xlsx")
datacovidagustus
## # A tibble: 31 x 13
##    Nama_provinsi Tanggal             POSITIF Dirawat Sembuh Meninggal
##    <chr>         <dttm>                <dbl>   <dbl>  <dbl>     <dbl>
##  1 DKI Jakarta   2021-08-01 00:00:00  817354    6485 789261     12209
##  2 DKI Jakarta   2021-08-02 00:00:00  818764    5777 791422     12363
##  3 DKI Jakarta   2021-08-03 00:00:00  820365    5299 793928     12433
##  4 DKI Jakarta   2021-08-04 00:00:00  823346    4916 796381     12514
##  5 DKI Jakarta   2021-08-05 00:00:00  825657    4419 799151     12629
##  6 DKI Jakarta   2021-08-06 00:00:00  827842    3974 802373     12682
##  7 DKI Jakarta   2021-08-07 00:00:00  829850    3219 806924     12750
##  8 DKI Jakarta   2021-08-08 00:00:00  831499    3075 808087     12770
##  9 DKI Jakarta   2021-08-09 00:00:00  832226    2926 809087     12783
## 10 DKI Jakarta   2021-08-10 00:00:00  833651    3024 810308     12824
## # ... with 21 more rows, and 7 more variables: Self _isolation <dbl>,
## #   retail_and_recreation_percent_change_from_baseline <dbl>,
## #   grocery_and_pharmacy_percent_change_from_baseline <dbl>,
## #   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>

Data Covid Sembuh dan Google Mobility Indeks

Data yang akan ditampilkan dibawah ini adalah Data Covid bagian sembuh saja dan Data Mobility Index.

datacovidagustus<- read_excel(path = "DataMobilitySembuh.xlsx")
datacovidagustus
## # A tibble: 31 x 8
##    Tanggal             Sembuh retail_and_recr~ grocery_and_pha~ parks_percent_c~
##    <dttm>               <dbl>            <dbl>            <dbl>            <dbl>
##  1 2021-08-01 00:00:00 789261              -42               -5              -67
##  2 2021-08-02 00:00:00 791422              -32                2              -51
##  3 2021-08-03 00:00:00 793928              -34               -1              -53
##  4 2021-08-04 00:00:00 796381              -34               -2              -52
##  5 2021-08-05 00:00:00 799151              -37               -6              -55
##  6 2021-08-06 00:00:00 802373              -31                2              -45
##  7 2021-08-07 00:00:00 806924              -36                2              -56
##  8 2021-08-08 00:00:00 808087              -39               -5              -63
##  9 2021-08-09 00:00:00 809087              -32               -2              -50
## 10 2021-08-10 00:00:00 810308              -35               -6              -55
## # ... with 21 more rows, and 3 more variables:
## #   transit_stations_percent_change_from_baseline <dbl>,
## #   workplaces_percent_change_from_baseline <dbl>,
## #   residential_percent_change_from_baseline <dbl>

Mengetahui Fungsi Summary() yang ada pada Data

summary() atau yang juga disebut dengan ringkasan data digunakan untuk mencari nilai statistik lima serangkai yaitu ada minimum, Q1, Q2 atau median, Q3, dan maksimum.

summary(datacovidagustus)
##     Tanggal                        Sembuh      
##  Min.   :2021-08-01 00:00:00   Min.   :789261  
##  1st Qu.:2021-08-08 12:00:00   1st Qu.:808587  
##  Median :2021-08-16 00:00:00   Median :818700  
##  Mean   :2021-08-16 00:00:00   Mean   :815525  
##  3rd Qu.:2021-08-23 12:00:00   3rd Qu.:825266  
##  Max.   :2021-08-31 00:00:00   Max.   :830197  
##  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 hanya perlu memasukkan objek yang kita punya yaitu datacovidagustus kedalam fungsi pairs(). Berikut adalah sintaks yang digunakan dan output yang dihasilkan.

pairs(datacovidagustus)

Dapat juga dilakukan drop terhadap panel bawah grafik tersebut dengan menggunakan argumen lower.panel=NULL.

pairs(datacovidagustus, lower.panel=NULL)

Visualisasi Data Menggunakan Fungsi Plot()

Fungsi plot() ini merupakan fungsi yang umum digunakan untuk membuat grafik pada RStudio.

plot(datacovidagustus$Sembuh ~ datacovidagustus$Tanggal, data = datacovidagustus)

Memvisualisasikan Data covid Sembuh sebagai Variabel y dan Data Google Mobility Index sebagai Variabel x.
plot(datacovidagustus$Sembuh ~ datacovidagustus$
              retail_and_recreation_percent_change_from_baseline+datacovidagustus$
      grocery_and_pharmacy_percent_change_from_baseline+datacovidagustus$
      parks_percent_change_from_baseline+datacovidagustus$
      transit_stations_percent_change_from_baseline+datacovidagustus$
      workplaces_percent_change_from_baseline+datacovidagustus$
      residential_percent_change_from_baseline, data = datacovidagustus)

Membuat Korelasi Antar Variabel

Korelasi itu adalah hubungan antar variabel. Untuk mengukur sejauh apa hubungan antara satu variabel dengan variabel lain dapat menggunakan fungsi cor().

a. Korelasi Variabel y dengan x1

cor(datacovidagustus$Sembuh,datacovidagustus$
      retail_and_recreation_percent_change_from_baseline)
## [1] 0.700978

b. Korelasi Variabel y dengan x2

cor(datacovidagustus$Sembuh,datacovidagustus$
      grocery_and_pharmacy_percent_change_from_baseline)
## [1] 0.120881

c. Korelasi Variabel y dengan x3

cor(datacovidagustus$Sembuh,datacovidagustus$
      parks_percent_change_from_baseline)
## [1] 0.5065025

d. Korelasi Variabel y dengan x4

cor(datacovidagustus$Sembuh,datacovidagustus$
      transit_stations_percent_change_from_baseline)
## [1] 0.5423694

e. Korelasi Variabel y dengan x5

cor(datacovidagustus$Sembuh,datacovidagustus$
      workplaces_percent_change_from_baseline)
## [1] 0.1913632

f. Korelasi Variabel y dengan x6

cor(datacovidagustus$Sembuh,datacovidagustus$
      residential_percent_change_from_baseline)
## [1] -0.3662697

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.

Melakukan Permodelan

Beberapa cara permodelan regresi linear ganda

model <- lm(datacovidagustus$Sembuh ~ datacovidagustus$Tanggal, data = datacovidagustus)

Selanjutnya dengan syntax model yang telah dibuat di atas, kita akan menggunakan fungsi summary() untuk menjelaskan atau mereview hasil dari model tersebut. Dan dengan ringkasan fungsi summary(model) dapat terlihat informasi terperinci tentang kinerja dan koefisian model.

summary(model)
## 
## Call:
## lm(formula = datacovidagustus$Sembuh ~ datacovidagustus$Tanggal, 
##     data = datacovidagustus)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -7052  -2528   1017   2668   3785 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)              -2.333e+07  1.245e+06  -18.74   <2e-16 ***
## datacovidagustus$Tanggal  1.482e-02  7.643e-04   19.40   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3288 on 29 degrees of freedom
## Multiple R-squared:  0.9284, Adjusted R-squared:  0.926 
## F-statistic: 376.2 on 1 and 29 DF,  p-value: < 2.2e-16

Menjelaskan Rincian Model dengan Fungsi Summary()

Residual adalah perbedaan antara nilai nyata dan nilai prediksi. Dimana semakin kecil nilai residual maka semakin baik model yang dibuat. Dari model di atas, didapatkan 5 nilai residual, yaitu sebagai berikut :

  • Nilai Minimum = -7052

  • Nilai Maximum = 3785

  • Nilai Median = 1017

  • Nilai Quartil 1 = -2528

  • Nilai Quartil 3 = 2668

Dari nilai-nilai di atas dapat dilihat bahwa dalam konteks ini berupa nilai minimum, maximum, median, quartil 1 dan quartil 3. Dapat disimpulkan bahwa model yang telah dibuat belum bisa dikatakan baik karena nilai-nilai yang dihasilkan tidak mendekati nol.

Selanjutnya terdapat dua R2 yaitu :

  • Multiple R-squared (pelipatan daripada variabel) : 0.9284. Hal ini menunjukkan bahwa 0.008739% variasi variabel respon, y, dapat dijelaskan oleh variabel prediktor, x.

    Multiple R-squared tidak dapat berkurang saat ditambahkan lebih banyak variabel independen ke model yang dibuat.

  • Adjusted R-squared (tidak pelipatan pada variabel) : 0.926.

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

Menggunakan Fungsi Anova()

Anova atau Analysis of Variance adalah pengujian yang dilakukan dengan pembandingan pada varians. Dengan pembandingan varians ini dilakukan, dapat diketahui ada tidaknya perbedaan rata-rata dari tiga atau lebih kelompok. Asumsi normalitas Anova ini ada pada residual, dan residual dapat dihitung dengan Y aktual - Y predikdi. Y aktual adalah nilai y yang sesungguhnya, sedangkan Y prediksi adalah nilai y hasil persamaan Anova.

anova(model)
## Analysis of Variance Table
## 
## Response: datacovidagustus$Sembuh
##                          Df     Sum Sq    Mean Sq F value    Pr(>F)    
## datacovidagustus$Tanggal  1 4068161494 4068161494  376.21 < 2.2e-16 ***
## Residuals                29  313589326   10813425                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Membuat Grafik Model dari Data Real dan Data Prediksi

plot(datacovidagustus$Sembuh ~ datacovidagustus$
              Tanggal, 
     data = datacovidagustus, col = "maroon", pch = 20, cex = 1.5, 
     main = "Data Covid Sembuh di Daerah DKI Jakarta dan Google Mobility Index")
abline(model) #Add a regression line

Dari Grafik di atas dapat dilihat titik-titik maroon yang menjadi sebuah garis tersebut, itu memperlihatkan data real atau nyata. Sedangkan garis hitam yang lurus di dalam kotak tersebut adalah data prediksinya.

plot(cooks.distance(model), pch = 16, col = "maroon") #Plot the Cooks Distances.

plot(model)

Penggunaan AIC dan BIC

AIC dan BIC ini banyak digunakan dalam kriteria pemilihan model. AIC itu berarti Kriteria Informasi Akaike, dan BIC itu berarti Kriteria Informasi Bayesian. Kedua kriteria ini membahas mengenai model, namun keduanya ini tidaklah sama, masih ada perbedaan pada masing-masing kriteria ini walaupun mereka berdua hampir serupa.

Kriteria AIC
AIC(model)
## [1] 593.992
Kriteria BIC
BIC(model)
## [1] 598.294

Memprediksi Data dan Visualisasi Nilai Prediksinya

Nilai dari Prediksi Data
head(predict(model), n = 11)
##        1        2        3        4        5        6        7        8 
## 796313.4 797594.2 798875.0 800155.7 801436.5 802717.3 803998.1 805278.9 
##        9       10       11 
## 806559.6 807840.4 809121.2
Visualisasi dari Nilai Prediksi
plot(head(predict(model), n = 10))

Memunculkan Nilai-nilai Residual

head(resid(model), n = 11)
##          1          2          3          4          5          6          7 
## -7052.4214 -6172.1976 -4946.9738 -3774.7500 -2285.5262  -344.3024  2925.9214 
##          8          9         10         11 
##  2808.1452  2527.3690  2467.5927  2520.8165
coef(model)
##              (Intercept) datacovidagustus$Tanggal 
##            -2.333351e+07             1.482380e-02

Tabel dengan Penambahan Data Residual dan Data Predicted

datacovidagustus$residuals <- model$residuals
datacovidagustus$predicted <- model$fitted.values
datacovidagustus
## # A tibble: 31 x 10
##    Tanggal             Sembuh retail_and_recr~ grocery_and_pha~ parks_percent_c~
##    <dttm>               <dbl>            <dbl>            <dbl>            <dbl>
##  1 2021-08-01 00:00:00 789261              -42               -5              -67
##  2 2021-08-02 00:00:00 791422              -32                2              -51
##  3 2021-08-03 00:00:00 793928              -34               -1              -53
##  4 2021-08-04 00:00:00 796381              -34               -2              -52
##  5 2021-08-05 00:00:00 799151              -37               -6              -55
##  6 2021-08-06 00:00:00 802373              -31                2              -45
##  7 2021-08-07 00:00:00 806924              -36                2              -56
##  8 2021-08-08 00:00:00 808087              -39               -5              -63
##  9 2021-08-09 00:00:00 809087              -32               -2              -50
## 10 2021-08-10 00:00:00 810308              -35               -6              -55
## # ... with 21 more rows, and 5 more variables:
## #   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 Covid Sembuh dengan Fungsi scatter.smooth, boxplot, dan plot.

Dengan Fungsi scatter.smooth
scatter.smooth(x=datacovidagustus$Tanggal, y=datacovidagustus$Sembuh, 
               main="Tanggal ~ Sembuh")

Dengan Fungsi boxplot
boxplot(datacovidagustus$Sembuh, main="Sembuh", 
        boxplot.stats(datacovidagustus$Sembuh)$out)

Dengan Fungsi plot
plot(density(datacovidagustus$Sembuh), main="Google Mobility Index : Sembuh", 
     ylab="Frequency")

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

Melakukan Uji Korelasi antar Variabel

Korelasi dapat dilakukan dengan menggunakan scatterplot dan rumus matematis. Pada RStudio ini, korelasi dapat dilakukan dengan menggunakan fungsi cor.test(). Seperti pada sintax di bawah ini :

a. Uji Korelasi antara Variabel y dengan x1

cor.test(datacovidagustus$
 retail_and_recreation_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$retail_and_recreation_percent_change_from_baseline and datacovidagustus$Sembuh
## t = 5.293, df = 29, p-value = 1.124e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.4611906 0.8453469
## sample estimates:
##      cor 
## 0.700978

b. Uji Korelasi antara Variabel y dengan x2

cor.test(datacovidagustus$
 grocery_and_pharmacy_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$grocery_and_pharmacy_percent_change_from_baseline and datacovidagustus$Sembuh
## t = 0.65577, df = 29, p-value = 0.5171
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.2439064  0.4557020
## sample estimates:
##      cor 
## 0.120881

c. Uji Korelasi antara Variabel y dengan x3

cor.test(datacovidagustus$
 parks_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$parks_percent_change_from_baseline and datacovidagustus$Sembuh
## t = 3.1634, df = 29, p-value = 0.003643
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.1854450 0.7298529
## sample estimates:
##       cor 
## 0.5065025

d. Uji Korelasi antara Variabel y dengan x4

cor.test(datacovidagustus$
 transit_stations_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$transit_stations_percent_change_from_baseline and datacovidagustus$Sembuh
## t = 3.4765, df = 29, p-value = 0.001621
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2327622 0.7521574
## sample estimates:
##       cor 
## 0.5423694

e. Uji Korelasi antara Variabel y dengan x5

cor.test(datacovidagustus$
 workplaces_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$workplaces_percent_change_from_baseline and datacovidagustus$Sembuh
## t = 1.0499, df = 29, p-value = 0.3024
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.1748319  0.5110502
## sample estimates:
##       cor 
## 0.1913632

f. Uji Korelasi antara Variabel y dengan x6

cor.test(datacovidagustus$
 residential_percent_change_from_baseline, 
         datacovidagustus$Sembuh)
## 
##  Pearson's product-moment correlation
## 
## data:  datacovidagustus$residential_percent_change_from_baseline and datacovidagustus$Sembuh
## t = -2.1197, df = 29, p-value = 0.04271
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.63782969 -0.01370874
## sample estimates:
##        cor 
## -0.3662697

Metode Pearson ini menghasilkan beberapa output, yaitu berupa nilai t uji, derajat kebebasan, nilai p-value, rentang estimasi nilai korelasi berdasarkan tingkat kepercayaan, dan estimasi nilai korelasi.


Referensi