Deskripsi data

Data yang digunakan adalah data Indeks Pembangunan Manusia (IPM) per-provinsi dari tahun 2010-2021. Data bersumber dari BPS. Provinsi yang dipilih untuk diperiksa asumsi Autokorelasinya adalah Provinsi DKI Jakarta, Provinsi Kalimantan Timur, dan Provinsi Maluku. Link sumber data: https://www.bps.go.id/indicator/26/494/1/-metode-baru-indeks-pembangunan-manusia-menurut-provinsi.html

Library

Inisiasi Data

MPDW.idv <- readxl::read_excel("C:/Users/ZHILLAN/Documents/Materi Kuliah/Semester 5/Metode Peramalan Deret Waktu/Tugas Individu MPDW.xlsx", sheet="Sheet1")
MPDW.sct <- MPDW.idv[,c(1,12,24,32)]
knitr::kable(MPDW.sct, caption="IPM Provinsi DKI Jakarta, Kalimantan Timur, dan Maluku 12 Tahun Terkhir")
IPM Provinsi DKI Jakarta, Kalimantan Timur, dan Maluku 12 Tahun Terkhir
Tahun DKI JAKARTA KALIMANTAN TIMUR MALUKU
2010 76.31 71.31 64.27
2011 76.98 72.02 64.75
2012 77.53 72.62 65.43
2013 78.08 73.21 66.09
2014 78.39 73.82 66.74
2015 78.99 74.17 67.05
2016 79.60 74.59 67.60
2017 80.06 75.12 68.19
2018 80.47 75.83 68.87
2019 80.76 76.61 69.45
2020 80.77 76.24 69.49
2021 81.11 76.88 69.71

Pembuatan Plot

plot(MPDW.sct$Tahun, MPDW.sct$`DKI JAKARTA`, type="b", pch=19, col="red", main="Perkembangan IPM Provinsi DKI Jakarta\n12 Tahun Terakhir")

plot(MPDW.sct$Tahun, MPDW.sct$`KALIMANTAN TIMUR`, type="b", pch=19, col="blue", main="Perkembangan IPM Provinsi Kalimantan Timur\n12 Tahun Terakhir")

plot(MPDW.sct$Tahun, MPDW.sct$`MALUKU`, type="b", pch=19, col="green", main="Perkembangan IPM Provinsi Maluku\n 12 Tahun Terakhir")

Pembuatan Model Linier

Model.Jkt <- lm(`DKI JAKARTA` ~ Tahun, data=MPDW.sct)
summary(Model.Jkt)
## 
## Call:
## lm(formula = `DKI JAKARTA` ~ Tahun, data = MPDW.sct)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.42154 -0.16017  0.05061  0.16141  0.30594 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -816.54150   44.39144  -18.39 4.86e-09 ***
## Tahun          0.44437    0.02202   20.18 1.97e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2634 on 10 degrees of freedom
## Multiple R-squared:  0.976,  Adjusted R-squared:  0.9736 
## F-statistic: 407.1 on 1 and 10 DF,  p-value: 1.97e-09
Model.Kltm <- lm(`KALIMANTAN TIMUR` ~ Tahun, data=MPDW.sct)
summary(Model.Kltm)
## 
## Call:
## lm(formula = `KALIMANTAN TIMUR` ~ Tahun, data = MPDW.sct)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.40351 -0.12214  0.00726  0.12866  0.47209 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -944.65719   42.61522  -22.17 7.83e-10 ***
## Tahun          0.50559    0.02114   23.91 3.72e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2528 on 10 degrees of freedom
## Multiple R-squared:  0.9828, Adjusted R-squared:  0.9811 
## F-statistic: 571.8 on 1 and 10 DF,  p-value: 3.719e-10
Model.Mlk <- lm(`MALUKU` ~ Tahun, data=MPDW.sct)
summary(Model.Mlk)
## 
## Call:
## lm(formula = MALUKU ~ Tahun, data = MPDW.sct)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.46718 -0.16078  0.02167  0.13228  0.31786 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -985.83065   39.58330  -24.91 2.49e-10 ***
## Tahun          0.52252    0.01964   26.61 1.30e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2349 on 10 degrees of freedom
## Multiple R-squared:  0.9861, Adjusted R-squared:  0.9847 
## F-statistic: 707.9 on 1 and 10 DF,  p-value: 1.299e-10

Uji Asumsi Autokorelasi

Pengujian asumsi Autokorelasi dilakukan secara eksploratif dan formal. Pengujian secara eksploratif menggunakan plot ACF dan PACF. Kemudian, pengujian secara formal menggunakan uji Durbin-Watson (Syntax dwtest(model) dalam library(lmtest) pada RStudio).

#Pengujian asumsi secara eksploratif
par(mfrow = c(2,3))
acf(Model.Jkt$residuals)
acf(Model.Kltm$residuals)
acf(Model.Mlk$residuals)
pacf(Model.Jkt$residuals)
pacf(Model.Kltm$residuals)
pacf(Model.Mlk$residuals)

Hasil pengujian secara eksploratif menunjukkan bahwa secara ACF terdapat masing-masing satu garis hitam yang melewati garis biru. Pengujian secara eksploratif hanya melihat secara sekilas saja apakah terdapat autokorelasi dalam suatu model. Tidak memastikan sepenuhnya keberadaan autokorelasi dalam model. Sehingga diperlukan uji formal untuk mengetahuinya lebih lanjut.

#Pengujian asumsi secara formal
lmtest::dwtest(Model.Jkt)
## 
##  Durbin-Watson test
## 
## data:  Model.Jkt
## DW = 0.53015, p-value = 6.42e-05
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::dwtest(Model.Kltm)
## 
##  Durbin-Watson test
## 
## data:  Model.Kltm
## DW = 1.5684, p-value = 0.1209
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::dwtest(Model.Mlk)
## 
##  Durbin-Watson test
## 
## data:  Model.Mlk
## DW = 0.84248, p-value = 0.002687
## alternative hypothesis: true autocorrelation is greater than 0

Berdasarkan hasil uji Durbin-Watson, didapatkan nilai p-value untuk model DKI Jakarta sebesar 6,42e-05. Nilai tersebut lebih kecil dari alpha 0,05 sehingga H0 ditolak dan belum cukup bukti menyatakan bahwa sisaan data pada model DKI Jakarta tidak saling bebas (Terdapat Autokorelasi). Kemudian, pada model Kalimantan Timur, didapatkan nilai p-value untuk sebesar 0,1209. Nilai tersebut lebih besar dari alpha 0,05 sehingga H0 tak ditolak dan cukup bukti menyatakan bahwa sisaan data pada model Kalimantan Timur saling bebas (Tidak ada Autokorelasi). Lalu, pada model Maluku, didapatkan nilai p-value sebesar 0,002687. Nilai tersebut lebih kecil dari alpha 0,05 sehingga H0 ditolak dan belum cukup bukti menyatakan bahwa sisaan data pada model Maluku tidak saling bebas (Terdapat Autokorelasi).

Penanganan Kondisi Autokorelasi pada Sisaan Model

Kondisi Autokorelasi pada sisaan model dapat diatasi dengan metode Cochrane-Orcutt dan Hildreth-Lu. Model yang akan ditangani adalah model IPM dari Provinsi DKI Jakarta dan Maluku yang sebelumnya pada uji asumsi Durbin-Watson tidak memenuhi.

Cochrane-Orcutt

Penanganan asumsi Autokorelasi yang dilakukan dengan pendekatan secara iterative agar mendapatkan penduga p yang lebih baik. Pada RStudio, dapat menggunakan syntax cochrane.orcutt(model) dalam library(orcutt) atau membuat syntax fungsi tersendiri. Notes: convergence=5 dan max.iter=1000 (Muncul warning message ketika convergence=8. max.iter=100 agar tidak terjadi warning setidaknya harus pada convergence=3).

# Uji Cochrane-Orcutt untuk model DKI Jakarta
cochrane.test <- orcutt::cochrane.orcutt(Model.Jkt, convergence=5, max.iter=1000)
rho.Jkt <- cochrane.test$rho
Tahun.tr <- MPDW.sct$Tahun[-1]-(MPDW.sct$Tahun[-12]*rho.Jkt)
Jkt.tr <- MPDW.sct$`DKI JAKARTA`[-1]-(MPDW.sct$`DKI JAKARTA`[-12]*rho.Jkt)
Model.Jkt.tr <- lm(Jkt.tr ~ Tahun.tr)

# Uji Cochrane-Orcutt untuk model Maluku
cochrane.test <- orcutt::cochrane.orcutt(Model.Mlk, convergence=5, max.iter=1000)
rho.Mlk <- cochrane.test$rho
Tahun.tr <- MPDW.sct$Tahun[-1]-(MPDW.sct$Tahun[-12]*rho.Mlk)
Mlk.tr <- MPDW.sct$`MALUKU`[-1]-(MPDW.sct$`MALUKU`[-12]*rho.Mlk)
Model.Mlk.tr <- lm(Mlk.tr ~ Tahun.tr)
# Pengujian asumsi kembali
lmtest::dwtest(Model.Jkt.tr)
## 
##  Durbin-Watson test
## 
## data:  Model.Jkt.tr
## DW = 1.8906, p-value = 0.2796
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::dwtest(Model.Mlk.tr)
## 
##  Durbin-Watson test
## 
## data:  Model.Mlk.tr
## DW = 1.5479, p-value = 0.1137
## alternative hypothesis: true autocorrelation is greater than 0

Berdasarkan hasil uji asumsi kembali, didapatkan nilai p-value untuk model DKI Jakarta sebesar 0,2796. Nilai tersebut sudah lebih besar dari alpha 0,05. sehingga H0 tak ditolak dan cukup bukti menyatakan bahwa sisaan data pada model DKI Jakarta sudah dapat dikatakan saling bebas (Tidak ada Autokorelasi). Sementara itu, untuk model Maluku, didapatkan nilai p-value sebesar 0,1137. Nilai tersebut sudah lebih besar dari alpha 0,05. sehingga H0 tak ditolak dan cukup bukti menyatakan bahwa sisaan data pada model Maluku sudah dapat dikatakan saling bebas (Tidak ada Autokorelasi).

Hildreth-Lu

Pendekatan yang hampir sama dengan Cochrane-Orcutt, tetapi tidak memerlukan iterasi. Moetode Hildreth-Lu mengambil beberapa nilai rho secara random antara nilai 0 sampai 1. Pada RStudio, Fungsi Hildreth-Lu dibuat dengan format sebagai berikut.

hildreth.lu <- function(rho, model){
  x <- model.matrix(model)[,-1]
  y <- model.response(model.frame(model))
  n <- length(y)
  t <- 2:n
  y <- y[t]-rho*y[t-1]
  x <- x[t]-rho*x[t-1]
  return(lm(y~x))
}

Penentuan rho optimum

# Model Jakarta
rhoh1 <- c(seq(0.01, 0.99, by=0.01))
hltab1 <- data.frame('rho'=rhoh1, 'SSE'=sapply(rhoh1, function(i){deviance(hildreth.lu(i, Model.Jkt))}))
plot(hltab1$SSE ~ hltab1$rho , type = "l")
abline(v = hltab1[hltab1$SSE==min(hltab1$SSE),"rho"], lty = 3)

optrho1 <- which.min(round(hltab1, 4)[,2])
opt.rho.1 <- round(hltab1, 4)[optrho1,]$rho

# Model Maluku
rhoh2 <- c(seq(0.01, 0.99, by=0.01))
hltab2 <- data.frame('rho'=rhoh2, 'SSE'=sapply(rhoh2, function(i){deviance(hildreth.lu(i, Model.Mlk))}))
plot(hltab2$SSE ~ hltab2$rho , type = "l")
abline(v = hltab2[hltab2$SSE==min(hltab2$SSE),"rho"], lty = 3)

optrho2 <- which.min(round(hltab2, 4)[,2])
opt.rho.2 <- round(hltab2, 4)[optrho2,]$rho

Pada model Jakarta, didapatkan rho optimum sebesar 0,9 (Nilai tersebut hampir sama dengan nilai rho pada uji Cochrane-Orcutt-nya yang mana sebesar 0,8987). Sementara itu, pada model Maluku, didapatkan rho optimum sebesar 0,88 (Nilai tersebut juga hampir sama dengan nilai rho pada uji Cochrane-Orcutt-nya yang mana sebesar 0,8858).

Penanganan dengan metode Hildreth-Lu

Model.Jkt.hl <- hildreth.lu(opt.rho.1, Model.Jkt)
Model.Mlk.hl <- hildreth.lu(opt.rho.2, Model.Mlk)
# Pengujian asumsi kembali
lmtest::dwtest(Model.Jkt.hl)
## 
##  Durbin-Watson test
## 
## data:  Model.Jkt.hl
## DW = 1.8932, p-value = 0.2811
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::dwtest(Model.Mlk.hl)
## 
##  Durbin-Watson test
## 
## data:  Model.Mlk.hl
## DW = 1.541, p-value = 0.1112
## alternative hypothesis: true autocorrelation is greater than 0

Berdasarkan hasil uji asumsi kembali, didapatkan nilai p-value untuk model DKI Jakarta sebesar 0,2811. Nilai tersebut sudah lebih besar dari alpha 0,05. sehingga H0 tak ditolak dan cukup bukti menyatakan bahwa sisaan data pada model DKI Jakarta sudah dapat dikatakan saling bebas (Tidak ada Autokorelasi). Sementara itu, untuk model Maluku, didapatkan nilai p-value sebesar 0,1112. Nilai tersebut sudah lebih besar dari alpha 0,05. sehingga H0 tak ditolak dan cukup bukti menyatakan bahwa sisaan data pada model Maluku sudah dapat dikatakan saling bebas (Tidak ada Autokorelasi).

Perbandingan Nilai Koefisien duga dari Kedua Metode Penanganan Autokorelasi

df.coef <- cbind(Model=c("DKI Jakarta - Original", "DKI Jakarta - Cochrane-Orcutt", "DKI Jakarta - Hildreth-Lu", "Maluku - Original", "Maluku - Cochrane-Orcutt", "Maluku - Hildreth-Lu"), b0=c(coef(Model.Jkt)[1], coef(Model.Jkt.tr)[1], coef(Model.Jkt.hl)[1], coef(Model.Mlk)[1], coef(Model.Mlk.tr)[1], coef(Model.Mlk.hl)[1]), b1=c(coef(Model.Jkt)[2], coef(Model.Jkt.tr)[2], coef(Model.Jkt.hl)[2], coef(Model.Mlk)[2], coef(Model.Mlk.tr)[2], coef(Model.Mlk.hl)[2]))
knitr::kable(df.coef)
Model b0 b1
(Intercept) DKI Jakarta - Original -816.541503496541 0.444370629370648
(Intercept) DKI Jakarta - Cochrane-Orcutt -3.99174714857092 0.0605688810872224
(Intercept) DKI Jakarta - Hildreth-Lu -2.92122727273392 0.0555454545454873
(Intercept) Maluku - Original -985.830652680715 0.522517482517513
(Intercept) Maluku - Cochrane-Orcutt -49.3549827307996 0.248776176528792
(Intercept) Maluku - Hildreth-Lu -55.3484969696915 0.263151515151492

Dapat dilihat bahwa hasil koefisien setelah diberi penanganan Cochrane-Orcutt dan Hildreth-Lu memberikan nilai koefisien yang hampir serupa.

Perbandingan Kebaikan Hasil dari Kedua Metode Penanganan Autokorelasi

Perbandingan hanya dilakukan pada metode DKI Jakarta dan metode Maluku karena pada model Kalimantan Timur tidak dilakukan penanganan autokorelasi.

mse.Jkt.or <- mean(Model.Jkt$residuals^2)
mse.Mlk.or <- mean(Model.Mlk$residuals^2)
mse.Jkt.co <- mean(Model.Jkt.tr$residuals^2)
mse.Mlk.co <- mean(Model.Mlk.tr$residuals^2)
mse.Jkt.hl <- mean(Model.Jkt.hl$residuals^2)
mse.Mlk.hl <- mean(Model.Mlk.hl$residuals^2)
`DKI Jakarta` <- c(mse.Jkt.or, mse.Jkt.co, mse.Jkt.hl)
Maluku <- c(mse.Mlk.or, mse.Mlk.co, mse.Mlk.hl)
df.error <- cbind(Method=c("Original", "Cochrane-Orcutt", "Hildreth-Lu"), `DKI Jakarta`, Maluku)
knitr::kable(df.error)
Method DKI Jakarta Maluku
Original 0.0578077797203129 0.0459633644133882
Cochrane-Orcutt 0.0160274249999917 0.0295025490228239
Hildreth-Lu 0.0160271231404965 0.0295039106115715

Nilai MSE mendapatkan …