Regresi dengan Peubah Lag
Kali ini akan dilakukan pemodelan regresi dengan peubah lag dengan mencobakan metode-metode seperti koyck, ADRL, DLM, Autoregressive dan perbandingan terhadap model-model tersebut.
Preprocessing
Packages
Impor Data
library(rio)
data<- import("https://raw.githubusercontent.com/fax17/MPDW/main/pertemuan%203/data%20prak%203.csv")
data## t yt y(t-1) xt
## 1 1 8100 NA 11769
## 2 2 10253 8100 11654
## 3 3 10784 10253 12468
## 4 4 10973 10784 11905
## 5 5 10060 10973 10631
## 6 6 10842 10060 11366
## 7 7 11367 10842 12699
## 8 8 12961 11367 11888
## 9 9 11546 12961 9306
## 10 10 11623 11546 8394
## 11 11 11648 11623 8274
## 12 12 11918 11648 7696
## 13 13 11335 11918 6256
## 14 14 10425 11335 5636
## 15 15 10848 10425 5025
## 16 16 10627 10848 4691
## 17 17 11697 10627 5522
## 18 18 13196 11697 7201
## 19 19 14224 13196 7592
## 20 20 12374 14224 7728
## 21 21 13270 12374 7164
## 22 22 12774 13270 4165
## 23 23 12584 12774 3632
## 24 24 14614 12584 3599
## 25 25 14475 14614 2429
## 26 26 14355 14475 1941
## 27 27 16780 14355 2003
## 28 28 20623 16780 1982
## 29 29 23859 20623 2217
## 30 30 26979 23859 2420
## 31 31 30191 26979 1826
## 32 32 27835 30191 1428
## 33 33 23252 27835 1362
## 34 34 21424 23252 1389
## 35 35 21704 21424 1580
## 36 36 21032 21704 1392
## 37 37 20779 21032 1431
## 38 38 21517 20779 1810
## 39 39 23133 21517 2086
## 40 40 25070 23133 2073
## 41 41 35600 25070 2211
## 42 42 37321 35600 2498
## 43 43 39201 37321 2462
## 44 44 36039 39201 3333
## 45 45 35397 36039 3356
## 46 46 37502 35397 4171
## 47 47 36585 37502 4000
## 48 48 34392 36585 3768
## 49 49 34316 34392 1514
## 50 50 38142 34316 1621
## 51 51 40072 38142 1341
## 52 52 30972 40072 1425
## 53 53 37633 30972 1458
## 54 54 33335 37633 1442
## 55 55 38293 33335 1417
## 56 56 41091 38293 1751
## 57 57 42954 41091 1903
## 58 58 45630 42954 2109
## 59 59 41815 45630 2453
## 60 60 38301 41815 2431
## 61 61 40388 38301 2439
## 62 62 40600 40388 3079
## 63 63 29859 40600 3129
## 64 64 31592 29859 3828
## 65 65 30722 31592 4244
Model Koyck
Model Koyck didasarkan pada asumsi bahwa semakin jauh jarak lag peubah independen dari periode sekarang maka semakin kecil pengaruh peubah lag terhadap peubah dependen.
Koyck mengusulkan suatu metode untuk menduga model dinamis distributed lag dengan mengasumsikan bahwa semua koefisien \(\beta\) mempunyai tanda sama.
Model kyock merupakan jenis paling umum dari model infinite distributed lag dan juga dikenal sebagai geometric lag
\[ y_t=a(1-\lambda)+\beta_0X_t+\beta_1Z_t+\lambda Y_{t-1}+V_t \]
dengan \[V_t=u_t-\lambda u_{t-1}\]
Pemodelan
Pemodelan model Koyck dengan R dapat menggunakan
dLagM::koyckDlm() . Fungsi umum dari koyckDlm
adalah sebagai berikut.
Fungsi koyckDlm() akan menerapkan model lag
terdistribusi dengan transformasi Koyck satu prediktor. Nilai
x dan y tidak perlu sebagai objek time
series (ts). intercept dapat dibuat
TRUE untuk memasukkan intersep ke dalam model.
##
## Call:
## "Y ~ (Intercept) + Y.1 + X.t"
##
## Residuals:
## Min 1Q Median 3Q Max
## -5435.0 -1397.2 -313.4 995.2 9698.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2325.82769 1381.24485 1.684 0.099 .
## Y.1 0.95533 0.04451 21.463 <2e-16 ***
## X.t -0.16913 0.12288 -1.376 0.175
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2308 on 46 degrees of freedom
## Multiple R-Squared: 0.9474, Adjusted R-squared: 0.9451
## Wald test: 414.6 on 2 and 46 DF, p-value: < 2.2e-16
##
## Diagnostic tests:
## NULL
##
## alpha beta phi
## Geometric coefficients: 52062.85 -0.1691289 0.9553265
## [1] 902.8919
## [1] 910.4592
Dari hasil tersebut, didapat bahwa peubah \(x_t\) dan \(y_{t-1}\) memiliki nilai \(P-Value<0.05\). Hal ini menunjukkan bahwa peubah \(x_t\) dan \(y_{t-1}\) berpengaruh signifikan terhadap \(y\). Adapun model keseluruhannya adalah sebagai berikut
\[ \hat{Y_t}=2325.827+-0.169X_t+0.955Y_{t-1} \]
Peramalan dan Akurasi
Berikut adalah hasil peramalan y untuk 15 periode kedepan menggunakan model koyck
## $forecasts
## [1] 38537.09 38900.32 39241.75 39570.63 39889.04 40136.75 40347.67 40514.34
## [9] 40615.38 40715.62 40810.04 40791.99 40766.30 40623.53 40416.78
##
## $call
## forecast.koyckDlm(model = model.koyck, x = test$xt, h = 15)
##
## attr(,"class")
## [1] "forecast.koyckDlm" "dLagM"
## n MAE MPE MAPE sMAPE MASE MSE
## model.koyck 49 1627.013 -0.009471086 0.08360347 0.0834525 1.042303 5001373
## MRAE GMRAE
## model.koyck 2.356914 1.348825
Regression with Distributed Lag
Pemodelan model Regression with Distributed Lag dengan R
dapat menggunakan dLagM::dlm() . Fungsi umum dari
dlm adalah sebagai berikut.
Fungsi dlm() akan menerapkan model lag terdistribusi
dengan satu atau lebih prediktor. Nilai x dan
y tidak perlu sebagai objek time series
(ts). \(q\) adalah integer
yang mewakili panjang lag yang terbatas.
Pemodelan (Lag=2)
##
## Call:
## lm(formula = model.formula, data = design)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9183 -5708 -2640 3927 16309
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 29725.4004 1924.8019 15.443 <2e-16 ***
## x.t -0.3300 1.3425 -0.246 0.8070
## x.1 0.8534 2.0787 0.411 0.6834
## x.2 -2.2956 1.3058 -1.758 0.0857 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7576 on 44 degrees of freedom
## Multiple R-squared: 0.4455, Adjusted R-squared: 0.4077
## F-statistic: 11.78 on 3 and 44 DF, p-value: 8.552e-06
##
## AIC and BIC values for the model:
## AIC BIC
## 1 999.5866 1008.943
## [1] 999.5866
## [1] 1008.943
Dari hasil diatas, didapat bahwa \(P-value\) dari intercept dan \(x_{t-1}<0.05\). Hal ini menunjukkan bahwa intercept dan \(x_{t-1}\) berpengaruh signifikan terhadap \(y\). Adapun model keseluruhan yang terbentuk adalah sebagai berikut
\[ \hat{Y_t}=29725.4004-0.3300X_t+0.8534X_{t-1}-2.2956X_{t-2} \]
Peramalan dan Akurasi
Berikut merupakan hasil peramalan \(y\) untuk 15 periode kedepan
## $forecasts
## [1] 27190.78 26678.46 27382.04 27222.65 27141.49 27046.67 27338.96 26633.97
## [9] 26347.34 26175.28 25364.17 25210.32 25721.67 24064.49 24409.00
##
## $call
## forecast.dlm(model = model.dlm, x = test$xt, h = 15)
##
## attr(,"class")
## [1] "forecast.dlm" "dLagM"
## n MAE MPE MAPE sMAPE MASE MSE MRAE
## model.dlm 48 6153.44 -0.09953821 0.3208107 0.3006614 3.887463 52614911 14.34493
## GMRAE
## model.dlm 5.595952
Lag Optimum
#penentuan lag optimum
finiteDLMauto(formula = yt ~ xt,
data = data.frame(train), q.min = 1, q.max = 23,
model.type = "dlm", error.type = "AIC", trace = FALSE)## q - k MASE AIC BIC GMRAE MBRAE R.Adj.Sq Ljung-Box
## 23 23 0.07507 415.2207 448.9124 0.10746 -0.09488 0.99182 0.0003644872
Berdasarkan output tersebut, lag optimum didapatkan ketika lag=23. Selanjutnya dilakukan pemodelan untuk lag=23
#model dlm dengan lag optimum
model.dlm2 <- dlm(x = train$xt,y = train$yt , q = 23)
summary(model.dlm2)##
## Call:
## lm(formula = model.formula, data = design)
##
## Residuals:
## 1 2 3 4 5 6 7 8 9 10
## -34.61 114.35 -158.97 178.68 -182.50 151.95 -112.56 113.40 -167.39 188.55
## 11 12 13 14 15 16 17 18 19 20
## -61.33 17.06 -130.69 85.45 -78.12 225.01 -244.04 159.81 -70.74 -118.69
## 21 22 23 24 25 26 27
## 123.84 -268.25 570.96 -93.73 -404.53 308.64 -111.54
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.002e+04 2.250e+03 17.790 0.00314 **
## x.t 2.922e-01 4.561e-01 0.641 0.58729
## x.1 -2.672e-02 6.407e-01 -0.042 0.97053
## x.2 -2.000e+00 1.058e+00 -1.890 0.19926
## x.3 1.136e+00 6.739e-01 1.685 0.23401
## x.4 1.838e+00 7.048e-01 2.608 0.12092
## x.5 -2.111e+00 8.441e-01 -2.502 0.12948
## x.6 1.024e+00 9.571e-01 1.070 0.39673
## x.7 -2.836e-01 9.072e-01 -0.313 0.78416
## x.8 2.668e+00 9.049e-01 2.948 0.09835 .
## x.9 -3.212e+00 8.428e-01 -3.811 0.06248 .
## x.10 8.287e-01 7.989e-01 1.037 0.40858
## x.11 -5.856e-02 8.425e-01 -0.070 0.95091
## x.12 1.910e+00 8.596e-01 2.222 0.15635
## x.13 -1.781e+00 8.215e-01 -2.168 0.16243
## x.14 2.718e-01 8.578e-01 0.317 0.78138
## x.15 -1.876e+00 8.934e-01 -2.100 0.17051
## x.16 4.388e-01 7.147e-01 0.614 0.60177
## x.17 -1.778e+00 6.681e-01 -2.661 0.11696
## x.18 1.376e+00 6.254e-01 2.200 0.15877
## x.19 -2.727e+00 6.113e-01 -4.461 0.04675 *
## x.20 1.131e+00 5.422e-01 2.086 0.17225
## x.21 -1.843e+00 5.018e-01 -3.672 0.06681 .
## x.22 1.639e+00 4.454e-01 3.680 0.06656 .
## x.23 4.711e-01 2.999e-01 1.571 0.25685
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 741.5 on 2 degrees of freedom
## Multiple R-squared: 0.9994, Adjusted R-squared: 0.9918
## F-statistic: 132.4 on 24 and 2 DF, p-value: 0.007524
##
## AIC and BIC values for the model:
## AIC BIC
## 1 415.2207 448.9124
## [1] 415.2207
## [1] 448.9124
Dari hasil tersebut terdapat beberapa peubah yang berpengaruh signifikan terhadap taraf nyata 5% yaitu \(x_{t-19}\) . Adapun keseluruhan model yang terbentuk adalah
\[ \hat{Y_t}=0.0004002+0.2922X_t+...+0.4711X_{t-23} \]
Adapun hasil peramalan 15 periode kedepan menggunakan model tersebut adalah sebagai berikut
#peramalan dan akurasi
fore.dlm2 <- forecast(model = model.dlm2, x=test$xt, h=15)
mape.dlm2<- MAPE(fore.dlm2$forecasts, test$yt)
#akurasi data training
GoF(model.dlm2)## n MAE MPE MAPE sMAPE MASE MSE
## model.dlm2 27 165.7548 -4.14146e-05 0.006230376 0.006232622 0.07506748 40730.83
## MRAE GMRAE
## model.dlm2 0.3354409 0.1074563
Model tersebut merupakan model yang sangat baik dengan nilai MAPE yang kurang dari 10%.
Model Autoregressive
Peubah dependen dipengaruhi oleh peubah independen pada waktu sekarang, serta dipengaruhi juga oleh peubah dependen itu sendiri pada satu waktu yang lalu maka model tersebut disebut autoregressive (Gujarati 2004).
Pemodelan
Pemodelan Autoregressive dilakukan menggunakan fungsi
dLagM::ardlDlm() . Fungsi tersebut akan menerapkan
autoregressive berordo \((p,q)\) dengan satu prediktor. Fungsi umum
dari ardlDlm() adalah sebagai berikut.
Dengan \(p\) adalah integer yang mewakili panjang lag yang terbatas dan \(q\) adalah integer yang merepresentasikan ordo dari proses autoregressive.
##
## Time series regression with "ts" data:
## Start = 2, End = 50
##
## Call:
## dynlm(formula = as.formula(model.text), data = data, start = 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5398.3 -946.8 -252.5 977.4 9578.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2246.25515 1340.51432 1.676 0.101
## X.t 0.49630 0.38241 1.298 0.201
## X.1 -0.62784 0.37823 -1.660 0.104
## Y.1 0.95652 0.04343 22.024 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2259 on 45 degrees of freedom
## Multiple R-squared: 0.9507, Adjusted R-squared: 0.9474
## F-statistic: 289.1 on 3 and 45 DF, p-value: < 2.2e-16
## [1] 901.701
## [1] 911.1601
Hasil di atas menunjukkan bahwa selain peubah \(y_{t-1}\), hasil uji t menunjukkan nilai-p pada peubah \(\ge0.05\) Hal ini menunjukkan bahwa peubah \(y_{t-1}\) berpengaruh signifikan terhadap \(y_t\), sementara \(x_t\) dan \(x_{t-1}\) tidak berpengaruh signifikan terhadap \(y_t\). Model keseluruhannya adalah sebagai berikut:
\[ \hat{Y}=2246.25515 +0.4963X_t-0.62784X_{t-1}+0.95652_{t-1} \]
Peramalan dan Akurasi
## $forecasts
## [1] 38377.59 38820.41 39207.62 39549.33 39873.83 40365.67 40701.87 41030.25
## [9] 41385.75 41498.90 41624.91 42058.05 42095.36 42446.56 42550.10
##
## $call
## forecast.ardlDlm(model = model.ardl, x = test$xt, h = 15)
##
## attr(,"class")
## [1] "forecast.ardlDlm" "dLagM"
Data di atas merupakan hasil peramalan untuk 5 periode ke depan menggunakan Model Autoregressive dengan \(p=1\) dan \(q=1\).
## [1] 0.1356542
## n MAE MPE MAPE sMAPE MASE MSE
## model.ardl 49 1448.906 -0.009097063 0.06899382 0.06903931 0.9282035 4686060
## MRAE GMRAE
## model.ardl 2.069443 0.902694
Berdasarkan akurasi di atas, terlihat bahwa nilai MAPE keduanya tidak
jauh berbeda. Artinya, model regresi dengan distribusi lag ini
tidak overfitted atau underfitted
Lag Optimum
#penentuan lag optimum
model.ardl.opt <- ardlBoundOrders(data = data.frame(data), ic = "AIC",
formula = yt ~ xt )
min_p=c()
for(i in 1:15){
min_p[i]=min(model.ardl.opt$Stat.table[[i]])
}
q_opt=which(min_p==min(min_p, na.rm = TRUE))
p_opt=which(model.ardl.opt$Stat.table[[q_opt]] ==
min(model.ardl.opt$Stat.table[[q_opt]], na.rm = TRUE))
data.frame("q_optimum" = q_opt, "p_optimum" = p_opt,
"AIC"=model.ardl.opt$min.Stat)## q_optimum p_optimum AIC
## 1 1 15 941.023
Dari tabel di atas, dapat terlihat bahwa nilai AIC terendah didapat
ketika \(p=15\) dan \(q=1\), yaitu sebesar 941.023.
Artinya, model autoregressive optimum didapat ketika \(p=15\) dan \(q=1\).
Selanjutnya dapat dilakukan pemodelan dengan nilai \(p\) dan \(q\) optimum seperti inisialisasi di langkah sebelumnya.
Pemodelan DLM & ARDL dengan Library dynlm
Pemodelan regresi dengan peubah lag tidak hanya dapat
dilakukan dengan fungsi pada packages dLagM ,
tetapi terdapat packages dynlm yang dapat
digunakan. Fungsi dynlm secara umum adalah sebagai
berikut.
dynlm(formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, start = NULL, end = NULL, ...)Untuk menentukan formula model yang akan digunakan,
tersedia fungsi tambahan yang memungkinkan spesifikasi dinamika (melalui
d() dan L()) atau pola linier/siklus dengan
mudah (melalui trend(), season(), dan
harmon()). Semua fungsi formula baru mengharuskan
argumennya berupa objek deret waktu (yaitu, "ts" atau
"zoo").
#sama dengan model dlm q=1
cons_lm1 <- dynlm(yt ~ xt+L(xt),data = train.ts)
#sama dengan model ardl p=1 q=0
cons_lm2 <- dynlm(yt ~ xt+L(yt),data = train.ts)
#sama dengan ardl p=1 q=1
cons_lm3 <- dynlm(yt ~ xt+L(xt)+L(yt),data = train.ts)
#sama dengan dlm p=2
cons_lm4 <- dynlm(yt ~ xt+L(xt)+L(xt,2),data = train.ts)Ringkasan Model
##
## Time series regression with "ts" data:
## Start = 2, End = 50
##
## Call:
## dynlm(formula = yt ~ xt + L(xt), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10400 -5280 -2414 3694 14688
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 29076.7763 1898.9677 15.312 <2e-16 ***
## xt 0.3635 1.2980 0.280 0.781
## L(xt) -2.0699 1.2646 -1.637 0.108
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7668 on 46 degrees of freedom
## Multiple R-squared: 0.419, Adjusted R-squared: 0.3938
## F-statistic: 16.59 on 2 and 46 DF, p-value: 3.762e-06
##
## Time series regression with "ts" data:
## Start = 2, End = 50
##
## Call:
## dynlm(formula = yt ~ xt + L(yt), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5332.7 -1206.0 -289.6 1119.2 9787.4
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1761.39454 1333.03361 1.321 0.193
## xt -0.10924 0.11689 -0.935 0.355
## L(yt) 0.96900 0.04358 22.234 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2302 on 46 degrees of freedom
## Multiple R-squared: 0.9477, Adjusted R-squared: 0.9454
## F-statistic: 416.4 on 2 and 46 DF, p-value: < 2.2e-16
##
## Time series regression with "ts" data:
## Start = 2, End = 50
##
## Call:
## dynlm(formula = yt ~ xt + L(xt) + L(yt), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5398.3 -946.8 -252.5 977.4 9578.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2246.25515 1340.51432 1.676 0.101
## xt 0.49630 0.38241 1.298 0.201
## L(xt) -0.62784 0.37823 -1.660 0.104
## L(yt) 0.95652 0.04343 22.024 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2259 on 45 degrees of freedom
## Multiple R-squared: 0.9507, Adjusted R-squared: 0.9474
## F-statistic: 289.1 on 3 and 45 DF, p-value: < 2.2e-16
##
## Time series regression with "ts" data:
## Start = 3, End = 50
##
## Call:
## dynlm(formula = yt ~ xt + L(xt) + L(xt, 2), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9183 -5708 -2640 3927 16309
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 29725.4004 1924.8019 15.443 <2e-16 ***
## xt -0.3300 1.3425 -0.246 0.8070
## L(xt) 0.8534 2.0787 0.411 0.6834
## L(xt, 2) -2.2956 1.3058 -1.758 0.0857 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7576 on 44 degrees of freedom
## Multiple R-squared: 0.4455, Adjusted R-squared: 0.4077
## F-statistic: 11.78 on 3 and 44 DF, p-value: 8.552e-06
Diagnostik Model
## Encompassing test
##
## Model 1: yt ~ xt + L(xt)
## Model 2: yt ~ xt + L(yt)
## Model E: yt ~ xt + L(xt) + L(yt)
## Res.Df Df F Pr(>F)
## M1 vs. ME 45 -1 485.0778 <2e-16 ***
## M2 vs. ME 45 -1 2.7554 0.1039
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Autokorelasi
##
## Durbin-Watson test
##
## data: cons_lm1
## DW = 0.15362, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
##
## Durbin-Watson test
##
## data: cons_lm2
## DW = 1.3377, p-value = 0.003431
## alternative hypothesis: true autocorrelation is greater than 0
##
## Durbin-Watson test
##
## data: cons_lm3
## DW = 1.363, p-value = 0.00405
## alternative hypothesis: true autocorrelation is greater than 0
##
## Durbin-Watson test
##
## data: cons_lm4
## DW = 0.14559, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Heterogenitas
##
## studentized Breusch-Pagan test
##
## data: cons_lm1
## BP = 7.5259, df = 2, p-value = 0.02322
##
## studentized Breusch-Pagan test
##
## data: cons_lm2
## BP = 2.7416, df = 2, p-value = 0.2539
##
## studentized Breusch-Pagan test
##
## data: cons_lm3
## BP = 3.394, df = 3, p-value = 0.3348
##
## studentized Breusch-Pagan test
##
## data: cons_lm4
## BP = 7.9966, df = 3, p-value = 0.04608
Kenormalan
##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm1)
## W = 0.91187, p-value = 0.001373
##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm2)
## W = 0.89287, p-value = 0.0003241
##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm3)
## W = 0.88215, p-value = 0.0001509
##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm4)
## W = 0.90376, p-value = 0.0008333
Perbandingan Model
akurasi <- matrix(c(mape.koyck, mape.dlm, mape.dlm2, mape.ardl))
row.names(akurasi)<- c("Koyck","DLM 1","DLM 2","Autoregressive")
colnames(akurasi) <- c("MAPE")
akurasi## MAPE
## Koyck 0.1223624
## DLM 1 0.2899022
## DLM 2 0.1797005
## Autoregressive 0.1356542
Berdasarkan nilai MAPE, model paling optimum didapat pada Model Koyck karena memiliki nilai MAPE yang terkecil.
Plot
par(mfrow=c(1,1))
plot(test$xt, test$yt, type="b", col="black")
points(test$xt, fore.koyck$forecasts,col="red")
lines(test$xt, fore.koyck$forecasts,col="red")
points(test$xt, fore.dlm$forecasts,col="blue")
lines(test$xt, fore.dlm$forecasts,col="blue")
points(test$xt, fore.dlm2$forecasts,col="orange")
lines(test$xt, fore.dlm2$forecasts,col="orange")
points(test$xt, fore.ardl$forecasts,col="green")
lines(test$xt, fore.ardl$forecasts,col="green")
legend("topleft",c("aktual", "koyck","DLM 1","DLM 2", "autoregressive"), lty=1, col=c("black","red","blue","orange","green"), cex=0.8)Berdasarkan plot tersebut, terlihat bahwa plot yang paling mendekati data aktualnya adalah Model koyck, sehingga dapat disimpulkan model terbaik dalam hal ini adalah model regresi koyck