Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang

Jurusan : Teknik Informatika

Regresi Linear Berganda

Pengertian Regresi Linear

Regresi linier merupakan metode yang digunakan dalam memperoleh hubungan antara 1 variable dependen dengan 1 atau lebih variabel independen. Apabila variable idependen yang digunakan hanya satu maka disebut regresi linear sederhana sedangkan apabila lebih dari satu maka disebut regresi linear berganda. Berikut contoh regresi linear berganda pada data positif Covid-19 & Google Mobility Index pada bulan Juni 2020.

Data Google Mobility Index di Jakarta pada Bulan Juni 2020

## # A tibble: 30 x 15
##    country_region_code country_region sub_region_1 sub_region_2 metro_area
##    <chr>               <chr>          <chr>        <lgl>        <lgl>     
##  1 ID                  Indonesia      Jakarta      NA           NA        
##  2 ID                  Indonesia      Jakarta      NA           NA        
##  3 ID                  Indonesia      Jakarta      NA           NA        
##  4 ID                  Indonesia      Jakarta      NA           NA        
##  5 ID                  Indonesia      Jakarta      NA           NA        
##  6 ID                  Indonesia      Jakarta      NA           NA        
##  7 ID                  Indonesia      Jakarta      NA           NA        
##  8 ID                  Indonesia      Jakarta      NA           NA        
##  9 ID                  Indonesia      Jakarta      NA           NA        
## 10 ID                  Indonesia      Jakarta      NA           NA        
## # ... with 20 more rows, and 10 more variables: iso_3166_2_code <chr>,
## #   census_fips_code <lgl>, place_id <lgl>, date <dttm>,
## #   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>, ...

library(ggplot2)
library(reshape2)
x <- data$date
retail <- data$retail_and_recreation_percent_change_from_baseline
grocery <- data$grocery_and_pharmacy_percent_change_from_baseline
park <- data$parks_percent_change_from_baseline
station <- data$transit_stations_percent_change_from_baseline
workplace <- data$workplaces_percent_change_from_baseline
residental <- data$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 Juni 2020", 
         y = "Mobility", x = "Tanggal") +
theme(axis.text.x = element_text(angle = -90))

Melakukan Permodelan

model <- lm(data$date~data$retail_and_recreation_percent_change_from_baseline+data$grocery_and_pharmacy_percent_change_from_baseline+data$parks_percent_change_from_baseline+data$transit_stations_percent_change_from_baseline+data$workplaces_percent_change_from_baseline+data$residential_percent_change_from_baseline)
model
## 
## Call:
## lm(formula = data$date ~ data$retail_and_recreation_percent_change_from_baseline + 
##     data$grocery_and_pharmacy_percent_change_from_baseline + 
##     data$parks_percent_change_from_baseline + data$transit_stations_percent_change_from_baseline + 
##     data$workplaces_percent_change_from_baseline + data$residential_percent_change_from_baseline)
## 
## Coefficients:
##                                             (Intercept)  
##                                              1603601318  
## data$retail_and_recreation_percent_change_from_baseline  
##                                                   20929  
##  data$grocery_and_pharmacy_percent_change_from_baseline  
##                                                  -20562  
##                 data$parks_percent_change_from_baseline  
##                                                   88997  
##      data$transit_stations_percent_change_from_baseline  
##                                                   51461  
##            data$workplaces_percent_change_from_baseline  
##                                                  -22770  
##           data$residential_percent_change_from_baseline  
##                                                  -80210
1. Uji Asumsi Klasik

A. Uji Normalitas

Uji normalitas dalam contoh regresi dipakai untuk menguji apakah nilai residual yang didapatkan menurut regresi terdistribusi secara normal atau tidak. Model regresi yang baik mempunyai nilai residual yang terdistribusi secara normal. Pada contoh berikut akan dilakukakan uji normalitas menggunakan metode One-sample Kolmogorov-Smirnov

ks.test(model$residuals, ecdf(model$residuals))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  model$residuals
## D = 0.033333, p-value = 1
## alternative hypothesis: two-sided

Berdasarkan dasar teori atau syarat dari uji normalitas adalah jika nilai p-value > 0.05 maka data berdistribusi normal. Namun apabila sebaliknya maka data tidak berdstribusi normal. Sehingga dapat disimpulkan bahwa model regresi diatas berdistribusi normal dikarenakan nilai p-value sama dengan 1 dimana > 0.05.

B. Uji Multikolinearitas

Uji multikolinearitas merupakan pengujian untuk memastikan apakah pada sebuah model regresi terdapat interkorelasi atau kolinearitas antar variabel bebas. Interkorelasi merupakan hubungan yang linear antara satu variabel bebas atau variabel prediktor dengan variabel prediktor lainnya di dalam sebuah model regresi. Interkorelasi itu dapat dilihat dengan nilai koefisien korelasi antara variabel bebas, nilai VIF dan Tolerance, nilai Eigenvalue dan Condition Index, serta nilai standar error koefisien beta atau koefisien regresi parsial. Pada contoh berikut akan dilakukakan uji multikolinearitas dengan menggunakan tolerance dimana pada bahasa program R kita membutuhkan package olsrr.

library(olsrr)
ols_vif_tol(model)
##                                                 Variables  Tolerance       VIF
## 1 data$retail_and_recreation_percent_change_from_baseline 0.04324891 23.121969
## 2  data$grocery_and_pharmacy_percent_change_from_baseline 0.32531317  3.073961
## 3                 data$parks_percent_change_from_baseline 0.17749383  5.633999
## 4      data$transit_stations_percent_change_from_baseline 0.02014048 49.651258
## 5            data$workplaces_percent_change_from_baseline 0.08232238 12.147364
## 6           data$residential_percent_change_from_baseline 0.03540320 28.246033

Berdasarkan dasar teori uji multikolinearitas jika nilai tolerance > 0.1 dan nilai VIF < 10 maka tidak terjadi gejala multikolinearitas. Sehingga dapat disimpulkan pada regresi diatas tidak terjadi gejala multikolinearitas dikarenakan dari semua variabel independent memiliki nilai tolerance > 0.1 dan nilai VIF < 10.

2. Impretasi Hasil Regresi Berganda

Dalam menampilkan hasil regresi kita dapat menggunakan fungsi summary.

summary(data)
##  country_region_code country_region     sub_region_1       sub_region_2  
##  Length:30           Length:30          Length:30          Mode:logical  
##  Class :character    Class :character   Class :character   NA's:30       
##  Mode  :character    Mode  :character   Mode  :character                 
##                                                                          
##                                                                          
##                                                                          
##  metro_area     iso_3166_2_code    census_fips_code place_id      
##  Mode:logical   Length:30          Mode:logical     Mode:logical  
##  NA's:30        Class :character   NA's:30          NA's:30       
##                 Mode  :character                                  
##                                                                   
##                                                                   
##                                                                   
##       date                    
##  Min.   :2020-06-01 00:00:00  
##  1st Qu.:2020-06-08 06:00:00  
##  Median :2020-06-15 12:00:00  
##  Mean   :2020-06-15 12:00:00  
##  3rd Qu.:2020-06-22 18:00:00  
##  Max.   :2020-06-30 00:00:00  
##  retail_and_recreation_percent_change_from_baseline
##  Min.   :-52.00                                    
##  1st Qu.:-44.00                                    
##  Median :-38.00                                    
##  Mean   :-38.63                                    
##  3rd Qu.:-33.00                                    
##  Max.   :-27.00                                    
##  grocery_and_pharmacy_percent_change_from_baseline
##  Min.   :-18.00                                   
##  1st Qu.:-15.00                                   
##  Median :-13.00                                   
##  Mean   :-12.97                                   
##  3rd Qu.:-12.25                                   
##  Max.   : -3.00                                   
##  parks_percent_change_from_baseline
##  Min.   :-91.00                    
##  1st Qu.:-88.75                    
##  Median :-85.50                    
##  Mean   :-86.03                    
##  3rd Qu.:-84.00                    
##  Max.   :-77.00                    
##  transit_stations_percent_change_from_baseline
##  Min.   :-69.00                               
##  1st Qu.:-54.00                               
##  Median :-49.50                               
##  Mean   :-50.97                               
##  3rd Qu.:-47.00                               
##  Max.   :-40.00                               
##  workplaces_percent_change_from_baseline
##  Min.   :-68.00                         
##  1st Qu.:-35.75                         
##  Median :-34.00                         
##  Mean   :-32.47                         
##  3rd Qu.:-28.25                         
##  Max.   :-15.00                         
##  residential_percent_change_from_baseline
##  Min.   :10.00                           
##  1st Qu.:14.00                           
##  Median :16.00                           
##  Mean   :16.17                           
##  3rd Qu.:18.00                           
##  Max.   :27.00
    • Nilai Minimum adalah -52.00

    • Nilai Quartal ke-1 adalah -44.00

    • Nilai Tengah adalah -38.00

    • Nilai Rata-Rata : -38.63

    • Nilai Quartal ke-3 adalah -33.63

    • Nilai Maksimum adalah -27.00

    • Dasar teori yang digunakan dalam interpretasi hasilregre adalah apabila nilai signifikansi (Pr(>|t|)) < 0.05 maka variabel independent (variabel x) secara parsial berpengaruh terhadap variable dependent (variable y). Sehingga dapat disimpulkan :

      1. Variable retail_and_recreation_percent_change_from_baseline signifikan berpengaruh terhadap variable positif.

      2. Variable grocery_and_pharmacy_percent_change_from_baseline tidak signifikan berpengaruh terhadap variable positif.

      3. Variable parks_percent_change_from_baseline signifikan berpengaruh terhadap variable positif.

      4. Variable transit_stations_percent_change_from_baselineidak signifikan berpengaruh terhadap variable positif.

      5. Variable workplaces_percent_change_from_baseline signifikan berpengaruh terhadap variable positif.

      6. Variable residential_percent_change_from_baseline signifikan berpengaruh terhadap variable positif.

    • Selain itu kita dapat disimpulkan apakah seluruh variable independent berpengaruh secara simultan terhadap variable dependent dimana dasar dari penentuan tersebut yaitu apabila nilai p-value dari F-statistic < 0.05 maka keseluruahan variable independent signifikan berpengaruh secara simultan (bersama-sama) terhadap variable dependent (variable positif). Besar pengaruh tersebut dapat dilihat dari nilai R-squared. Sehingga dapat disimpulkan variable independent signifikan berpengaruh terhadap variable dependent.

3. Plot Hasil Regresi Berganda

A. Plot terhadap Variable Date

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

4. Korelasi Antar Variabel

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

  1. Korelasi Variabel y (Google Mobility Index) dengan x1(Google Mobility Index)

cor(data$retail_and_recreation_percent_change_from_baseline, data$grocery_and_pharmacy_percent_change_from_baseline)
## [1] 0.7709306
  1. Korelasi Variabel y (Google Mobility Index) dengan x2(Google Mobility Index)

cor(data$retail_and_recreation_percent_change_from_baseline, data$parks_percent_change_from_baseline)
## [1] 0.8672826
  1. Korelasi Variabel y (Google Mobility Index) dengan x1(Google Mobility Index)

cor(data$retail_and_recreation_percent_change_from_baseline, data$transit_stations_percent_change_from_baseline)
## [1] 0.784045
  1. Korelasi Variabel y (Google Mobility Index) dengan x1(Google Mobility Index)

cor(data$retail_and_recreation_percent_change_from_baseline, data$workplaces_percent_change_from_baseline)
## [1] 0.1601265
  1. Korelasi Variabel y (Google Mobility Index) dengan x1(Google Mobility Index)

cor(data$retail_and_recreation_percent_change_from_baseline, data$residential_percent_change_from_baseline)
## [1] -0.4071437

5. Nilai Predicted dan Visualisasinya

head(predict(model), n = 15)
##          1          2          3          4          5          6          7 
## 1590726168 1591252546 1591163838 1591209872 1591312105 1591435574 1591235030 
##          8          9         10         11         12         13         14 
## 1591825080 1591708497 1591758485 1591949279 1592002626 1592090815 1591964870 
##         15 
## 1592539108
plot(head(predict(model), n = 20))

6. Nilai Residuals

head(resid(model), n = 11)
##                         1                         2                         3 
## "1970-01-03 19:37:12 UTC" "1969-12-29 17:24:14 UTC" "1969-12-31 18:02:42 UTC" 
##                         4                         5                         6 
## "1970-01-01 05:15:28 UTC" "1970-01-01 00:51:35 UTC" "1969-12-31 14:33:47 UTC" 
##                         7                         8                         9 
## "1970-01-03 22:16:09 UTC" "1969-12-29 02:22:00 UTC" "1969-12-31 10:45:04 UTC" 
##                        10                        11 
## "1969-12-31 20:51:55 UTC" "1969-12-30 15:52:02 UTC"
coef(model)
##                                             (Intercept) 
##                                           1603601317.87 
## data$retail_and_recreation_percent_change_from_baseline 
##                                                20929.38 
##  data$grocery_and_pharmacy_percent_change_from_baseline 
##                                               -20561.54 
##                 data$parks_percent_change_from_baseline 
##                                                88996.86 
##      data$transit_stations_percent_change_from_baseline 
##                                                51460.66 
##            data$workplaces_percent_change_from_baseline 
##                                               -22769.51 
##           data$residential_percent_change_from_baseline 
##                                               -80210.47

7. Visualisasi Data menggunakan Scatter.smooth, Boxplot, dan Plot

scatter.smooth(x=data$date, y=data$retail_and_recreation_percent_change_from_baseline+data$grocery_and_pharmacy_percent_change_from_baseline+data$parks_percent_change_from_baseline+data$transit_stations_percent_change_from_baseline+data$workplaces_percent_change_from_baseline+data$residential_percent_change_from_baseline, 
               main="Tanggal ~ Google Mobiliy")


plot(density(data$retail_and_recreation_percent_change_from_baseline+data$grocery_and_pharmacy_percent_change_from_baseline+data$parks_percent_change_from_baseline+data$transit_stations_percent_change_from_baseline+data$workplaces_percent_change_from_baseline+data$residential_percent_change_from_baseline), main="Google Mobility Index", 
     ylab="Frequency")

Referensi