library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(TTR)
## Warning: package 'TTR' was built under R version 4.3.3
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(orcutt)
## Warning: package 'orcutt' was built under R version 4.3.3
library(HoRM)
## Warning: package 'HoRM' was built under R version 4.3.3
Data yang digunakan dalam analisis ini adalah data GDP Negara Luxembourg periode 1978-2000.
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
dt <- read_excel("C:/Users/asus/Documents/Semester 5/MPDW/pertemuan 2/API_NY.GDP.MKTP.CD_DS2_en_excel_v2_3401502.xls", sheet = "Luxembourg")
dt
## # A tibble: 64 × 2
## Tahun GDP
## <chr> <dbl>
## 1 1960 709941874
## 2 1961 710163719.
## 3 1962 747846862.
## 4 1963 797902154.
## 5 1964 910877686.
## 6 1965 929477285.
## 7 1966 976717016.
## 8 1967 983052315.
## 9 1968 1075561623
## 10 1969 1245432991
## # ℹ 54 more rows
Serikut plot time-series dari GDP Luxembourg periode 1978-2000.
ts <- ts(dt$GDP)
ts
## Time Series:
## Start = 1
## End = 64
## Frequency = 1
## [1] 709941874 710163719 747846862 797902154 910877686 929477285
## [7] 976717016 983052315 1075561623 1245432991 1457768455 1518773421
## [13] 1901697370 2609875802 3183637117 3123333333 3423586207 3789321328
## [19] 4718539772 5516982664 6019805490 5053665797 4602316793 4524217751
## [25] 4438435493 4577211767 6685595088 8320902215 9418167855 10037674038
## [31] 12778792854 13834219728 15518702635 15925521222 17701798891 20853093870
## [37] 20895314658 19563836265 20150053345 21899317599 21230182989 21387533703
## [43] 23649833332 29667268248 35064843793 37672280120 42910146296 51587401416
## [49] 58844277702 54467289898 56213985987 61696281326 59776383527 65203276467
## [55] 68804811898 60071584216 62216885436 65712180343 71000359760 69890505324
## [61] 73699366700 85584105994 81641807866 85755006124
#Membuat plot time series
ts.plot(ts, xlab="Time Period ", ylab="GDP", main= "Time Series Plot of GDP")
points(ts)
Selanjutnya akan dilakukan ramalan dan pemulusan dengan metode DMA dan DES karena terlihat pada plot di atas menunjukkan adanya trend.
dt.sma <- SMA(ts, n=3)
dma <- SMA(dt.sma, n = 3)
At <- 2*dt.sma - dma
Bt <- 2/(3-1)*(dt.sma - dma)
dt.dma<- At+Bt
dt.ramal<- c(NA, dt.dma)
t = 1:5
f = c()
for (i in t) {
f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}
summary(ts)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.099e+08 3.364e+09 1.468e+10 2.542e+10 5.231e+10 8.576e+10
dt.gab <- cbind(aktual = c(ts,rep(NA,5)),
pemulusan1 = c(dt.sma,rep(NA,5)),
pemulusan2 = c(dt.dma, rep(NA,5)),
At = c(At, rep(NA,5)),
Bt = c(Bt,rep(NA,5)),
ramalan = c(dt.ramal, f[-1]))
dt.gab
## aktual pemulusan1 pemulusan2 At Bt ramalan
## [1,] 709941874 NA NA NA NA NA
## [2,] 710163719 NA NA NA NA NA
## [3,] 747846862 722650819 NA NA NA NA
## [4,] 797902154 751970912 NA NA NA NA
## [5,] 910877686 818875568 927628504 873252036 54376468 NA
## [6,] 929477285 879419042 1004746778 942082910 62663868 927628504
## [7,] 976717016 939023996 1058859583 998941789 59917794 1004746778
## [8,] 983052315 963082205 1034896454 998989329 35907124 1058859583
## [9,] 1075561623 1011776984 1092742163 1052259574 40482589 1034896454
## [10,] 1245432991 1101348976 1253241485 1177295231 75946254 1092742163
## [11,] 1457768455 1259587690 1530287302 1394937496 135349806 1253241485
## [12,] 1518773421 1407324956 1709800453 1558562704 151237748 1530287302
## [13,] 1901697370 1626079749 2016244317 1821162033 195082284 1709800453
## [14,] 2609875802 2010115531 2667999769 2339057650 328942119 2016244317
## [15,] 3183637117 2565070096 3561033372 3063051734 497981638 2667999769
## [16,] 3123333333 2972282084 3885201111 3428741598 456459514 3561033372
## [17,] 3423586207 3243518886 3876642613 3560080749 316561864 3885201111
## [18,] 3789321328 3445413623 3895431140 3670422381 225008759 3876642613
## [19,] 4718539772 3977149102 4820726233 4398937668 421788565 3895431140
## [20,] 5516982664 4674947921 5959836666 5317392294 642444373 4820726233
## [21,] 6019805490 5418442642 6874968149 6146705395 728262753 5959836666
## [22,] 5053665797 5530151317 6174759364 5852455341 322304024 6874968149
## [23,] 4602316793 5225262693 4893216978 5059239836 -166022857 6174759364
## [24,] 4524217751 4726733447 3858768703 4292751075 -433982372 4893216978
## [25,] 4438435493 4521656679 3915868157 4218762418 -302894261 3858768703
## [26,] 4577211767 4513288337 4365412702 4439350520 -73937817 3915868157
## [27,] 6685595088 5233747449 6188780704 5711264077 477516628 4365412702
## [28,] 8320902215 6527903023 8733749864 7630826443 1102923420 6188780704
## [29,] 9418167855 8141555053 11155861474 9648708264 1507153211 8733749864
## [30,] 10037674038 9258914703 11824495589 10541705146 1282790443 11155861474
## [31,] 12778792854 10744878249 13471069411 12107973830 1363095581 11824495589
## [32,] 13834219728 12216895540 15170227626 13693561583 1476666043 13471069411
## [33,] 15518702635 14043905072 17461262643 15752583858 1708678785 15170227626
## [34,] 15925521222 15092814528 17709366825 16401090676 1308276148 17461262643
## [35,] 17701798891 16382007583 18800204626 17591106104 1209098522 17709366825
## [36,] 20853093870 18160137994 21390440579 19775289287 1615151293 18800204626
## [37,] 20895314658 19816735806 23210953163 21513844485 1697108679 21390440579
## [38,] 19563836265 20437414931 22369385639 21403400285 965985354 23210953163
## [39,] 20150053345 20203068089 20304391717 20253729903 50661814 22369385639
## [40,] 21899317599 20537735736 20827728038 20682731887 144996151 20304391717
## [41,] 21230182989 21093184644 22056894953 21575039799 481855154 20827728038
## [42,] 21387533703 21505678097 22425968639 21965823368 460145271 22056894953
## [43,] 23649833332 22089183341 23142185969 22615684655 526501314 22425968639
## [44,] 29667268248 24901545094 29040364261 26970954678 2069409583 23142185969
## [45,] 35064843793 29460648458 37414360777 33437504618 3976856160 29040364261
## [46,] 37672280120 34134797387 43406398202 38770597794 4635800407 37414360777
## [47,] 42910146296 38549090070 47550912933 43050001501 4500911432 43406398202
## [48,] 51587401416 44056609277 54342830009 49199719643 5143110366 47550912933
## [49,] 58844277702 51113941805 64195397980 57654669892 6540728087 54342830009
## [50,] 54467289898 54966323005 64807719624 59887021315 4920698310 64195397980
## [51,] 56213985987 56508517862 61133031805 58820774834 2312256972 64807719624
## [52,] 61696281326 57459185737 59754872808 58607029272 1147843535 61133031805
## [53,] 59776383527 59228883613 62222259365 60725571489 1496687876 59754872808
## [54,] 65203276467 62225313773 67400352571 64812833172 2587519399 62222259365
## [55,] 68804811898 64594823964 69751790992 67173307478 2578483514 67400352571
## [56,] 60071584216 64693224194 66404097960 65548661077 855436883 69751790992
## [57,] 62216885436 63697760517 62436075767 63066918142 -630842375 66404097960
## [58,] 65712180343 62666883332 60628737967 61647810649 -1019072682 62436075767
## [59,] 71000359760 66309808513 70479790631 68394799572 2084991059 60628737967
## [60,] 69890505324 68867681809 74706796325 71787239067 2919557258 70479790631
## [61,] 73699366700 71530077261 76785186728 74157631995 2627554734 74706796325
## [62,] 85584105994 76391326006 84647921300 80519623653 4128297647 76785186728
## [63,] 81641807866 80308426853 88772060480 84540243666 4231816813 84647921300
## [64,] 85755006124 84326973328 92296435859 88311704594 3984731266 88772060480
## [65,] NA NA NA NA NA 92296435859
## [66,] NA NA NA NA NA 96281167125
## [67,] NA NA NA NA NA 100265898390
## [68,] NA NA NA NA NA 104250629656
## [69,] NA NA NA NA NA 108235360921
#Plot time series
ts.plot(dt.gab[,1], xlab="Time Period ", ylab="GDP",
main= "DMA N=3 Data GDP Luxembourg", ylim=c(6.099e+08,11.576e+10))
points(dt.gab[,1])
points(dt.gab[,3])
points(dt.gab[,6])
lines(dt.gab[,3],col="green",lwd=2)
lines(dt.gab[,6],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"),
lty=8, col=c("black","green","red"), cex=0.8)
Selanjutnya akan dilihat keakuratan dari metode DMA
#Menghitung nilai keakuratan
error.dma = ts -dt.ramal[1:length(ts)]
SSE.dma = sum(error.dma[6:length(ts)]^2)
MSE.dma = mean(error.dma[6:length(ts)]^2)
MAPE.dma = mean(abs((error.dma[6:length(ts)]/ts[6:length(ts)])*100))
akurasi.dma <- matrix(c(SSE.dma, MSE.dma, MAPE.dma))
row.names(akurasi.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.dma) <- c("Akurasi m = 3")
akurasi.dma
## Akurasi m = 3
## SSE 6.733848e+20
## MSE 1.141330e+19
## MAPE 9.776567e+00
Selanjutnya akan digunakan metode Double Exponential Smoothing dengan cara sebagai berikut.
Pertama akan data akan dibagi menjadi data training dan data testing.
#membagi training dan testing
training<-dt[1:18,2]
testing<-dt[19:23,2]
#data time series
training.ts<-ts(training)
testing.ts<-ts(testing,start=19)
#eksplorasi data
plot(ts, col="red",main="Plot semua data")
points(ts)
plot(training.ts, col="blue",main="Plot data training")
points(training.ts)
Selanjutnya akan dilakukan pemulusan dengan DES, kali ini langsung dicari lambda dan gamma optimum sebagai berikut. Nilai lambda dan gamma optimum dapat dilihat pada smoothing parameters alpha untuk nilai lambda dan beta untuk nilai gamma.
#Lamda dan gamma optimum
des.opt<- HoltWinters(training.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
##
## Call:
## HoltWinters(x = training.ts, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 1
## beta : 0.3352126
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 3789321328
## b 309452586
plot(des.opt)
legend("topleft", c("Data Aktual", "Peramalan"), col = c("black", "red"),
lty = c(1,1))
#ramalan
ramalandesopt<- forecast(des.opt, h=5)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 19 4098773914 3836335531 4361212297 3697409043 4500138785
## 20 4408226500 3970434541 4846018459 3738681478 5077771522
## 21 4717679086 4098129202 5337228970 3770159305 5665198867
## 22 5027131672 4214178378 5840084966 3783826899 6270436445
## 23 5336584258 4317617539 6355550977 3778209141 6894959375
Selanjutnya akan dicari akurasi dari metode DES.
ssedes.train<-des.opt$SSE
msedes.train<-ssedes.train/length(training.ts)
sisaandes<-ramalandesopt$residuals
head(sisaandes)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## x
## [1,] NA
## [2,] NA
## [3,] 37461297
## [4,] 37275948
## [5,] 87700820
## [6,] -36073534
mapedes.train <- sum(abs(sisaandes[3:length(training.ts)]/training.ts[3:length(training.ts)])*100)/length(training.ts)
akurasides.opt <- matrix(c(ssedes.train,msedes.train,mapedes.train))
row.names(akurasides.opt)<- c("SSE", "MSE", "MAPE")
colnames(akurasides.opt) <- c("Akurasi lamda dan gamma optimum")
akurasides.opt
## Akurasi lamda dan gamma optimum
## SSE 6.822204e+17
## MSE 3.790113e+16
## MAPE 6.386995e+00
#Akurasi data testing
selisihdesopt<-ramalandesopt$mean-testing.ts
selisihdesopt
## Time Series:
## Start = 19
## End = 23
## Frequency = 1
## testing.ts
## [1,] -619765858
## [2,] -1108756164
## [3,] -1302126404
## [4,] -26534125
## [5,] 734267465
SSEtestingdesopt<-sum(selisihdesopt^2)
SSEtestingdesopt<-SSEtestingdesopt/length(testing.ts)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing.ts)*100)/length(testing.ts)
akurasiDesTesting <- matrix(c(SSEtestingdesopt,SSEtestingdesopt,MAPEtestingdesopt))
row.names(akurasiDesTesting)<- c("SSE", "MSE", "MAPE")
colnames(akurasiDesTesting) <- c("Akurasi lamda dan gamma optimum")
akurasiDesTesting
## Akurasi lamda dan gamma optimum
## SSE 7.697672e+17
## MSE 7.697672e+17
## MAPE 1.426838e+01
Setelah didapatkan nilai akurasi untuk metode DMA dan DES, selanjutnya akan dibandingkan keakuratan antar metode keduanya.
cbind(akurasi.dma, akurasides.opt)
## Akurasi m = 3 Akurasi lamda dan gamma optimum
## SSE 6.733848e+20 6.822204e+17
## MSE 1.141330e+19 3.790113e+16
## MAPE 9.776567e+00 6.386995e+00
Berdasarkan perbandingan akurasi tersebut terlihat berdasarkan nilai SSE dan MSE, DES memiliki kesalahan yang lebih rendah dibandingkan dengan DMA. Akan tetapi, ketika melihat MAPE, DMA memiliki tingkat kesalahan yang lebih rendah (9.78%) dibandingkan dengan DES (6.39%). Dalam praktiknya, pilihan antara DMA dan DES akan tergantung pada konteks dan preferensi analis. DMA lebih sederhana dan mudah diinterpretasikan, sementara DES memodelkan tren dan musiman dengan lebih baik.
Setelah melakukan peramalan, data yang telah dimasukkan kemudian dieksplorasi. Eksplorasi pertama yang dilakukan adalah dengan menggunakan scatter plot.
#Eksplorasi Data
#Pembuatan Scatter Plot
th <- as.numeric(dt$Tahun)
plot(dt, pch = 20, col = "blue",
main = "Scatter Plot Tahun vs GDP",
xlab = "Tahun",
ylab = "GDP")
#Menampilkan Nilai Korelasi
cor(th,ts)
## [1] 0.9228464
Berdasarkan scatter plot di atas, terlihat adanya hubungan / korelasi
positif antara peubah tahun dengan GDP, terlihat titik-titik pada plot
yang naik ke arah kanan atas. Hal tersebut juga diperkuat dengan hasil
perhitungan aplikasi R di mana didapatkan nilai korelasi
sebesar \(0.9228464\).
Setalah mengetahui adanya hubungan antar dua peubah, maka model regresi dapat ditentukan.
#Pembuatan Model Regresi
#model regresi
model<- lm(ts~th, data = dt)
summary(model)
##
## Call:
## lm(formula = ts ~ th, data = dt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.682e+10 -1.069e+10 6.176e+08 8.878e+09 2.045e+10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.655e+12 1.421e+11 -18.69 <2e-16 ***
## th 1.346e+09 7.135e+07 18.87 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.054e+10 on 62 degrees of freedom
## Multiple R-squared: 0.8516, Adjusted R-squared: 0.8493
## F-statistic: 355.9 on 1 and 62 DF, p-value: < 2.2e-16
Model yang dihasilkan adalah \[y_i=-2655000000000+ 1346000000x_t\] Berdasarkan ringkasan model dapat diketahui bahwa hasil uji F memiliki p-value < \(\alpha\) (5%). Artinya, minimal terdapat satu variabel yang berpengaruh nyata terhadap model. Hasil uji-t parsial kedua parameter regresi, yaitu intersep dan koefisien regresi juga menunjukkan hal yang sama, yaitu memiliki p-value < \(\alpha\) (5%) sehingga nyata dalam taraf 5%. Selanjutnya dapat dilihat juga nilai \(R^2=0.8493\). Artinya, sebesar 84.93% keragaman nilai GDP dapat dijelaskan oleh peubah tahun. Hasil ini menunjukkan hasil yang bagus, seolah mendapatkan hasil terbaik. Namun, kita perlu melakukan uji terhadap sisaannya seperti berikut ini.
#sisaan dan fitted value
sisaan<- residuals(model)
fitValue<- predict(model)
#Diagnostik dengan eksploratif
par(mfrow = c(2,2))
qqnorm(sisaan)
qqline(sisaan, col = "steelblue", lwd = 2)
plot(fitValue, sisaan, col = "steelblue", pch = 20, xlab = "Sisaan", ylab = "Fitted Values", main = "Sisaan vs Fitted Values")
abline(a = 0, b = 0, lwd = 2)
hist(sisaan, col = "steelblue")
lines(seq(1,64,1), sisaan, col = "red")
abline(a = 0, b = 0, lwd = 2)
plot(seq(1,64,1), sisaan, col = "steelblue", pch = 20, xlab = "Sisaan", ylab = "Order", main = "Sisaan vs Order")
length(sisaan)
## [1] 64
Dua plot di samping kiri digunakan untuk melihat apakah sisaan menyebar normal. Normal Q-Q Plot di atas menunjukkan bahwa sisaan tidak menyebar normal, Selanjutnya, dua plot di samping kanan digunakan untuk melihat autokorelasi. Plot Sisaan vs Fitted Value dan Plot Sisaan vs Order menunjukkan adanya pola pada sisaan. Untuk lebih lanjut akan digunakan uji formal melihat normalitas sisaan dan plot ACF dan PACF untuk melihat apakah ada autokorelasi atau tidak.
#Melihat Sisaan Menyebar Normal/Tidak
#H0: sisaan mengikuti sebaran normal
#H1: sisaan tidak mengikuti sebaran normal
shapiro.test(sisaan)
##
## Shapiro-Wilk normality test
##
## data: sisaan
## W = 0.93903, p-value = 0.003422
ks.test(sisaan, "pnorm", mean=mean(sisaan), sd=sd(sisaan))
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: sisaan
## D = 0.14083, p-value = 0.1433
## alternative hypothesis: two-sided
Berdasarkan uji formal Saphiro-Wilk dan Kolmogorov-Smirnov didapatkan nilai p-value > \(\alpha\) (5%). Artinya, cukup bukti untuk menyatakan sisaan berdistribusi normal.
#ACF dan PACF identifikasi autokorelasi
par(mfrow = c(1,2))
acf(sisaan)
pacf(sisaan)
Berdasarkan plot ACF terlihat hingga lag 10 signifikan yang ditandai dengan garis yang keluar dari rentang batas, sedangkan pada plot PACF, terlihat lag 1 signifikan. Kedua hal ini menandakan adanya autokeorelasi, untuk lebih memastikan akan dilakukan uji formal dengan uji Durbin Watson.
#Deteksi autokorelasi dengan uji-Durbin Watson
#H0: tidak ada autokorelasi
#H1: ada autokorelasi
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 0.082686, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Berdasarkan hasil DW Test, didapatkan nilai \(DW = 0.082686\) dan p-value = \(2.2e-16\). Berdasarkan tabel Durbin-Watson diperoleh nilai \(DL = 0.9771\) dan \(DU = 1.331\). Nilai DW masih berada di antara nilai DL dan DU. Artinya, berada di daerah inkonklusif, tidak dapat dikatakan berada di daerah autokorelasi positif maupun bebas dari autokorelasi. Namun, dengan nilai p-value < 0.05 dapat disimpulkan bahwa tolak H0, cukup bukti mengatakan adanya autokorelasi. Oleh karena itu, diperlukan penangan autokorelasi. Penanganan yang akan digunakan menggunakan dua metode, yaitu Cochrane-Orcutt dan Hildret-Lu.
Penanganan metode Cochrane-Orcutt dapat dilakukan dengan bantuan
packages Orcutt pada aplikasi R maupun secara manual.
Berikut ini ditampilkan cara menggunakan bantuan library
packages Orcutt.
#Penanganan Autokorelasi Cochrane-Orcutt
modelCO<-cochrane.orcutt(model)
## Warning in cochrane.orcutt(model): Did not converge
modelCO
## Cochrane-orcutt estimation for first order autocorrelation
##
## Call:
## lm(formula = ts ~ th, data = dt)
##
## number of interaction: 100
## rho 0.961925
##
## Durbin-Watson statistic
## (original): 0.08269 , p-value: 3.938e-39
## (transformed): NA , p-value: NA
##
## coefficients:
## [1] NA
#Rho optimum
rho<- modelCO$rho
rho <- as.numeric(rho)
rho
## [1] 0.9619254
Selanjutnya akan dilakukan transformasi secara manual dengan syntax berikut ini.
dt$GDP
## [1] 709941874 710163719 747846862 797902154 910877686 929477285
## [7] 976717016 983052315 1075561623 1245432991 1457768455 1518773421
## [13] 1901697370 2609875802 3183637117 3123333333 3423586207 3789321328
## [19] 4718539772 5516982664 6019805490 5053665797 4602316793 4524217751
## [25] 4438435493 4577211767 6685595088 8320902215 9418167855 10037674038
## [31] 12778792854 13834219728 15518702635 15925521222 17701798891 20853093870
## [37] 20895314658 19563836265 20150053345 21899317599 21230182989 21387533703
## [43] 23649833332 29667268248 35064843793 37672280120 42910146296 51587401416
## [49] 58844277702 54467289898 56213985987 61696281326 59776383527 65203276467
## [55] 68804811898 60071584216 62216885436 65712180343 71000359760 69890505324
## [61] 73699366700 85584105994 81641807866 85755006124
dt$GDP[-1]
## [1] 710163719 747846862 797902154 910877686 929477285 976717016
## [7] 983052315 1075561623 1245432991 1457768455 1518773421 1901697370
## [13] 2609875802 3183637117 3123333333 3423586207 3789321328 4718539772
## [19] 5516982664 6019805490 5053665797 4602316793 4524217751 4438435493
## [25] 4577211767 6685595088 8320902215 9418167855 10037674038 12778792854
## [31] 13834219728 15518702635 15925521222 17701798891 20853093870 20895314658
## [37] 19563836265 20150053345 21899317599 21230182989 21387533703 23649833332
## [43] 29667268248 35064843793 37672280120 42910146296 51587401416 58844277702
## [49] 54467289898 56213985987 61696281326 59776383527 65203276467 68804811898
## [55] 60071584216 62216885436 65712180343 71000359760 69890505324 73699366700
## [61] 85584105994 81641807866 85755006124
as.numeric(dt$GDP[-12])
## [1] 709941874 710163719 747846862 797902154 910877686 929477285
## [7] 976717016 983052315 1075561623 1245432991 1457768455 1901697370
## [13] 2609875802 3183637117 3123333333 3423586207 3789321328 4718539772
## [19] 5516982664 6019805490 5053665797 4602316793 4524217751 4438435493
## [25] 4577211767 6685595088 8320902215 9418167855 10037674038 12778792854
## [31] 13834219728 15518702635 15925521222 17701798891 20853093870 20895314658
## [37] 19563836265 20150053345 21899317599 21230182989 21387533703 23649833332
## [43] 29667268248 35064843793 37672280120 42910146296 51587401416 58844277702
## [49] 54467289898 56213985987 61696281326 59776383527 65203276467 68804811898
## [55] 60071584216 62216885436 65712180343 71000359760 69890505324 73699366700
## [61] 85584105994 81641807866 85755006124
a <- as.numeric(dt$Tahun[-1])
a
## [1] 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975
## [16] 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990
## [31] 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005
## [46] 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
## [61] 2021 2022 2023
View(dt)
Penanganan kedua adalah menggunakan metode Hildreth-Lu. Metode ini
akan mencari nilai SSE terkecil dan dapat dicari secara manual maupun
menggunakan packages. Jika menggunakan packages, gunakan
library packages HORM.
#Penanganan Autokorelasi Hildreth lu
# Hildreth-Lu
hildreth.lu.func<- function(r, model){
x <- model.matrix(model)[,-1]
y <- model.response(model.frame(model))
n <- length(y)
t <- 2:n
y <- y[t]-r*y[t-1]
x <- x[t]-r*x[t-1]
return(lm(y~x))
}
#Pencariab rho yang meminimumkan SSE
r <- c(seq(0.1,0.9, by= 0.1))
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4)
## rho SSE
## 1 0.1 5.365585e+21
## 2 0.2 4.301700e+21
## 3 0.3 3.368844e+21
## 4 0.4 2.567016e+21
## 5 0.5 1.896216e+21
## 6 0.6 1.356445e+21
## 7 0.7 9.477021e+20
## 8 0.8 6.699878e+20
## 9 0.9 5.233018e+20
Pertama-tama akan dicari di mana kira-kira \(ρ\) yang menghasilkan SSE minimum. Pada hasil di atas terlihat \(ρ\) minimum ketika 0.3. Namun, hasil tersebut masih kurang teliti sehingga akan dicari kembali \(ρ\) yang lebih optimum dengan ketelitian yang lebih. Jika sebelumnya jarak antar \(ρ\) yang dicari adalah 0.1, kali ini jarak antar \(ρ\) adalah 0.001 dan dilakukan pada selang 0.2 sampai dengan 0.5.
#Rho optimal di sekitar 0.4
rOpt <- seq(0.2,0.5, by= 0.001)
tabOpt <- data.frame("rho" = rOpt, "SSE" = sapply(rOpt, function(i){deviance(hildreth.lu.func(i, model))}))
head(tabOpt[order(tabOpt$SSE),])
## rho SSE
## 301 0.500 1.896216e+21
## 300 0.499 1.902275e+21
## 299 0.498 1.908348e+21
## 298 0.497 1.914434e+21
## 297 0.496 1.920532e+21
## 296 0.495 1.926644e+21
#Grafik SSE optimum
par(mfrow = c(1,1))
plot(tab$SSE ~ tab$rho , type = "l", xlab = "Rho", ylab = "SSE")
abline(v = tabOpt[tabOpt$SSE==min(tabOpt$SSE),"rho"], lty = 2, col="red",lwd=2)
text(x=0.341, y=0.2397500, labels = "rho=0.341", cex = 0.8)
Perhitungan yang dilakukan aplikasi R menunjukkan bahwa
nilai \(ρ\) optimum, yaitu saat SSE
terkecil terdapat pada nilai \(ρ=0.341\). Hal tersebut juga ditunjukkan
pada plot. Selanjutnya, model dapat didapatkan dengan mengevaluasi nilai
\(ρ\) ke dalam fungsi
hildreth.lu.func, serta dilanjutkan dengan pengujian
autokorelasi dengan uji Durbin-Watson. Namun, setelah pengecekan
tersebut tidak lupa koefisien regresi tersebut digunakan untuk
transformasi balik. Persamaan hasil transformasi itulah yang menjadi
persamaan sesungguhnya.
#Model terbaik
modelHL <- hildreth.lu.func(0.341, model)
summary(modelHL)
##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.164e+10 -6.737e+09 -3.333e+08 5.950e+09 1.620e+10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.823e+12 9.721e+10 -18.75 <2e-16 ***
## x 1.402e+09 7.403e+07 18.93 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.041e+09 on 61 degrees of freedom
## Multiple R-squared: 0.8546, Adjusted R-squared: 0.8522
## F-statistic: 358.5 on 1 and 61 DF, p-value: < 2.2e-16
#Transformasi Balik
cat("y = ", coef(modelHL)[1]/(1-0.341), "+", coef(modelHL)[2],"x", sep = "")
## y = -2.766239e+12+1401618884x
Setelah dilakukan tranformasi balik, didapatkan model dengan metode Hildreth-Lu sebagai berikut. \[y_i=-1062.032+0.5597492x_t\]
#Deteksi autokorelasi
dwtest(modelHL)
##
## Durbin-Watson test
##
## data: modelHL
## DW = 0.20742, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Hasil uji Durbin-Watson juga menunjukkan bawah nilai DW sebesar \(1.4092\) berada pada selang daerah tidak ada autokorelasi, yaitu pada rentang DU < DW < 4-DU atau \(1.331 < DW < 2.669\). Hal tersebut juga didukung oleh p-value sebesar \(0.09404\), di mana p-value > \(\alpha\)=5%. Artinya tak tolak \(H_0\) atau belum cukup bukti menyatakan bahwa ada autokorelasi dalam data nilai IPM dengan metode Hildreth-Lu pada taraf nyata 5%.
Terakhir, akan dibandingkan nilai SSE dari ketiga metode (metode awal, metode Cochrane-Orcutt, dan Hildreth-Lu).
Autokorelasi yang terdapat pada data GDP negara Luxembourg terjadi akibat adanya korelasi di antara unsur penyusunnya. Indikator GDP yang erat hubungannya dengan perekonomian sangat rawan menjadi penyebab adanya autokorelasi. Adanya autokorelasi menyebabkan model regresi kurang baik karena akan meingkatkan galatnya. Autokorelasi dapat dideteksi secara eksploratif melalui plot sisaan, ACF, dan PACF, serta dengan uji formal Durbin-Watson. Namun, autokorelasi tersebut dapat ditangani dengan metode Cochrane-Orcutt dan Hildreth-Lu. Model Cochrane-Orcutt menghasilkan nilai SSE yang lebih kecil dibandingkan model Hildreth-Lu, artinya model Cochrane-Orcutt lebih baik untuk digunakan untuk analisis ini.