Memasukkan Data

Pada bagian ini, kita menggunakan fungsi read_excel() dari paket readxl untuk memasukkan data dari file Excel ke dalam R. Data yang dimasukkan akan diperiksa dengan fungsi str() untuk melihat struktur data dan dim() untuk mengecek dimensi dataset yang dimuat. Hal ini penting untuk memastikan bahwa data yang digunakan dalam analisis regresi sudah terimpor dengan benar. Peubah yang digunakan adalah sebagai berikut:

  1. \(Y\) = Pertumbuhan Ekonomi

  2. \(X_1\) = Ekspor

  3. \(X_2\) = Investasi

  4. \(X_3\) = Konsumsi Lembaga Sosial Nirlaba

  5. \(X_4\) = Konsumsi Rumah Tangga

  6. \(X_5\) = Pengeluaran Pemerintah

  7. \(X_6\) = Perubahan Inventori

library(readxl) #Memasukkan Data ke R (Excel)
Data <- read_excel("D:/Pertumbuhan Ekonomi SS - 3.xlsx", sheet = "Sheet1")
as.data.frame(Data)
##    PertumbuhanEkonomi   Ekspor Investasi KonsumsiLSNirlaba KonsumsiRT
## 1            24407.10 15443.83   6070.14            123.15   11919.53
## 2            25835.93 18961.48   5996.57            121.72   12057.78
## 3            26564.60 19064.53   6694.59            133.51   12360.51
## 4            27807.45 19400.01   7164.88            135.14   12394.40
## 5            26831.47 20312.28   4576.75            133.58   12414.77
## 6            28066.35 20089.67   5706.60            132.44   12528.48
## 7            28260.83 17901.09   7936.27            136.87   12866.39
## 8            28607.48 18055.58  10047.08            145.35   12901.03
## 9            29267.50 20468.57   6324.85            152.14   12948.86
## 10           29932.46 20470.82   6627.83            160.82   13072.90
## 11           30164.96 19766.90   7146.25            155.19   13432.43
## 12           30626.52 20225.28   8018.24            157.87   13469.81
## 13           30676.87 23085.90   5684.30            156.79   13477.12
## 14           31217.95 22886.98   6357.61            159.73   13634.46
## 15           31509.67 21722.74   7297.29            165.10   14002.85
## 16           31632.92 20778.02   8495.45            171.97   14020.96
## 17           31779.84 22767.92   6375.99            159.67   14069.16
## 18           32345.92 22689.53   6606.96            163.04   14256.73
## 19           32757.23 22858.57   7529.49            169.51   14630.15
## 20           33618.14 22840.99   8526.54            176.70   14653.54
## 21           33109.12 23727.00   6959.50            160.67   14676.13
## 22           33721.56 24337.50   7091.61            170.95   14946.31
## 23           34301.23 27288.60   7819.14            172.95   15273.60
## 24           35369.80 25198.34   8257.28            181.98   15270.03
## 25           34640.01 26152.61   7285.04            183.54   15292.48
## 26           35338.86 25271.13   7380.88            195.63   15687.74
## 27           35902.43 27907.24   7825.32            198.64   15883.81
## 28           37087.00 29358.29   8274.75            207.66   15921.27
## 29           36263.42 27566.04   7310.77            216.38   15924.14
## 30           37055.64 26926.97   7800.59            221.85   16251.61
## 31           37525.67 28608.31   8215.83            204.03   16490.36
## 32           38419.88 28916.06   8553.74            202.95   16631.70
##    PengeluaranPemerintah PerubahanInventori
## 1                1388.04            1617.14
## 2                2083.34            -242.78
## 3                2267.53            -342.07
## 4                3243.64             417.87
## 5                1265.14             754.61
## 6                2137.20            -246.67
## 7                2355.18             681.65
## 8                3438.23           -2357.23
## 9                1540.24             850.70
## 10               2203.98             705.31
## 11               2490.68             809.50
## 12               3565.75            -897.09
## 13               1531.38             514.47
## 14               1792.01             708.80
## 15               2459.89             657.67
## 16               4058.88            -581.94
## 17               1550.05             470.39
## 18               1969.64             691.85
## 19               2244.14             645.95
## 20               3990.58            -551.56
## 21               1563.40            -259.63
## 22               2250.48             784.71
## 23               2393.26            -533.63
## 24               4025.44             689.47
## 25               1357.97             203.52
## 26               2653.49             279.64
## 27               2687.63             589.70
## 28               4043.09           -1070.49
## 29               1407.21             768.28
## 30               2890.90             859.11
## 31               3174.94            -816.81
## 32               4047.44             416.50
str(Data)
## tibble [32 × 7] (S3: tbl_df/tbl/data.frame)
##  $ PertumbuhanEkonomi   : num [1:32] 24407 25836 26565 27807 26831 ...
##  $ Ekspor               : num [1:32] 15444 18961 19065 19400 20312 ...
##  $ Investasi            : num [1:32] 6070 5997 6695 7165 4577 ...
##  $ KonsumsiLSNirlaba    : num [1:32] 123 122 134 135 134 ...
##  $ KonsumsiRT           : num [1:32] 11920 12058 12361 12394 12415 ...
##  $ PengeluaranPemerintah: num [1:32] 1388 2083 2268 3244 1265 ...
##  $ PerubahanInventori   : num [1:32] 1617 -243 -342 418 755 ...
dim(Data)
## [1] 32  7

Standarisasi Data

Pada tahap ini, data distandarisasi menggunakan fungsi scale() untuk mengubah setiap peubah ke dalam skala yang sama, yaitu rata-rata 0 dan standar deviasi 1. Standarisasi penting dilakukan terutama jika data memiliki skala yang sangat berbeda-beda, agar tidak ada peubah yang dominan dalam model analisis.

Data <- as.data.frame(scale(Data))
Data
##    PertumbuhanEkonomi       Ekspor   Investasi KonsumsiLSNirlaba  KonsumsiRT
## 1         -2.01351024 -2.028181931 -1.08734228       -1.59791967 -1.59271589
## 2         -1.62930451 -1.064257350 -1.15521863       -1.65064899 -1.49476539
## 3         -1.43336854 -1.036019058 -0.51121909       -1.21590864 -1.28028036
## 4         -1.09917197 -0.944089099 -0.07732530       -1.15580459 -1.25626920
## 5         -1.36160844 -0.694104172 -2.46515734       -1.21332749 -1.24183700
## 6         -1.02955496 -0.755104912 -1.42274756       -1.25536345 -1.16127316
## 7         -0.97726020 -1.354830882  0.63436606       -1.09201318 -0.92186300
## 8         -0.88404763 -1.312496736  2.58181836       -0.77932462 -0.89732047
## 9         -0.70657133 -0.651276781 -0.85234454       -0.52895252 -0.86343278
## 10        -0.52776668 -0.650660225 -0.57281247       -0.20888923 -0.77555010
## 11        -0.46524852 -0.843552011 -0.09451351       -0.41648789 -0.52082212
## 12        -0.34113718 -0.717944361  0.70999232       -0.31766650 -0.49433829
## 13        -0.32759830  0.065937474 -1.44332174       -0.35749005 -0.48915913
## 14        -0.18210441  0.011428390 -0.82211987       -0.24908151 -0.37768332
## 15        -0.10366226 -0.307602654  0.04483736       -0.05107001 -0.11667800
## 16        -0.07052091 -0.566479697  1.15027056        0.20225198 -0.10384701
## 17        -0.03101481 -0.021197044 -0.80516232       -0.25129393 -0.06969718
## 18         0.12120147 -0.042677876 -0.59206732       -0.12702973  0.06319667
## 19         0.23180081  0.003643336  0.25906717        0.11154279  0.32776576
## 20         0.46329549 -0.001174027  1.17895447        0.37666435  0.34433764
## 21         0.32642239  0.241615000 -0.26681074       -0.21442028  0.36034271
## 22         0.49110465  0.408907356 -0.14492486        0.16464085  0.55176598
## 23         0.64697521  1.217582987  0.52630086        0.23838815  0.78365183
## 24         0.93430871  0.644799169  0.93053277        0.57135722  0.78112248
## 25         0.73807158  0.906293152  0.03353540        0.62888012  0.79702836
## 26         0.92598908  0.664745460  0.12195824        1.07468256  1.07707115
## 27         1.07753043  1.387105908  0.53200259        1.18567225  1.21598728
## 28         1.39605578  1.784730107  0.94665075        1.51827258  1.24252779
## 29         1.17459896  1.293608525  0.05727413        1.83981082  1.24456119
## 30         1.38762323  1.118487270  0.50918647        2.04150969  1.47657458
## 31         1.51401210  1.579216722  0.89229063        1.38442123  1.64572960
## 32         1.75446100  1.663547963  1.20404944        1.34459769  1.74586938
##    PengeluaranPemerintah PerubahanInventori
## 1            -1.23378386          1.8044167
## 2            -0.46383967         -0.5542618
## 3            -0.25987589         -0.6801775
## 4             0.82102476          0.2835490
## 5            -1.36987784          0.7105896
## 6            -0.40419751         -0.5591949
## 7            -0.16281619          0.6180646
## 8             1.03650504         -3.2357254
## 9            -1.06524438          0.8324472
## 10           -0.33024832          0.6480692
## 11           -0.01276954          0.7801990
## 12            1.17771500         -1.3840324
## 13           -1.07505554          0.4060534
## 14           -0.78644551          0.6524951
## 15           -0.04686501          0.5876540
## 16            1.72378515         -0.9843714
## 17           -1.05438122          0.3501528
## 18           -0.58974598          0.6309998
## 19           -0.28577693          0.5727912
## 20            1.64815278         -0.9458446
## 21           -1.03959803         -0.5756303
## 22           -0.27875630          0.7487613
## 23           -0.12064810         -0.9231065
## 24            1.68675519          0.6279816
## 25           -1.26708204          0.0117186
## 26            0.16751899          0.1082510
## 27            0.20532410          0.5014571
## 28            1.70630001         -1.6039315
## 29           -1.21255586          0.7279254
## 30            0.43041623          0.8431125
## 31            0.74494945         -1.2822244
## 32            1.71111701          0.2818116

Analisis Regresi Berganda

Pada bagian ini, dilakukan analisis regresi berganda menggunakan fungsi lm() untuk membangun model regresi dengan PertumbuhanEkonomi sebagai peubah respons dan beberapa peubah penjelas. Hasil model akan diperiksa melalui fungsi summary() untuk menilai seberapa baik model dalam menjelaskan variasi dalam peubah respons.

x <- data.matrix(Data[, c('Ekspor', 'Investasi', 'KonsumsiRT','PengeluaranPemerintah'
                          , 'KonsumsiLSNirlaba', 'PerubahanInventori')])
head(x)
##          Ekspor  Investasi KonsumsiRT PengeluaranPemerintah KonsumsiLSNirlaba
## [1,] -2.0281819 -1.0873423  -1.592716            -1.2337839         -1.597920
## [2,] -1.0642573 -1.1552186  -1.494765            -0.4638397         -1.650649
## [3,] -1.0360191 -0.5112191  -1.280280            -0.2598759         -1.215909
## [4,] -0.9440891 -0.0773253  -1.256269             0.8210248         -1.155805
## [5,] -0.6941042 -2.4651573  -1.241837            -1.3698778         -1.213327
## [6,] -0.7551049 -1.4227476  -1.161273            -0.4041975         -1.255363
##      PerubahanInventori
## [1,]          1.8044167
## [2,]         -0.5542618
## [3,]         -0.6801775
## [4,]          0.2835490
## [5,]          0.7105896
## [6,]         -0.5591949
y <- Data$PertumbuhanEkonomi
head(y)
## [1] -2.013510 -1.629305 -1.433369 -1.099172 -1.361608 -1.029555
model_coba1 <- lm (y~x)
summary (model_coba1)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.31133 -0.07305  0.01199  0.09625  0.15641 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            4.284e-16  2.331e-02   0.000    1.000    
## xEkspor                1.779e-01  1.050e-01   1.694    0.103    
## xInvestasi             1.279e-02  6.105e-02   0.209    0.836    
## xKonsumsiRT            6.743e-01  1.373e-01   4.910  4.7e-05 ***
## xPengeluaranPemerintah 6.195e-02  3.882e-02   1.596    0.123    
## xKonsumsiLSNirlaba     1.257e-01  8.376e-02   1.501    0.146    
## xPerubahanInventori    1.315e-02  3.654e-02   0.360    0.722    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1319 on 25 degrees of freedom
## Multiple R-squared:  0.986,  Adjusted R-squared:  0.9826 
## F-statistic:   293 on 6 and 25 DF,  p-value: < 2.2e-16

Analisis Regresi Terpenalti

Regresi terpenalti adalah teknik regresi yang menambahkan penalti (atau regularisasi) pada model untuk mencegah overfitting dan multikolinieritas. Salah satu paket yang sering digunakan untuk analisis regresi terpenalti di R adalah paket glmnet, yang memungkinkan penerapan beberapa jenis regresi terpenalti, seperti Ridge, LASSO, dan Elastic Net. Pada bagian ini, kita akan memulai dengan memuat paket glmnet untuk melakukan analisis regresi terpenalti.

#install.packages("glmnet")
library(glmnet)
## Loading required package: Matrix
## Loaded glmnet 4.1-8

Analisis Regresi Ridge (Gulud)

Melakukan k-fold cross-validation untuk menemukan nilai lambda yang optimal

Pada bagian ini, kita menggunakan cross-validation untuk menemukan nilai parameter penalti lambda yang optimal, yang meminimalkan Mean Squared Error (MSE). Parameter alpha = 0 menandakan penggunaan Ridge regression dalam model glmnet.

cv_model <- cv.glmnet(x, y, alpha = 0)
cv_model
## 
## Call:  cv.glmnet(x = x, y = y, alpha = 0) 
## 
## Measure: Mean-Squared Error 
## 
##      Lambda Index Measure       SE Nonzero
## min 0.09742   100 0.02496 0.006610       6
## 1se 0.22506    91 0.03127 0.008021       6

Menghasilkan plot MSE dengan nilai lambda

Kita dapat memvisualisasikan hasil k-fold cross-validation dengan menghasilkan plot yang menunjukkan MSE terhadap nilai lambda yang berbeda. Plot ini membantu untuk melihat bagaimana perubahan nilai lambda mempengaruhi performa model.

plot(cv_model) 

Menemukan nilai lambda optimal yang meminimumkan MSE

Nilai lambda.min adalah nilai lambda yang meminimalkan MSE. Nilai ini sangat penting untuk memastikan model yang dibangun tidak terlalu kompleks dan terhindar dari overfitting.

best_lambda <- cv_model$lambda.min
best_lambda
## [1] 0.09742356

Koefisien model terbaik

Setelah menemukan nilai lambda yang optimal, kita membangun model Ridge menggunakan lambda tersebut dan menganalisis koefisien model yang dihasilkan. Koefisien ini menunjukkan pengaruh relatif dari setiap peubah dalam model.

Model_Ridge <- glmnet(x, y, alpha = 0, lambda = best_lambda)
coef(Model_Ridge)
## 7 x 1 sparse Matrix of class "dgCMatrix"
##                                 s0
## (Intercept)           2.344370e-16
## Ekspor                3.052732e-01
## Investasi             7.807767e-02
## KonsumsiRT            3.732289e-01
## PengeluaranPemerintah 4.618967e-02
## KonsumsiLSNirlaba     2.480943e-01
## PerubahanInventori    3.343132e-02

Analisis Regresi LASSO

LASSO (Least Absolute Shrinkage and Selection Operator) adalah metode regresi terpenalti yang menggunakan penalti L1, yang dapat memaksa beberapa koefisien regresi menjadi nol. Ini sangat berguna dalam pemilihan peubah, karena hanya peubah yang penting yang dipertahankan dalam model. ### Melakukan k-fold cross-validation untuk menemukan nilai lambda yang optimal eperti pada regresi Ridge, kita melakukan k-fold cross-validation untuk menemukan nilai lambda yang optimal yang meminimalkan Mean Squared Error (MSE). Pada regresi LASSO, kita menetapkan alpha = 1 untuk menggunakan penalti L1.

cv_model <- cv.glmnet(x, y, alpha = 1)
cv_model
## 
## Call:  cv.glmnet(x = x, y = y, alpha = 1) 
## 
## Measure: Mean-Squared Error 
## 
##      Lambda Index Measure       SE Nonzero
## min 0.01120    49 0.01981 0.004882       4
## 1se 0.04522    34 0.02432 0.007782       4

Menghasilkan plot MSE dengan nilai lambda

Kita dapat memvisualisasikan plot MSE terhadap nilai lambda untuk melihat bagaimana nilai lambda mempengaruhi performa model regresi LASSO.

plot(cv_model) 

Menemukan nilai lambda optimal yang meminimumkan MSE

Nilai lambda.min adalah nilai lambda yang menghasilkan MSE terendah, yang akan digunakan untuk membangun model final.

best_lambda <- cv_model$lambda.min
best_lambda
## [1] 0.01120134

Koefisien model terbaik

Dengan nilai lambda optimal, kita membangun model LASSO dan mengekstrak koefisien-koefisien yang menggambarkan kontribusi setiap peubah dalam model.

Model_LASSO <- glmnet(x, y, alpha = 1, lambda = best_lambda)
coef(Model_LASSO)
## 7 x 1 sparse Matrix of class "dgCMatrix"
##                                 s0
## (Intercept)           6.848647e-17
## Ekspor                1.450649e-01
## Investasi             .           
## KonsumsiRT            6.974179e-01
## PengeluaranPemerintah 5.162239e-02
## KonsumsiLSNirlaba     1.314667e-01
## PerubahanInventori    .

Analisis Regresi Elastic Net

Elastic Net adalah kombinasi dari Ridge dan LASSO, di mana penalti L1 dan L2 digabungkan. Ini memberikan fleksibilitas yang lebih besar dalam menangani data dengan banyak peubah berkorelasi. ### Melakukan k-fold cross-validation untuk menemukan nilai lambda yang optimal Seperti sebelumnya, kita melakukan k-fold cross-validation untuk menemukan nilai lambda terbaik, tetapi kali ini menggunakan nilai alpha antara 0 dan 1. Pada regresi Elastic Net, kita biasanya menggunakan nilai alpha sekitar 0.75 untuk menggabungkan aspek penalti L1 dan L2.

cv_model <- cv.glmnet(x, y, alpha = 0.75)
cv_model
## 
## Call:  cv.glmnet(x = x, y = y, alpha = 0.75) 
## 
## Measure: Mean-Squared Error 
## 
##      Lambda Index Measure       SE Nonzero
## min 0.01639    48 0.01825 0.005417       5
## 1se 0.06617    33 0.02350 0.007792       5

Menghasilkan plot MSE dengan nilai lambda

Plot MSE terhadap nilai lambda akan membantu kita untuk melihat bagaimana nilai lambda mempengaruhi performa model Elastic Net.

plot(cv_model) 

Menemukan nilai lambda optimal yang meminimalkan MSE

Sama seperti metode sebelumnya, kita mencari nilai lambda yang meminimalkan MSE dan menggunakannya untuk membangun model final.

best_lambda <- cv_model$lambda.min
best_lambda
## [1] 0.01639128

Koefisien model terbaik

Setelah menemukan nilai lambda yang optimal, kita membangun model Elastic Net dan mengevaluasi koefisien-koefisiennya untuk memahami kontribusi masing-masing peubah.

Model_Elastic_Net <- glmnet(x, y, alpha = 0.75, lambda = best_lambda)
coef(Model_Elastic_Net)
## 7 x 1 sparse Matrix of class "dgCMatrix"
##                                 s0
## (Intercept)           8.968630e-17
## Ekspor                1.663381e-01
## Investasi             3.033560e-03
## KonsumsiRT            6.502682e-01
## PengeluaranPemerintah 5.086067e-02
## KonsumsiLSNirlaba     1.544110e-01
## PerubahanInventori    .