ALgoritma Linear Regression dengan R

Devi Rifma Cahyani-Institut Teknologi Statistika dan Bisnis Muhammadiyah

2023-01-26

Algoritma Linear Regression

Regresi linear berganda merupakan model regresi yang melibatkan lebih dari satu variabel independen. Analisis regresi linear berganda dilakukan untuk mengetahui arah dan seberapa besar pengaruh variabel independen terhadap variabel dependen (Ghozali, 2018).

Tahapan Algoritma Linear Regression

Langkah-langkah yang lazim dipergunakan dalam analisis regresi linear berganda adalah 1) koefisien determinasi 2) Uji F dan 3 ) uji t. Persamaan regresi sebaiknya dilakukan di akhir analisis karena interpretasi terhadap persamaan regresi akan lebih akurat jika telah diketahui signifikansinya.

Eksperimen Algoritma Linear Regression

Model Linear Regression

Model dari Linear Regression adalah sebagai berikut :

y^=β0+β1x1

di mana :

y^ : nilai prediksi β0 : nilai intercept β1 : nilai koefisien regresi untuk x1 x1 : variabel prediktor Untuk memperjelas yang akan kita pelajari tentang linear regression, kita akan gunakan data cpu. Berdasarkan data cpu kita akan melakukan prediksi terhadap nilai performance pada cpu yang ada berdasarkan parameter-parameter atau variabel prediktor yang telah tersedia.

Menampilkan Data

library(readxl)
CPU <- read_excel("CPU.xlsx")
View(CPU)
str(CPU)
## tibble [199 × 7] (S3: tbl_df/tbl/data.frame)
##  $ MYCT       : num [1:199] 125 29 29 29 29 26 23 23 23 23 ...
##  $ MMIN       : num [1:199] 256 8000 8000 8000 8000 8000 16000 16000 16000 32000 ...
##  $ MMAX       : num [1:199] 6000 32000 32000 32000 16000 32000 32000 32000 64000 64000 ...
##  $ CACH       : num [1:199] 256 32 32 32 32 64 64 64 64 128 ...
##  $ CHMIN      : num [1:199] 16 8 8 8 8 8 16 16 16 32 ...
##  $ CHMAX      : num [1:199] 128 32 32 32 16 32 32 32 32 64 ...
##  $ PERFORMANCE: num [1:199] 198 269 220 172 132 ...

Membangun Model

dalam melakukan prediksi menggunakan linear regression, gunakan funcion lm() pada R.

model <- lm(PERFORMANCE~., CPU)
summary(model)
## 
## Call:
## lm(formula = PERFORMANCE ~ ., data = CPU)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -167.046  -19.859    3.834   21.522  306.234 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.397e+01  7.324e+00  -6.004 9.43e-09 ***
## MYCT         3.845e-02  1.537e-02   2.501   0.0132 *  
## MMIN         1.674e-02  1.597e-03  10.479  < 2e-16 ***
## MMAX         4.451e-03  5.725e-04   7.775 4.47e-13 ***
## CACH         6.025e-01  1.218e-01   4.947 1.64e-06 ***
## CHMIN        1.291e+00  7.639e-01   1.691   0.0925 .  
## CHMAX        9.060e-01  2.036e-01   4.451 1.45e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 52.03 on 192 degrees of freedom
## Multiple R-squared:  0.8774, Adjusted R-squared:  0.8736 
## F-statistic: 229.1 on 6 and 192 DF,  p-value: < 2.2e-16

Berdasarkan hasil analisis regresi yang kita lakukan diatas dengan menggunakan seluruh variabel prediktor, kita akan analisis satu persatu dari modelnya. Untuk melakukan analisis pada model regresi yang telah kita buat, kita perlu melihat apakah model yang kita buat mampu untuk mejelaskan target variabel yang kita miliki.

Uji Overall

Uji yang pertama kita lakukan disebut uji overall. Untuk hipotesis yang digunakan yaitu :

H0 : Model tidak signifikan (Model belum mampu menjelaskan target variabel) H1 : Model signifikan (Model mampu menjelaskan target variabel)

Dalam melakukan uji overall, kita melihat nilai F-statistic yang ditampilkan dalam model dan melihat p-value yang paling bawah. Karena nilai p-value < α yaitu <2.2e-16 < 0.05 sehingga kita memperoleh keputusan tolak H0 yang artinya model yang kita buat dapat menjelaskan target variabel yang kita miliki yaitu performance.

R-Squared

Selanjutnya kita akan melihat kebaikan dari model yang telah kita buat. Untuk melihat kebaikan model kita, kita bisa menggunakan nilai Multiple R-Squared (untuk univariat regression) dan Adjusted R-Squared (untuk multiple regression). Nilai Multiple dan Adjusted R-Squared berkisar dari 0 hingga 1. Semakin mendekati 1, maka model yang kita miliki semakin bagus dalam artian variabel prediktor dapat menjelaskan target variabel kita dengan baik.

Nilai adjusted R-Squared yang kita miliki yaitu 0.8736 atau sebesar 87,36%model dapat menjelaskan target variabel sisanya dijelaskan oleh faktor lain.

Error

Karena nilai Multiple R-quared yang kita miliki kecil, kita bisa melihat dari nilai error dari hasil prediksi kita. Untuk melihat nilai error, ada beberapa perhitungan error yang bisa kita gunakan. Salah satunya yaitu RMSE (Root Mean Square Error)

library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
RMSE(model$fitted.values, CPU$PERFORMANCE, na.rm = T)
## [1] 51.10566

Nilai error yang kita dapatkan cukup kecil, sehingga kita bisa gunakan model regresi yang telah kita buat untuk memprediksi nilai performance selanjutnya.

Uji Parsial

Selanjutnya untuk mengimprove dari model kita agar nilai R-Squared lebih tinggi, kita melakukan uji parsial. Uji parsial adalah untuk melihat apakah dari masing-masing variabel prediktor yang kita gunakan untuk melakukan prediksi berpengaruh signifikan terhadap target variabel yang kita miliki.

Hipotesis yang digunakan adalah sebagai berikut :

H0 : Variabel prediktor tidak signifikan (Variabel prediktor tidak berpengaruh terhadap nilai dari target variabel) H1 : variabel prediktor signifikan (Variabel prediktor berpengaruh terhadap nilai dari target variabel)

Untuk melakukan uji parsial atau melihat apakah berpengaruh atau tidak variabel prediktor yang kita gunakan bisa dilihat pada nilai Pr(>|t|). Jika nilai Pr(>|t|) lebih kecil dari nilai α = 0.05, maka dapat kita katakan bahwa variabel prediktor tersebut berpengaruh terhadap target variabel kita. Untuk simplenya, kita bisa liat tanda bintang-bintang disamping nilai Pr(>|t|), semakin banyak bintang disana, artinya variabel prediktor tersebut berpengaruh terhadap target variabel.

Stepwise

Untuk mempermudah pengevaluasian variabel prediktor, kita dapat menggunakan metode stepwise. Stepwise merupakan metode yang digunakan untuk evaluasi variabel yang tidak berpengaruh terhadap model. Stepwise memiliki 3 cara dalam mengevaluasi variabel, diantaranya yaitu :

backward : Mengevaluasi model dengan cara memasukkan seluruh variabel prediktor lalu mengurangi satu persatu variabel prediktor yang tidak berpengaruh hingga memperoleh nilai AIC (Akaike Information Criterion) terkecil/R-Squared terbesar forward : Mengevaluasi model dengan cara memasukkan satu persatu variabel yang dirasa berpengaruh terhadap target variabel hingga memperoleh nilai AIC terkecil/R-Squared terbesar both : Mengevaluasi model dengan cara menambahkan dan mengurangi variabel-variabel yang dirasa berpengaruh dan tidak berpengaruh terhadap target variabel

model_none <- lm(PERFORMANCE~1, CPU)
model_all <- lm(PERFORMANCE~., CPU)

Untuk melakukan stepwise dengan cara backward, kita dapat menggunakan model_all.

step(model_all, direction = "backward")
## Start:  AIC=1579.69
## PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX
## 
##         Df Sum of Sq    RSS    AIC
## <none>               519746 1579.7
## - CHMIN  1      7736 527482 1580.6
## - MYCT   1     16936 536682 1584.1
## - CHMAX  1     53625 573371 1597.2
## - CACH   1     66261 586007 1601.6
## - MMAX   1    163653 683399 1632.2
## - MMIN   1    297282 817028 1667.7
## 
## Call:
## lm(formula = PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + 
##     CHMAX, data = CPU)
## 
## Coefficients:
## (Intercept)         MYCT         MMIN         MMAX         CACH        CHMIN  
##  -43.974858     0.038450     0.016739     0.004451     0.602534     1.291438  
##       CHMAX  
##    0.906029

Dari hasil stepwise menggunakan backward, kita memperoleh model yang optimal menurutnya yaitu sebagai berikut.

lm(PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX, CPU)

backward <- lm(PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX, CPU)
summary(backward)
## 
## Call:
## lm(formula = PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + 
##     CHMAX, data = CPU)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -167.046  -19.859    3.834   21.522  306.234 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.397e+01  7.324e+00  -6.004 9.43e-09 ***
## MYCT         3.845e-02  1.537e-02   2.501   0.0132 *  
## MMIN         1.674e-02  1.597e-03  10.479  < 2e-16 ***
## MMAX         4.451e-03  5.725e-04   7.775 4.47e-13 ***
## CACH         6.025e-01  1.218e-01   4.947 1.64e-06 ***
## CHMIN        1.291e+00  7.639e-01   1.691   0.0925 .  
## CHMAX        9.060e-01  2.036e-01   4.451 1.45e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 52.03 on 192 degrees of freedom
## Multiple R-squared:  0.8774, Adjusted R-squared:  0.8736 
## F-statistic: 229.1 on 6 and 192 DF,  p-value: < 2.2e-16

Jika kita menggunakan metode forward untuk stepwise adalah sebagai berikut.

step(model_none, scope = list(lower = model_none, upper = model_all), direction = "forward")
## Start:  AIC=1985.43
## PERFORMANCE ~ 1
## 
##         Df Sum of Sq     RSS    AIC
## + MMAX   1   3071526 1169495 1731.1
## + MMIN   1   3039254 1201768 1736.5
## + CACH   1   1856331 2384691 1872.9
## + CHMIN  1   1753793 2487229 1881.2
## + CHMAX  1   1092938 3148084 1928.1
## + MYCT   1    446317 3794704 1965.3
## <none>               4241021 1985.4
## 
## Step:  AIC=1731.08
## PERFORMANCE ~ MMAX
## 
##         Df Sum of Sq     RSS    AIC
## + MMIN   1    385064  784432 1653.6
## + CACH   1    293833  875662 1675.5
## + CHMIN  1    169043 1000452 1702.0
## + CHMAX  1     79597 1089898 1719.0
## <none>               1169495 1731.1
## + MYCT   1        88 1169408 1733.1
## 
## Step:  AIC=1653.6
## PERFORMANCE ~ MMAX + MMIN
## 
##         Df Sum of Sq    RSS    AIC
## + CACH   1    163542 620889 1609.1
## + CHMAX  1    163229 621202 1609.2
## + CHMIN  1    105715 678716 1626.8
## <none>               784432 1653.6
## + MYCT   1      2498 781933 1655.0
## 
## Step:  AIC=1609.08
## PERFORMANCE ~ MMAX + MMIN + CACH
## 
##         Df Sum of Sq    RSS    AIC
## + CHMAX  1     77029 543861 1584.7
## + CHMIN  1     33328 587561 1600.1
## + MYCT   1     12216 608673 1607.1
## <none>               620889 1609.1
## 
## Step:  AIC=1584.72
## PERFORMANCE ~ MMAX + MMIN + CACH + CHMAX
## 
##         Df Sum of Sq    RSS    AIC
## + MYCT   1   16378.5 527482 1580.6
## + CHMIN  1    7178.7 536682 1584.1
## <none>               543861 1584.7
## 
## Step:  AIC=1580.63
## PERFORMANCE ~ MMAX + MMIN + CACH + CHMAX + MYCT
## 
##         Df Sum of Sq    RSS    AIC
## + CHMIN  1    7736.4 519746 1579.7
## <none>               527482 1580.6
## 
## Step:  AIC=1579.69
## PERFORMANCE ~ MMAX + MMIN + CACH + CHMAX + MYCT + CHMIN
## 
## Call:
## lm(formula = PERFORMANCE ~ MMAX + MMIN + CACH + CHMAX + MYCT + 
##     CHMIN, data = CPU)
## 
## Coefficients:
## (Intercept)         MMAX         MMIN         CACH        CHMAX         MYCT  
##  -43.974858     0.004451     0.016739     0.602534     0.906029     0.038450  
##       CHMIN  
##    1.291438

Untuk model yang terbentuk pada metode forward sebagai berikut : lm(PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX, CPU )

forward <- lm(PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX, CPU )
summary(forward)
## 
## Call:
## lm(formula = PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + 
##     CHMAX, data = CPU)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -167.046  -19.859    3.834   21.522  306.234 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.397e+01  7.324e+00  -6.004 9.43e-09 ***
## MYCT         3.845e-02  1.537e-02   2.501   0.0132 *  
## MMIN         1.674e-02  1.597e-03  10.479  < 2e-16 ***
## MMAX         4.451e-03  5.725e-04   7.775 4.47e-13 ***
## CACH         6.025e-01  1.218e-01   4.947 1.64e-06 ***
## CHMIN        1.291e+00  7.639e-01   1.691   0.0925 .  
## CHMAX        9.060e-01  2.036e-01   4.451 1.45e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 52.03 on 192 degrees of freedom
## Multiple R-squared:  0.8774, Adjusted R-squared:  0.8736 
## F-statistic: 229.1 on 6 and 192 DF,  p-value: < 2.2e-16

Dari hasil stepwise menggunakan metode forward memperlihatkan hasil akurasi atau R-squared yang sama dengan backward. Berdasarkan business wise, kita gunakan model yang kita peroleh berdasarkan hasil dari stepwise yang telah kita bentuk.

Pemeriksaan Asumsi

Dalam linear regression, kita memiliki asumsi-asumsi yang harus terpenuhi. Beberapa asumsi yang harus terpenuhi yaitu :

Linearity : memiliki hubungan linear antara variabel prediktor dengan target variabel Residual Normal : eror berdistribusi normal No-Heteroskedastisity : erornya tidak berpola dan homogen No-Multikolinearity : tidak ada multikolinearitas antar variabel independen Untuk melakukan checking asumsi diatas, kita lakukan langkah berikut.

Linearitas

Untuk melakukan pengecekan linearity, kita bisa menggunakan nilai korelasi antar variabel. Ketika kita memiliki data yang tidak linear, kita bisa mengatasinya dengan melakukan transformasi terhadap datanya menggunakan log() atau exp().

library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
ggcorr(CPU, label = T, hjust=1)

Normalitas

Untuk melakukan pengecekan bahwa residual dari model yang telah kita buat itu berdistribusi normal atau tidak, kita bisa menggunakan uji shapiro test atau bisa juga dengan menggunakan histogram.

Uji hipotesis dalam normality yaitu : H0 : residual berdistribusi normal H1 : residual tidak berdistribusi normal

library(MASS)
hist(forward$residuals)

Berdasarkan hasil histogram dapat kita ketahui bahwa residual berdistribusi normal.

Tidak Heteroskedastisitas

plot(forward$residuals)

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(forward)
## 
##  studentized Breusch-Pagan test
## 
## data:  forward
## BP = 62.838, df = 6, p-value = 1.191e-11

Tidak Ada MUltikolinearitas

Untuk melihat bahwa data yang kita gunakan tidak terdapat multikolinearitas, kita bisa menggunakan nilai VIF, dimana ketika nilai VIF < 10, maka data yang kita gunakan tidak terdapat multikolinearitas.

library(car)
## Loading required package: carData
vif(forward)
##     MYCT     MMIN     MMAX     CACH    CHMIN    CHMAX 
## 1.211629 2.884674 3.089044 1.798326 2.043743 1.743035

variabel-variabel tersebut memiliki nilai VIF lebih kecil dari 10, sehingga kita bisa menggunakan variabel-variabel tersebut dalam pengujian.

model_fix <- lm(PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + CHMAX, CPU)
summary((model_fix))
## 
## Call:
## lm(formula = PERFORMANCE ~ MYCT + MMIN + MMAX + CACH + CHMIN + 
##     CHMAX, data = CPU)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -167.046  -19.859    3.834   21.522  306.234 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.397e+01  7.324e+00  -6.004 9.43e-09 ***
## MYCT         3.845e-02  1.537e-02   2.501   0.0132 *  
## MMIN         1.674e-02  1.597e-03  10.479  < 2e-16 ***
## MMAX         4.451e-03  5.725e-04   7.775 4.47e-13 ***
## CACH         6.025e-01  1.218e-01   4.947 1.64e-06 ***
## CHMIN        1.291e+00  7.639e-01   1.691   0.0925 .  
## CHMAX        9.060e-01  2.036e-01   4.451 1.45e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 52.03 on 192 degrees of freedom
## Multiple R-squared:  0.8774, Adjusted R-squared:  0.8736 
## F-statistic: 229.1 on 6 and 192 DF,  p-value: < 2.2e-16
vif(model_fix)
##     MYCT     MMIN     MMAX     CACH    CHMIN    CHMAX 
## 1.211629 2.884674 3.089044 1.798326 2.043743 1.743035
shapiro.test  (model_fix$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model_fix$residuals
## W = 0.83828, p-value = 1.312e-13
bptest(model_fix)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_fix
## BP = 62.838, df = 6, p-value = 1.191e-11

Kesimpulan

Berdasarkan dari hasil analisis regresi yang dilakukan, karena setelah di cek asumsi banyak asumsi yang tidak terpenuhi. Terkadang ketika dalam bisnis, asumsi tidak terlalu dihiraukan, namun ada baiknya digunakan pengecekan asumsi.

Hasil dari model regresi yang terbentuk adalah : y^ : -4.397e+01 + 3.845e-02 MYCT +1.674e-02 MMIN + .451e-03 MMAX + 6.025e-01 CACH + 1.291e+00 CHMIN + 9.060e-01 CHMAX

Referensi

https://rpubs.com/inayatus/linear-regression https://github.com/devirifma29 https://rpubs.com/devirifma29 https://accounting.binus.ac.id/2021/08/12/memahami-analisis-regresi-linear-berganda/#:~:text=Regresi%20linear%20berganda%20merupakan%20model,dependen%20(Ghozali%2C%202018). https://tpb.uncp.ac.id/2013/04/regresi-linear-berganda.html#:~:text=Langkah%2Dlangkah%20yang%20lazim%20dipergunakan,akurat%20jika%20telah%20diketahui%20signifikansinya.