Regresi dengan Peubah Lag
Pendahuluan
Package
library(dLagM)## Warning: package 'dLagM' was built under R version 4.1.3
## Loading required package: nardl
## Warning: package 'nardl' was built under R version 4.1.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Loading required package: dynlm
## Warning: package 'dynlm' was built under R version 4.1.3
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(dynlm)
library(MLmetrics)## Warning: package 'MLmetrics' was built under R version 4.1.3
##
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:dLagM':
##
## MAPE
## The following object is masked from 'package:base':
##
## Recall
library(lmtest)
library(car)## Warning: package 'car' was built under R version 4.1.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.1.3
library(readxl)## Warning: package 'readxl' was built under R version 4.1.3
Data
Rainfall Timeseries data(https://www.kaggle.com/datasets/poojag718/rainfall-timeseries-data) lahir atas dasar projek Prediction of Worldwide Energy Resources (POWER) menyediakan data meteorologi dari penelitian NASA untuk mendukung energi terbarukan. Data yang dikumpulkan oleh POWER ini adalah pengamatan yang dikumpulkan dalam frekuensi bulanan untuk lintang dan bujur tertentu dalam periode tahun 2000-2020. Data terdiri atas variabel-variabel diantaranya yaitu, Spesific Humidity, Relative Humidity, Temperature, Participation. Dalam tugas Regresi dengan peubah lag kali ini, saya menggunakan peubah Relative Humidity sebagai peubah respon dan Temperature sebagai peubah penjelas. Relative humidity secara umum mampu mewakili pengertian kelembaban dimana rasio antara tekanan uap air aktual pada temperatur tertentu dengan tekanan uap air jenuh pada temperatur tersebut (Fathulrohman dan Saepuloh, 2018). Kelembapan dipengaruhi oleh beberapa faktor, salah satunya yaitu temperature. Semakin meningkat kelembaban udara, semakin meningkat pula temperature dan sebaliknya semakin menurun kelembaban relatif udara maka temperature akan semakin menurun (Sandi et al.2017).
#IMPORT DATA
#membuka file data
data <- read_excel("D:/SEMESTER 5/METODE PERAMALAN DERET WAKTU/Canada_gold.xlsx", sheet = "Sheet3")
data$Y=as.numeric(data$Y)
data$X=as.numeric(data$X)
str(data)## tibble [252 x 3] (S3: tbl_df/tbl/data.frame)
## $ t: num [1:252] 1 2 3 4 5 6 7 8 9 10 ...
## $ Y: num [1:252] 48.2 50.8 42.9 55.7 70.9 ...
## $ X: num [1:252] 23.9 25.8 26.7 22.5 19.1 ...
#SPLIT DATA
train<-data[1:200,]
test<-data[201:252,]#data time series
train.ts<-ts(train)
test.ts<-ts(test)
data.ts<-ts(data)Dilakukan splitting data dengan dua kategori data train dan data test. Data train mempunyai proporsi jumlah data sebanyak 80% dari total amatan sedangkan data test 20% dari total amatan.
Eksplorasi Data Analisis
Plot Time Series
Time Series Plot Of Relative Humidity
data.ts<-ts(data$Y)
plot(data.ts, main = "Time Series Plot of Relative Humidity 2000-2020", xlab = "Period", ylab="Humidity")
points(data.ts) Berdasarkan plot time series diatas, terlihat bahwa peubah relative humidity atau kelembapan relatif mempunyai pola data yang stasioner.Peubah ini akan menjadi peubah respon yang akan dilakukan analisis regresi.
Time Series Plot Of Temperature
data.ts<-ts(data$X)
plot(data.ts, main = "Time Series Plot of Temperature 2000-2020", xlab = "Period", ylab="Temperature")
points(data.ts) Berdasarkan time series plot diatas, terlihat bahwa peubah temperature memiliki pola data stasioner. Peubah temperature akan menjadi peubah penjelass untuk analisis regresi.
Scatter Plot Peubah Relative Humidity (Y) dan Temperature (X)
cor(data$X,data$Y)## [1] -0.9508894
plot(data$X,data$Y,pch=20,col="red",main="Scatter Plot Peubah Relative Humidity (Y) dan Temperature (X) ") Berdasarkan scatter plot diatas terlihat hubungan antra peubah Relative Humidity (Y) dan Temperature (X) memiliki hubungan linier negatif dengan nilai korelasi -0.9508894.
Model Koyck
Model Koyck adalah model yang mengasumsikan bahwa koefesien dari variabel yang mengalami keterlambatan dapat menurun secara geometris (Gujarti,2006). Asumsi dasar dalam model ini adalah semakin jauh jarak lag pada peubah bebas dari periode sekarang maka semakin kecil pengaruh peubah lag terhadap variabel terbebas(Aqibah et al. 2020).
#MODEL KOYCK
model.koyck = dLagM::koyckDlm(x = train$X, y = train$Y)
summary(model.koyck)##
## Call:
## "Y ~ (Intercept) + Y.1 + X.t"
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.7651 -2.9602 -0.4924 2.8894 16.0041
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.95652 5.67217 15.330 < 2e-16 ***
## Y.1 0.22091 0.04817 4.586 8.05e-06 ***
## X.t -2.12551 0.15610 -13.616 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.292 on 196 degrees of freedom
## Multiple R-Squared: 0.9382, Adjusted R-squared: 0.9376
## Wald test: 1183 on 2 and 196 DF, p-value: < 2.2e-16
##
## Diagnostic tests:
## NULL
##
## alpha beta phi
## Geometric coefficients: 111.6134 -2.125506 0.2209134
Berdasarkan output diatas didapatkan intersep model (b0) sebesar 86.95652, nilai X.t sebesar -2.12551 dan nilai Yt sebesar 0.22091. Sehingga dapat disimupulkan bahwa pemodelan koyck yang dibentuk dari data rainfall antara peubah Relative Humidity (Y) dan Temperature (X) adalah Yt= 86.95652 -2.12551Xt + 0.22091Yt.
Berdasarkan output tersebut, semua peubah memiliki nilai p-value <0.05 yang mengindikasikan bahwa penduga parameter signifikan. Dari pengujian hipotesis baik,b0,Xt,Yt berhasil menolak H0 sehingga berpengaruh. Menurut model Koyck, temperature mempengaruhi nilai relative humidity.
AIC(model.koyck)## [1] 1149.5
BIC(model.koyck)## [1] 1162.673
#Ramalan
(fore.koyck <- forecast(model = model.koyck, x=test$X, h=52))## $forecasts
## [1] 89.95786 73.99036 64.19268 57.81974 48.76005 44.73942 38.62246 46.55960
## [9] 61.29986 74.94990 92.09999 92.67917 85.60165 72.05028 68.97158 66.39975
## [17] 56.79820 48.30058 47.78366 53.96096 62.91367 73.11714 90.39855 95.00269
## [25] 82.01272 68.66432 65.60920 54.73186 49.28944 40.24402 40.22248 44.78756
## [33] 57.69888 70.56230 88.98395 93.52115 93.37571 82.22718 76.10846 67.16869
## [41] 52.95087 45.58020 44.16447 49.76063 62.60215 75.79023 88.65102 95.19052
## [49] 88.38822 79.65878 68.52689 64.32480
##
## $call
## forecast.koyckDlm(model = model.koyck, x = test$X, h = 52)
##
## attr(,"class")
## [1] "forecast.koyckDlm" "dLagM"
Berdasarkan output diatas, terdapat 52 nilai ramalan dari metode Koyck.
#mape data testing
mape.koyck <- MAPE(fore.koyck$forecasts, test$Y)
mape.koyck## [1] 0.07165713
#akurasi data training
mape_train <- dLagM::GoF(model.koyck)["MAPE"]
c("MAPE_testing" = mape.koyck, "MAPE_taining" = mape_train)## $MAPE_testing
## [1] 0.07165713
##
## $MAPE_taining.MAPE
## [1] 0.05417177
Berdasarkan output daiatas, nilai MAPE Testing lebih besar dibandingkan dengan nilai MAPE Training. Nilai MAPE testing dan MAPE Training memiliki perbedaan yang tidak jauh, artinya bahwa model ini tidak underfitted atau overfitted.
Regression With Distributed Lag
Model Distribusi Lag adalah model regresi yang tidak hanya mencakup nilai sekarang tetapi nilai masa lalu (lag) dari variabel penjelas (Aqibah et.al. 2020). Kelebihan dari model ini adalah mampu membuat teori statis menjadi dinamis karena waktu diperhitungkan dan panjang beda kala nilai lag diketahui.
Lag = 2
#REGRESSION WITH DISTRIBUTED LAG=2 -> estimasi parameter menggunakan least square
model.dlm = dLagM::dlm(x = train$X,y = train$Y, q=2)
summary(model.dlm)##
## Call:
## lm(formula = model.formula, data = design)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.4695 -2.7333 -0.4025 2.4854 14.8152
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 111.84932 0.99179 112.775 <2e-16 ***
## x.t -2.11050 0.09694 -21.772 <2e-16 ***
## x.1 -0.32406 0.14654 -2.211 0.0282 *
## x.2 -0.30919 0.09717 -3.182 0.0017 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.245 on 194 degrees of freedom
## Multiple R-squared: 0.9399, Adjusted R-squared: 0.939
## F-statistic: 1012 on 3 and 194 DF, p-value: < 2.2e-16
##
## AIC and BIC values for the model:
## AIC BIC
## 1 1140.39 1156.831
Berdasarkan output diatas, semua nilai variable memiliki nilai p-value < 0.05 yang mempunyai arti bahwa penduga parameter signifikan. Dari pengujian hipotesis nilai b0,Xt,X1,X2 berhasil menolak H0 dengan begitu dapat disimpulkan bahwa menurut model distribusi lag, kadar relative humidity dipengaruhi oleh kadar temperature saat itu dan pada periode sebelumnya.
#Ramalan
(fore.dlm <- forecast(model = model.dlm, x=test$X, h=52))#meramalkan 52 periode ke depan## $forecasts
## [1] 91.42607 74.84058 65.52971 58.09767 48.94613 45.16234 38.54957 46.68153
## [9] 60.23222 73.88373 91.39234 91.87244 86.28462 72.81596 69.85568 66.22056
## [17] 56.95016 48.96622 48.03070 53.55761 62.24919 72.48892 89.76806 94.03663
## [25] 82.43431 70.00839 66.26768 54.59679 50.00782 40.27257 40.59740 44.29545
## [33] 57.09851 69.51846 88.24620 92.54216 93.74014 82.59526 77.10340 67.39448
## [41] 53.54931 46.37901 44.16425 49.44856 61.90369 74.81074 87.95422 94.64885
## [49] 88.47098 80.57592 69.13600 64.95096
##
## $call
## forecast.dlm(model = model.dlm, x = test$X, h = 52)
##
## attr(,"class")
## [1] "forecast.dlm" "dLagM"
Berdasarkan output diatas, terdapat 52 nilai ramalan dari metode distribusi lag.
#mape data testing
mape.dlm <- MAPE(fore.dlm$forecasts,test$Y)
#akurasi data training
mape_train <- GoF(model.dlm)["MAPE"]
c("MAPE_testing" = mape.dlm, "MAPE_training" = mape_train)## $MAPE_testing
## [1] 0.07190444
##
## $MAPE_training.MAPE
## [1] 0.05263041
Berdasarkan output diatas, nilai MAPE Testing lebih besar dibandingkan dengan nilai MAPE Training. Nilai MAPE Testing tidak memiliki perbedaan yang cukup jauh dengan MAPE training yang berarti bahwa model ini tidak mengalami underfitteed atau overfitted.
Regression with Distributed Lag Optimum
#Penentuan lag optimum
finiteDLMauto(formula = Y ~ X,
data = data.frame(train),q.min = 1,q.max = 100,
model.type = "dlm",error.type = "AIC", trace = TRUE)## q - k MASE AIC BIC GMRAE MBRAE R.Adj.Sq Ljung-Box
## 99 99 0.00000 -Inf -Inf 0.00000 0.00000 NaN NaN
## 100 100 0.00000 -Inf -Inf 0.00000 0.00000 NaN NaN
## 98 98 0.06291 404.3415 669.4638 0.05562 0.01897 0.92392 0.044030801
## 97 97 0.06425 406.8325 670.3054 0.06193 0.02323 0.96134 0.866125145
## 96 96 0.08103 451.1310 712.9257 0.07615 -0.11947 0.96032 0.515774252
## 95 95 0.12802 555.8383 815.9264 0.11194 -0.62853 0.91822 0.545159373
## 94 94 0.14366 572.4268 830.7804 0.12976 -0.15732 0.92307 0.004039401
## 93 93 0.16070 596.5121 853.1037 0.14416 -0.12138 0.91947 0.414746990
## 92 92 0.15949 604.1935 858.9960 0.14379 -0.06760 0.92691 0.802082039
## 91 91 0.16043 606.5549 859.5416 0.14617 -0.07045 0.93566 0.944241546
## 90 90 0.15981 608.9558 860.1005 0.14726 0.01935 0.94234 0.967561387
## 89 89 0.17127 623.4370 872.7138 0.16930 0.09768 0.94110 0.552512781
## 88 88 0.17900 639.8147 887.1981 0.17348 0.84015 0.93812 0.835503850
## 87 87 0.17790 641.3554 886.8203 0.17096 0.04912 0.94305 0.823357820
## 86 86 0.18121 648.9309 892.4525 0.15298 0.05370 0.94495 0.919430525
## 85 85 0.18286 650.9150 892.4691 0.17467 -0.09668 0.94835 0.843786509
## 84 84 0.19169 662.6083 902.1706 0.16003 0.28864 0.94714 0.595703416
## 83 83 0.19573 667.9474 905.4943 0.17634 -0.07280 0.94826 0.909997804
## 82 82 0.19513 672.3437 907.8519 0.18013 -0.16023 0.94962 0.681149156
## 81 81 0.19606 679.5256 912.9720 0.18271 -0.19566 0.94978 0.458949496
## 80 80 0.19737 687.5201 918.8819 0.16455 -0.38901 0.95004 0.391677517
## 79 79 0.19952 690.6276 919.8824 0.17482 -0.46075 0.95223 0.285570255
## 78 78 0.20121 694.3974 921.5231 0.17757 -0.16770 0.95392 0.295308594
## 77 77 0.20601 702.1846 927.1593 0.18653 1.12945 0.95351 0.521075690
## 76 76 0.20271 703.6714 926.4736 0.18628 -0.75222 0.95516 0.484044428
## 75 75 0.20956 717.1313 937.7397 0.17986 -0.46996 0.95246 0.502939819
## 74 74 0.20947 722.2274 940.6211 0.16471 -4.40891 0.95317 0.437131349
## 73 73 0.22385 735.8994 952.0576 0.17262 -0.73433 0.95122 0.215724760
## 72 72 0.22675 740.3245 954.2268 0.18409 0.06237 0.95203 0.449925370
## 71 71 0.22709 745.9739 957.6000 0.20445 0.18475 0.95200 0.429737906
## 70 70 0.22786 749.4266 958.7566 0.20127 1.13497 0.95264 0.440130546
## 69 69 0.22927 756.9938 964.0080 0.19592 0.86732 0.95184 0.585897975
## 68 68 0.22832 759.4563 964.1352 0.19805 -0.00122 0.95350 0.474346420
## 67 67 0.22931 761.4573 963.7818 0.19213 1.65029 0.95509 0.477129917
## 66 66 0.23128 764.1844 964.1353 0.19435 0.06490 0.95638 0.455427225
## 65 65 0.23694 772.2177 969.7764 0.21821 0.01603 0.95536 0.546926212
## 64 64 0.23494 775.9680 971.1159 0.20149 0.00383 0.95573 0.732571064
## 63 63 0.23848 781.6536 974.3724 0.20131 -0.05881 0.95580 0.640049673
## 62 62 0.24204 787.8169 978.0884 0.23385 0.07251 0.95569 0.777258444
## 61 61 0.24468 794.1908 981.9971 0.24579 0.31132 0.95557 0.948236476
## 60 60 0.25260 798.6188 983.9423 0.27973 0.19810 0.95593 0.903833832
## 59 59 0.25583 805.1414 987.9645 0.25870 0.29126 0.95543 0.808011613
## 58 58 0.25790 808.6857 988.9911 0.26820 0.35954 0.95568 0.608182200
## 57 57 0.25616 810.6163 988.3870 0.26637 0.25063 0.95649 0.596121770
## 56 56 0.25351 812.9417 988.1607 0.26359 1.13121 0.95745 0.558428174
## 55 55 0.26177 820.6739 993.3244 0.25878 -0.46064 0.95693 0.671928726
## 54 54 0.26130 822.7472 992.8128 0.26904 2.00340 0.95791 0.736197214
## 53 53 0.26496 829.4771 996.9413 0.26891 0.57629 0.95733 0.741858658
## 52 52 0.26846 836.8154 1001.6621 0.28304 0.09338 0.95640 0.414491218
## 51 51 0.26779 840.9390 1003.1521 0.25872 0.14330 0.95649 0.371545833
## 50 50 0.27610 850.5082 1010.0719 0.29193 -0.65266 0.95582 0.458810941
## 49 49 0.28214 855.3814 1012.2800 0.29603 -0.09878 0.95639 0.285971003
## 48 48 0.27908 857.3687 1011.5866 0.30028 -0.08972 0.95719 0.280583217
## 47 47 0.28183 868.1032 1019.6251 0.30744 0.44198 0.95537 0.364398652
## 46 46 0.27845 875.2136 1024.0243 0.27713 -11.13125 0.95444 0.176977141
## 45 45 0.28351 881.4553 1027.5397 0.29816 0.04371 0.95384 0.085641217
## 44 44 0.28554 885.1429 1028.4861 0.30098 0.50906 0.95438 0.054303049
## 43 43 0.28535 889.2133 1029.8006 0.30142 -0.61499 0.95481 0.084485486
## 42 42 0.28705 891.7398 1029.5566 0.30535 0.51723 0.95566 0.091500747
## 41 41 0.29329 899.7898 1034.8215 0.31942 0.06295 0.95461 0.069499734
## 40 40 0.29168 903.7454 1035.9779 0.32162 -0.04141 0.95466 0.130050399
## 39 39 0.29124 907.2480 1036.6670 0.32271 0.29586 0.95497 0.111876680
## 38 38 0.28943 909.5675 1036.1590 0.31714 -0.63254 0.95599 0.115898995
## 37 37 0.28948 913.0390 1036.7890 0.31004 0.88968 0.95642 0.127650471
## 36 36 0.29503 917.9208 1038.8156 0.32729 -0.53177 0.95664 0.146471154
## 35 35 0.29569 922.2787 1040.3047 0.31530 -0.08969 0.95677 0.121145709
## 34 34 0.29980 934.5661 1049.7097 0.30637 0.00020 0.95457 0.077990375
## 33 33 0.29746 937.0883 1049.3360 0.30485 0.28218 0.95492 0.061389144
## 32 32 0.29836 940.5244 1049.8632 0.32087 -0.30597 0.95531 0.069580284
## 31 31 0.30271 944.6566 1051.0732 0.34104 -0.07817 0.95565 0.054924923
## 30 30 0.30387 947.5760 1051.0573 0.34577 -0.08019 0.95612 0.055419575
## 29 29 0.30985 952.7160 1053.2493 0.34744 -0.21359 0.95583 0.071100752
## 28 28 0.30634 956.0946 1053.6669 0.34094 0.00605 0.95593 0.061112765
## 27 27 0.30499 958.4654 1053.0642 0.33917 -0.00958 0.95651 0.059689486
## 26 26 0.30482 961.0883 1052.7009 0.33039 -0.01809 0.95724 0.056912104
## 25 25 0.30790 964.4481 1053.0621 0.33446 0.01134 0.95793 0.053729208
## 24 24 0.30561 966.7301 1052.3331 0.34305 -0.16378 0.95844 0.053785584
## 23 23 0.30801 974.1348 1056.7147 0.33447 0.01217 0.95761 0.073955379
## 22 22 0.31302 982.3828 1061.9274 0.31734 -0.49668 0.95647 0.055568155
## 21 21 0.31059 985.5771 1062.0744 0.32892 0.02589 0.95670 0.062427302
## 20 20 0.31024 988.3185 1061.7565 0.32588 0.06442 0.95723 0.054070990
## 19 19 0.31755 996.8900 1067.2569 0.31752 -0.05356 0.95648 0.073264592
## 18 18 0.31826 999.9084 1067.1925 0.32943 0.19693 0.95698 0.082857649
## 17 17 0.31842 1002.6763 1066.8660 0.32667 0.14613 0.95732 0.079226243
## 16 16 0.31747 1006.7889 1067.8727 0.32071 0.11291 0.95720 0.089036481
## 15 15 0.31718 1009.8947 1067.8611 0.32572 0.53726 0.95753 0.080503839
## 14 14 0.31980 1016.3441 1071.1818 0.32290 0.60169 0.95695 0.135928872
## 13 13 0.32053 1020.2282 1071.9260 0.32732 0.27542 0.95737 0.176712625
## 12 12 0.32164 1023.7866 1072.3332 0.33010 0.34946 0.95770 0.146389513
## 11 11 0.32850 1038.3030 1083.6874 0.31636 0.12028 0.95555 0.111604186
## 10 10 0.33187 1045.6245 1087.8358 0.33992 0.10313 0.95465 0.096762378
## 9 9 0.33940 1060.6102 1099.6375 0.34186 0.28623 0.95195 0.069082195
## 8 8 0.33783 1067.3949 1103.2273 0.33225 0.06007 0.95144 0.021074288
## 7 7 0.33966 1076.9633 1109.5902 0.33031 -0.45994 0.95031 0.080311921
## 6 6 0.34173 1081.7896 1111.2003 0.34515 -0.11227 0.95038 0.071510415
## 5 5 0.35214 1096.8834 1123.0674 0.34737 -0.00247 0.94761 0.114927430
## 4 4 0.36921 1122.3704 1145.3172 0.36891 -1.64344 0.94144 0.064068947
## 3 3 0.38104 1133.5746 1153.2738 0.39168 0.12835 0.93931 0.022010554
## 2 2 0.38334 1140.3896 1156.8309 0.40286 -2.07541 0.93899 0.022635493
## 1 1 0.40564 1156.2136 1169.3868 0.44181 -0.08924 0.93547 0.010367535
finiteDLMauto## function (formula, data, x, y, q.min = 1, q.max = 10, k.order = NULL,
## model.type = c("dlm", "poly"), error.type = c("MASE", "AIC",
## "BIC", "GMRAE", "MBRAE", "radj"), trace = FALSE)
## UseMethod("finiteDLMauto")
## <bytecode: 0x0000000024390600>
## <environment: namespace:dLagM>
Berdasarkan output diatas, 98 merupakan lag optimum bagi model
#model dlm dengan lag optimum
model.dlm2 = dLagM::dlm(x = train$X,y = train$Y, q= 98)
summary(model.dlm2)##
## Call:
## lm(formula = model.formula, data = design)
##
## Residuals:
## 1 2 3 4 5 6 7
## 0.1636657 0.6632622 -0.6562336 1.5049513 1.0433059 0.3335745 0.2919524
## 8 9 10 11 12 13 14
## 0.3091465 -0.0143676 0.1649474 -0.8235862 -1.5673230 -0.7924073 -0.8505658
## 15 16 17 18 19 20 21
## -1.0809291 -0.9329250 -0.3792062 0.0129346 0.2973160 0.6197994 0.2732358
## 22 23 24 25 26 27 28
## 0.6297693 0.8989078 0.8490823 0.0597891 0.3032690 0.1905353 0.6505340
## 29 30 31 32 33 34 35
## -0.1198680 -1.2126539 -0.1223671 -0.3088657 -0.6820348 -0.9322031 0.1373285
## 36 37 38 39 40 41 42
## -0.6685456 0.4675113 0.1732994 -1.0473314 -0.6554849 -0.3220342 0.3605649
## 43 44 45 46 47 48 49
## 0.8243481 -0.2628220 0.0104624 0.0984804 0.6288886 -0.2741534 0.1738974
## 50 51 52 53 54 55 56
## 0.2335006 -0.2019355 0.3943774 -0.6481492 0.8160190 -0.1906406 -0.5297615
## 57 58 59 60 61 62 63
## 0.0598337 -1.0683141 -0.0007629 -0.9312764 -0.3766435 -0.1711415 -0.5869109
## 64 65 66 67 68 69 70
## 0.1771825 0.1738813 0.5204170 -0.3043451 0.7561255 -0.2424952 0.4424587
## 71 72 73 74 75 76 77
## 0.8877144 0.2473953 0.7950066 0.4225305 0.4234374 -0.4745669 -0.2689798
## 78 79 80 81 82 83 84
## -0.0411868 -1.0637456 0.0567544 -0.4915377 -0.6099862 0.4000099 -0.6617855
## 85 86 87 88 89 90 91
## 0.0495255 0.0871999 -0.1401397 1.6607363 0.4870670 0.6566350 0.0368729
## 92 93 94 95 96 97 98
## 0.5181272 0.2956907 0.3256770 0.1711096 0.9610794 -0.0043906 0.3919533
## 99 100 101 102
## 1.1169757 -1.1567424 0.3671212 -2.1958288
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 270.925909 548.985441 0.494 0.671
## x.t -0.946178 1.301625 -0.727 0.543
## x.1 -0.875632 0.713953 -1.226 0.345
## x.2 -0.635266 0.690505 -0.920 0.455
## x.3 0.215493 0.758290 0.284 0.803
## x.4 -0.258113 0.627270 -0.411 0.721
## x.5 0.087020 0.507313 0.172 0.880
## x.6 0.259048 0.507609 0.510 0.661
## x.7 0.366376 0.542021 0.676 0.569
## x.8 -0.268295 0.578605 -0.464 0.688
## x.9 -0.056728 0.745598 -0.076 0.946
## x.10 0.481963 0.652149 0.739 0.537
## x.11 0.380638 0.662654 0.574 0.624
## x.12 -0.686711 1.169746 -0.587 0.617
## x.13 -0.364030 1.111769 -0.327 0.774
## x.14 -0.024594 1.110903 -0.022 0.984
## x.15 0.153678 1.083895 0.142 0.900
## x.16 -0.679420 1.225409 -0.554 0.635
## x.17 -0.107173 1.194382 -0.090 0.937
## x.18 -0.349935 0.976629 -0.358 0.754
## x.19 -1.208339 1.241638 -0.973 0.433
## x.20 0.450466 1.122757 0.401 0.727
## x.21 -0.547345 0.772400 -0.709 0.552
## x.22 0.062141 0.877081 0.071 0.950
## x.23 0.359851 0.749889 0.480 0.679
## x.24 -0.220678 0.638109 -0.346 0.762
## x.25 0.006736 0.697513 0.010 0.993
## x.26 -0.246953 0.726352 -0.340 0.766
## x.27 -0.479222 0.687148 -0.697 0.558
## x.28 -0.423826 0.821357 -0.516 0.657
## x.29 0.003736 1.208283 0.003 0.998
## x.30 -0.104945 1.108836 -0.095 0.933
## x.31 -0.969312 1.133952 -0.855 0.483
## x.32 0.009542 1.514016 0.006 0.996
## x.33 -0.116857 1.294566 -0.090 0.936
## x.34 -0.328441 1.265986 -0.259 0.820
## x.35 -0.781334 1.433270 -0.545 0.640
## x.36 0.034004 1.558577 0.022 0.985
## x.37 -0.258298 1.406577 -0.184 0.871
## x.38 -0.054554 1.487792 -0.037 0.974
## x.39 0.419456 1.448619 0.290 0.799
## x.40 -0.550340 1.207132 -0.456 0.693
## x.41 -0.347577 1.039171 -0.334 0.770
## x.42 -0.547124 0.976220 -0.560 0.632
## x.43 -0.753020 1.100996 -0.684 0.565
## x.44 0.665455 0.877976 0.758 0.528
## x.45 -0.579823 0.755216 -0.768 0.523
## x.46 -0.614261 0.837428 -0.734 0.540
## x.47 -0.578395 0.638947 -0.905 0.461
## x.48 -0.626972 0.677545 -0.925 0.452
## x.49 -0.313206 0.678813 -0.461 0.690
## x.50 0.111026 0.718143 0.155 0.891
## x.51 0.086298 0.710935 0.121 0.914
## x.52 -0.195950 0.762582 -0.257 0.821
## x.53 0.351154 0.788562 0.445 0.700
## x.54 -0.468520 0.687967 -0.681 0.566
## x.55 -1.132611 1.080731 -1.048 0.405
## x.56 0.345392 1.089251 0.317 0.781
## x.57 0.325984 0.938912 0.347 0.762
## x.58 -0.553244 1.035166 -0.534 0.646
## x.59 -0.817355 1.491165 -0.548 0.639
## x.60 0.435653 1.081626 0.403 0.726
## x.61 -0.213082 0.808374 -0.264 0.817
## x.62 -0.837259 0.970671 -0.863 0.479
## x.63 0.033780 0.898856 0.038 0.973
## x.64 -0.172696 0.742690 -0.233 0.838
## x.65 -0.166053 0.857687 -0.194 0.864
## x.66 0.496125 0.775708 0.640 0.588
## x.67 0.241845 0.623435 0.388 0.735
## x.68 -0.110256 0.623215 -0.177 0.876
## x.69 0.167774 0.564983 0.297 0.795
## x.70 -0.394580 0.606191 -0.651 0.582
## x.71 0.234638 0.829998 0.283 0.804
## x.72 -0.108386 0.844275 -0.128 0.910
## x.73 -0.619559 0.633001 -0.979 0.431
## x.74 -0.187393 0.623721 -0.300 0.792
## x.75 0.877836 0.776354 1.131 0.376
## x.76 -0.647862 0.571941 -1.133 0.375
## x.77 0.031502 0.552818 0.057 0.960
## x.78 0.647138 0.541666 1.195 0.355
## x.79 0.009380 0.691814 0.014 0.990
## x.80 -0.149421 0.840479 -0.178 0.875
## x.81 0.101372 0.696459 0.146 0.898
## x.82 -0.555780 0.899478 -0.618 0.600
## x.83 0.352163 1.058226 0.333 0.771
## x.84 -0.344799 0.781702 -0.441 0.702
## x.85 -0.176775 0.680119 -0.260 0.819
## x.86 0.122881 0.704683 0.174 0.878
## x.87 0.008966 0.680734 0.013 0.991
## x.88 -0.264745 0.822862 -0.322 0.778
## x.89 0.164676 0.753854 0.218 0.847
## x.90 0.886672 1.282756 0.691 0.561
## x.91 -0.211366 1.494580 -0.141 0.900
## x.92 -0.075226 0.918824 -0.082 0.942
## x.93 0.196843 0.984065 0.200 0.860
## x.94 0.145025 1.433562 0.101 0.929
## x.95 -0.183836 0.917299 -0.200 0.860
## x.96 1.036672 0.676876 1.532 0.265
## x.97 0.578385 0.739739 0.782 0.516
## x.98 -0.114442 0.705273 -0.162 0.886
##
## Residual standard error: 4.659 on 2 degrees of freedom
## Multiple R-squared: 0.9985, Adjusted R-squared: 0.9239
## F-statistic: 13.39 on 99 and 2 DF, p-value: 0.07191
##
## AIC and BIC values for the model:
## AIC BIC
## 1 404.3415 669.4638
Berdasarkan output diatas, didapatkan nilai intersep model b0 sebesar 270.925909, nilai Xt sebesar -0.946178 dst. Sehingga dapat disimpulkan bahwa pemodelan distribusi lag yang dibentuk dari data rainfall dengan peubah relative humidity dan temperature adalah sebagai berikut: Yt = (270.925909 -0.946178Xt,1 -0.875632Xt-1,1 …-0.114442xt-98,1 )
#ramalan
(fore.dlm2 <- forecast(model = model.dlm2, x=test$X, h=52))## $forecasts
## [1] 81.83019 66.61952 81.50079 55.82707 37.94272 41.84302 41.84890
## [8] 36.69681 45.98685 76.54465 78.24101 88.64021 101.24686 69.34788
## [15] 68.29671 55.86380 48.81404 46.37438 37.17842 34.71320 53.64905
## [22] 74.02093 65.62039 83.73571 89.09567 49.88711 61.30218 55.06551
## [29] 41.09800 30.29716 31.33674 44.02340 46.99753 56.77869 72.55642
## [36] 101.27135 90.15921 60.35777 71.92563 70.20807 46.35260 45.85970
## [43] 51.92533 38.58187 38.61857 75.97877 72.58423 73.63384 87.72526
## [50] 73.74997 64.72626 59.26891
##
## $call
## forecast.dlm(model = model.dlm2, x = test$X, h = 52)
##
## attr(,"class")
## [1] "forecast.dlm" "dLagM"
Berdasarkan output daiatas, terdapat 52 nilai ramalan dari metode Regression with Distributed Lag Optimum.
#akurasi testing
mape.dlm2 <- MAPE(fore.dlm2$forecast, test$Y)
#akurasi data training
mape_train <- GoF(model.dlm2)["MAPE"]
c("MAPE_testing" = mape.dlm2,"MAPE_training" = mape_train)## $MAPE_testing
## [1] 0.1527344
##
## $MAPE_training.MAPE
## [1] 0.00796936
Berdasarkan output diatasm nilai MAPE Testing jauh lebih besar dibandingkan dengan nilai MAPE training, oleh karena itu patut diduga bahwa model ini mengalamai underfitted atau overfitted.
Model Autoregressive/Dynamic Regression
Model Autoregressive adalah model regresi time series yang menghubungkan nilai pengamatan aktual dengan nilai pengamatan sebelumnya (Gujarati, 2006). Asumsi dasar dalam model ini adalah meregresikan pengamatan aktual dengan nilai pengamatan sebelumnya untuk peramalan nilai ke depan.
#MODEL AUTOREGRESSIVE
model.ardl = ardlDlm(x = train$X, y = train$Y, p =1, q =1)
summary(model.ardl)##
## Time series regression with "ts" data:
## Start = 2, End = 200
##
## Call:
## dynlm(formula = as.formula(model.text), data = data, start = 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.3078 -2.7272 -0.4197 2.6712 14.4046
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 87.84095 6.34303 13.848 < 2e-16 ***
## X.t -1.94158 0.07727 -25.126 < 2e-16 ***
## X.1 -0.18178 0.17054 -1.066 0.287769
## Y.1 0.20742 0.05855 3.543 0.000496 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.242 on 195 degrees of freedom
## Multiple R-squared: 0.94, Adjusted R-squared: 0.9391
## F-statistic: 1018 on 3 and 195 DF, p-value: < 2.2e-16
AIC(model.ardl)## [1] 1145.801
BIC(model.ardl)## [1] 1162.268
#ramalan
(fore.ardl <- forecast(model = model.ardl, x=test$X,h=52))## $forecasts
## [1] 90.03334 75.06064 64.87664 58.38366 49.68724 45.38448 39.54301 46.36887
## [9] 60.44216 73.96631 90.57196 92.29343 85.79405 72.87917 69.09741 66.57770
## [17] 57.64155 49.19067 48.13502 53.77947 62.41978 72.37487 88.87026 94.29537
## [25] 82.69292 69.51636 65.78996 55.68835 49.94402 41.32813 40.67588 44.88405
## [33] 57.02060 69.70083 87.41899 92.85377 92.97260 82.74463 76.33286 67.75881
## [41] 54.14788 46.41384 44.64203 49.69029 61.84380 74.81275 87.47469 94.33017
## [49] 88.53512 80.02641 69.23640 64.61908
##
## $call
## forecast.ardlDlm(model = model.ardl, x = test$X, h = 52)
##
## attr(,"class")
## [1] "forecast.ardlDlm" "dLagM"
Berdasarkan output diatas, terdapat 52 nilai ramalan dari model autoregresive.
#Akurasi testing
mape.ardl <- MAPE(fore.ardl$forecasts, test$Y)
#Akurasi data training
mape_train <- GoF(model.ardl)["MAPE"]
c("MAPE_testing" = mape.ardl, "MAPE_training" = mape_train) ## $MAPE_testing
## [1] 0.07211403
##
## $MAPE_training.MAPE
## [1] 0.05330417
Berdasarkan output daiatas, nilai MAPE Testing lebih besar dibandingkan dengan nilai MAPE Training. Nilai MAPE testing dan MAPE Training memiliki perbedaan yang tidak jauh, artinya bahwa model ini tidak underfitted atau overfitted.
#penentuan lag optimum
ardlBoundOrders(data = data.frame(data), formula = Y ~ X)## $p
## X
## 1 15
##
## $q
## [1] 3
##
## $Stat.table
## q = 1 q = 2 q = 3 q = 4 q = 5 q = 6 q = 7 q = 8
## p = 1 1452.279 1437.827 1419.795 1407.055 1401.118 1395.820 1392.080 1377.102
## p = 2 1445.023 1439.827 1421.574 1408.829 1403.085 1397.818 1394.056 1379.084
## p = 3 1432.718 1432.718 1422.325 1408.841 1403.629 1399.050 1395.260 1380.400
## p = 4 1407.269 1408.976 1408.976 1410.293 1405.297 1400.344 1396.583 1382.082
## p = 5 1404.612 1405.698 1404.275 1404.275 1405.976 1401.287 1397.490 1383.960
## p = 6 1400.834 1401.973 1400.504 1402.424 1402.424 1403.255 1399.432 1385.850
## p = 7 1392.183 1393.408 1392.345 1394.188 1395.774 1395.774 1394.827 1379.424
## p = 8 1383.811 1385.357 1384.999 1386.892 1388.750 1388.984 1388.984 1381.356
## p = 9 1368.894 1370.274 1369.932 1371.328 1373.222 1373.131 1374.904 1374.904
## p = 10 1364.227 1365.894 1364.851 1366.301 1367.791 1368.403 1370.400 1367.795
## p = 11 1352.082 1353.699 1351.252 1352.630 1353.999 1355.285 1357.217 1353.192
## p = 12 1347.558 1349.094 1346.762 1348.312 1349.545 1350.947 1352.805 1348.921
## p = 13 1341.704 1343.409 1341.704 1343.410 1344.958 1346.145 1348.094 1344.663
## p = 14 1334.147 1336.092 1334.482 1336.049 1337.496 1338.661 1340.615 1337.790
## p = 15 1330.108 1332.003 1329.027 1330.635 1331.994 1333.113 1335.111 1331.943
## q = 9 q = 10 q = 11 q = 12 q = 13 q = 14 q = 15
## p = 1 1371.651 1367.293 1354.665 1345.949 1340.861 1336.112 1329.035
## p = 2 1373.643 1369.255 1356.617 1347.667 1342.348 1337.886 1330.550
## p = 3 1374.863 1370.490 1357.394 1348.415 1343.009 1338.570 1329.994
## p = 4 1376.601 1372.324 1359.248 1350.153 1344.773 1340.377 1331.981
## p = 5 1378.548 1374.064 1361.163 1352.128 1346.768 1342.366 1333.980
## p = 6 1380.069 1375.629 1363.163 1354.122 1348.768 1344.340 1335.954
## p = 7 1375.079 1369.918 1356.574 1348.349 1343.311 1338.688 1330.426
## p = 8 1376.887 1371.548 1357.472 1349.007 1343.334 1338.363 1330.259
## p = 9 1376.808 1371.688 1358.405 1350.496 1345.005 1339.593 1331.449
## p = 10 1367.795 1368.218 1355.521 1348.396 1343.962 1338.000 1330.526
## p = 11 1354.255 1354.255 1355.435 1349.157 1344.185 1339.012 1331.405
## p = 12 1350.379 1351.238 1351.238 1351.065 1346.128 1341.012 1333.271
## p = 13 1345.882 1347.463 1346.484 1346.484 1348.068 1342.905 1335.271
## p = 14 1339.499 1340.915 1340.573 1340.825 1340.825 1342.711 1335.249
## p = 15 1333.297 1335.113 1334.394 1334.640 1336.639 1336.639 1336.784
##
## $min.Stat
## [1] 1329.027
#PEMODELAN DLM dan ARDL dengan library dynlm
#sama dengan model dlm p=1
cons_lm1 <- dynlm(Y ~ X+L(X),data = train.ts)
#sama dengan model ardl p=0 q=3
cons_lm2 <- dynlm(Y ~ X+L(Y),data = train.ts)
#sama dengan ardl p=1 q=3
cons_lm3 <- dynlm(Y ~ X+L(X)+L(Y),data = train.ts)
#sama dengan dlm p=2
cons_lm4 <- dynlm(Y ~ X+L(X)+L(X,2),data = train.ts)#Ringkasan Model
summary(cons_lm1)##
## Time series regression with "ts" data:
## Start = 2, End = 200
##
## Call:
## dynlm(formula = Y ~ X + L(X), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.4820 -2.8133 -0.3813 2.5190 13.4948
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 110.11187 0.86952 126.636 <2e-16 ***
## X -1.91508 0.07914 -24.197 <2e-16 ***
## L(X) -0.72059 0.07939 -9.077 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.365 on 196 degrees of freedom
## Multiple R-squared: 0.9361, Adjusted R-squared: 0.9355
## F-statistic: 1436 on 2 and 196 DF, p-value: < 2.2e-16
summary(cons_lm2)##
## Time series regression with "ts" data:
## Start = 2, End = 200
##
## Call:
## dynlm(formula = Y ~ X + L(Y), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.1889 -2.6591 -0.5487 2.7397 15.0636
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 81.74053 2.73606 29.875 <2e-16 ***
## X -1.97847 0.06912 -28.626 <2e-16 ***
## L(Y) 0.26308 0.02650 9.929 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.243 on 196 degrees of freedom
## Multiple R-squared: 0.9396, Adjusted R-squared: 0.939
## F-statistic: 1525 on 2 and 196 DF, p-value: < 2.2e-16
summary(cons_lm3)##
## Time series regression with "ts" data:
## Start = 2, End = 200
##
## Call:
## dynlm(formula = Y ~ X + L(X) + L(Y), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.3078 -2.7272 -0.4197 2.6712 14.4046
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 87.84095 6.34303 13.848 < 2e-16 ***
## X -1.94158 0.07727 -25.126 < 2e-16 ***
## L(X) -0.18178 0.17054 -1.066 0.287769
## L(Y) 0.20742 0.05855 3.543 0.000496 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.242 on 195 degrees of freedom
## Multiple R-squared: 0.94, Adjusted R-squared: 0.9391
## F-statistic: 1018 on 3 and 195 DF, p-value: < 2.2e-16
summary(cons_lm4)##
## Time series regression with "ts" data:
## Start = 3, End = 200
##
## Call:
## dynlm(formula = Y ~ X + L(X) + L(X, 2), data = train.ts)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.4695 -2.7333 -0.4025 2.4854 14.8152
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 111.84932 0.99179 112.775 <2e-16 ***
## X -2.11050 0.09694 -21.772 <2e-16 ***
## L(X) -0.32406 0.14654 -2.211 0.0282 *
## L(X, 2) -0.30919 0.09717 -3.182 0.0017 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.245 on 194 degrees of freedom
## Multiple R-squared: 0.9399, Adjusted R-squared: 0.939
## F-statistic: 1012 on 3 and 194 DF, p-value: < 2.2e-16
#SSE
deviance(cons_lm1)## [1] 3734.411
deviance(cons_lm2)## [1] 3529.038
deviance(cons_lm3)## [1] 3508.594
deviance(cons_lm4)## [1] 3496.187
Uji Diagnostik Model
Uji Non Autokorelasi
#Uji Model
if(require("lmtest"))encomptest(cons_lm1, cons_lm2)## Encompassing test
##
## Model 1: Y ~ X + L(X)
## Model 2: Y ~ X + L(Y)
## Model E: Y ~ X + L(X) + L(Y)
## Res.Df Df F Pr(>F)
## M1 vs. ME 195 -1 12.5504 0.0004956 ***
## M2 vs. ME 195 -1 1.1362 0.2877693
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Diagnostik
#durbin watson
dwtest(cons_lm1)##
## Durbin-Watson test
##
## data: cons_lm1
## DW = 1.6193, p-value = 0.002647
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(cons_lm2)##
## Durbin-Watson test
##
## data: cons_lm2
## DW = 2.0435, p-value = 0.5793
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(cons_lm3)##
## Durbin-Watson test
##
## data: cons_lm3
## DW = 1.9418, p-value = 0.3021
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(cons_lm4)##
## Durbin-Watson test
##
## data: cons_lm4
## DW = 1.6734, p-value = 0.008721
## alternative hypothesis: true autocorrelation is greater than 0
Uji Heterogenitas
#heterogenitas
bptest(cons_lm1)##
## studentized Breusch-Pagan test
##
## data: cons_lm1
## BP = 4.2101, df = 2, p-value = 0.1218
bptest(cons_lm2)##
## studentized Breusch-Pagan test
##
## data: cons_lm2
## BP = 6.7886, df = 2, p-value = 0.03356
bptest(cons_lm3)##
## studentized Breusch-Pagan test
##
## data: cons_lm3
## BP = 7.7844, df = 3, p-value = 0.05068
bptest(cons_lm4)##
## studentized Breusch-Pagan test
##
## data: cons_lm4
## BP = 8.0893, df = 3, p-value = 0.0442
Uji Normalitas
#shapiro wilk
shapiro.test(residuals(cons_lm1))##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm1)
## W = 0.98933, p-value = 0.145
shapiro.test(residuals(cons_lm2))##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm2)
## W = 0.98127, p-value = 0.009309
shapiro.test(residuals(cons_lm3))##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm3)
## W = 0.98133, p-value = 0.009466
shapiro.test(residuals(cons_lm4))##
## Shapiro-Wilk normality test
##
## data: residuals(cons_lm4)
## W = 0.97646, p-value = 0.00206
#Perbandingan
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.07165713
## DLM 1 0.07190444
## DLM 2 0.15273441
## Autoregressive 0.07211403
plot(ts(test$X), ts(test$Y), type="b", col="black")
points(test$X, fore.koyck$forecasts,col="red")#Plot
par(mfrow=c(1,1))
plot(test$X, test$Y, type="b", col="black")
points(test$X, fore.koyck$forecasts,col="red")
points(test$X, fore.dlm$forecasts,col="blue")
points(test$X, fore.dlm2$forecasts,col="orange")
points(test$X, 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)