1 Uji Autokorelasi

Uji autokorelasi merupakan uji yang dilakukan untuk dapat melihat apakah terjadi korelasi di antara suatu periode dengan periode-periode sebelumnya. Sederhananya, uji autokorelasi merupakan analisis dari regresi yang terdiri dari pengujian pengaruh variabel independen pada variabel dependen, sehingga tidak boleh terjadi korelasi di antara pengamatan serta data observasi sebelumnya. Berikut langkah-langkah mendeteksi dan menangani masalah autokorelasi pada data deret waktu menggunakan R.

2 Memanggil Library

Package yang digunakan, antara lain dplyr, readxl, forecast, TTR, tseries, lmtest (untuk uji autokorelasi Durbin-Wtason), lawstat (untuk uji autokorelasi Run’s test), orcutt (untuk penanganan autokorelasi metode Cochrane-Orcutt), dan HoRM (untuk penanganan autokorelasi metode Hildreth Lu)

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.2
## 
## 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(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
library(forecast)
## Warning: package 'forecast' was built under R version 4.1.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(TTR)
## Warning: package 'TTR' was built under R version 4.1.3
library(tseries)
## Warning: package 'tseries' was built under R version 4.1.3
library(lmtest) #uji-Durbin Watson
## Warning: package 'lmtest' was built under R version 4.1.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.1.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(orcutt) #Cochrane-Orcutt
## Warning: package 'orcutt' was built under R version 4.1.3
library(HoRM)#Hildreth Lu
## Warning: package 'HoRM' was built under R version 4.1.3
library(lawstat)
## Warning: package 'lawstat' was built under R version 4.1.3
## 
## Attaching package: 'lawstat'
## The following object is masked from 'package:tseries':
## 
##     runs.test

3 Menginput Data

Data yang digunakan adalah Data IPM Provinsi DKI Jakarta dari tahun 2010 s.d. 2021 yang diunduh dari situs BPS.

data <- read_excel("C:\\Users\\tiasa\\Downloads\\Data IPM DKI.xlsx")
head(data)
## # A tibble: 6 x 2
##   Tahun   IPM
##   <dbl> <dbl>
## 1  2010  76.3
## 2  2011  77.0
## 3  2012  77.5
## 4  2013  78.1
## 5  2014  78.4
## 6  2015  79.0

4 Eksplorasi Data

Peubah Tahun 2010 s.d. 2021 dinyatakan sebagai peubah X dan Peubah Nilai IPM Provinsi DKI Jakarta dinyatakan sebagai peubah Y.

x <- data$Tahun
y <- data$IPM

4.1 Scatter Plot

#diagram pencar identifikasi model
plot(x,y,pch = 20, col = "blue", main = "Scatter Plot X vs Y",
     ylab = "Nilai Peubah Y", xlab = "Nilai Peubah X")

4.2 Korelasi

cor(x,y)
## [1] 0.9879386

Berdasarkan scatter plot hubungan peubah X (Tahun 2010 s.d. 2021) dan peubah Y (Nilai IPM di provinsi DKI Jakarta), terdapat hubungan tren positif yang berarti semakin naik tahunnya maka nilai IPM di provinsi DKI Jakarta juga semakin meningkat. Korelasi antara kedua peubah juga sangat besar, yaitu 0.9879386.

4.3 Model Regresi Deret Waktu

#model regresi
model <- lm(y~x, data = data)
summary(model)
## 
## Call:
## lm(formula = y ~ x, data = data)
## 
## 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 ***
## x              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

Diperoleh model regresi awal, yaitu \[ y = -816.54150 + 0.44437x \]. Berdasarkan persamaan regresi, nilai dugaan rataan Y bertambah sebesar 0.44437 jika X bertambah satu satuan. Berdasarkan uji-t parsial untuk intersep dan koefisien X, diperoleh kedua parameter berpengaruh nyata pada taraf 5%. Dari uji F diperoleh P−Value<0.05, artinya terdapat minimal 1 variabel yang berpengaruh nyata secara signifikan pada taraf 5%. Berdasarkan nilai R Square, variabel x (tahun) dapat menjelaskan keragaman variabel y (IPM) sebesar 97.36%.

5 Deteksi Autokorelasi

Autokorelasi dapat dideteksi secara eksploratif (menggunakan grafik) atau menggunakan uji statistik. Pendeteksian secara eksploratif dapat menggunakan grafik sisaan vs fitted values, sisaan vs order, ataugrafik ACF dan PACF. Uji statistik yang digunakan untuk pendeteksian autokorelasi adalah Uji Durbin-watson, Uji Breusedch grodfrey, atau Uji run’s test.

5.1 Residual Plot

#sisaan dan fitted value
resi1 <- residuals(model)
fit <- predict(model)

#Diagnostik dengan eksploratif
par(mfrow = c(2,2))

qqnorm(resi1)
qqline(resi1, col = "steelblue", lwd = 2)

plot(fit, resi1, col = "steelblue", pch = 20, xlab = "Sisaan", 
     ylab = "Fitted Values", main = "Sisaan vs Fitted Values")
abline(a = 0, b = 0, lwd = 2)

hist(resi1, col = "steelblue")

plot(seq(1,12,1), resi1, col = "steelblue", pch = 20, 
     xlab = "Sisaan", ylab = "Order", main = "Sisaan vs Order")
lines(seq(1,12,1), resi1, col = "red")
abline(a = 0, b = 0, lwd = 2)

Berdasarkan plot Sisaan vs Order, terdapat beberapa titik amatan yang terletak cukup jauh dari titik nol. Maka, dapat diduga terdapat adanya autokorelasi.

5.2 ACF dan PACF Plot

ACF mengukur korelasi antar pengamatan dengan jeda k; sedangkan PACF mengukur korelasi antar pengamatan dengan jeda k dan dengan mengontrol korelasi antar dua pengamatan dengan jeda kurang dari k.

#ACF dan PACF identifikasi autokorelasi
par(mfrow = c(2,1))
acf(resi1)
pacf(resi1)

Berdasarkan grafik, terlihat bahwa garis hitam tidak ada yang melebihi garis biru (kecuali ketika lag 0), sehingga dapat diduga sisaan saling bebas dan tidak terdeteksi adanya autokorelasi.

6 Uji Statistik

6.1 Durbin Watson Test

Hipotesis: H0: tidak ada autokorelasi H1: ada autokorelasi

lmtest::dwtest(model, alternative = 'two.sided') #ada autokorelasi
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 0.53015, p-value = 0.0001284
## alternative hypothesis: true autocorrelation is not 0

Diperoleh p-value < 5% : Tolak H0, sehingga cukup bukti untuk menyatakan bahwa terdapat autokorelasi (positif) pada taraf 5%.

6.2 Breusch-Godfrey Test

Hipotesis: H0: tidak ada autokorelasi H1: ada autokorelasi

lmtest::bgtest(y ~ x, data=data, order=1) #Perform Breusch-Godfrey test for first-order serial correlation
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  y ~ x
## LM test = 5.1467, df = 1, p-value = 0.02329

Diperoleh p-value < 5% : Tolak H0, sehingga cukup bukti untuk menyatakan bahwa terdapat autokorelasi (positif) pada taraf 5%.

6.3 Run’s Test

lawstat::runs.test(resid(model), alternative = 'two.sided')
## 
##  Runs Test - Two sided
## 
## data:  resid(model)
## Standardized Runs Statistic = -1.2111, p-value = 0.2259

Diperoleh p-value > 5% : Tolak H0 sehingga cukup bukti untuk menyatakan bahwa tidak terdapat autokorelasi (positif) pada taraf 5%.

Berdasarkan uji Durbin-Watson dan Breusedch grodfrey, cukup bukti untuk menyatakan bahwa terdapat autokorelasi pada taraf 5%. Dapat diasumsikan bahwa terdapat autokorelasi pada data karena 2 dari 3 uji yang dilakukan menghasilkan p-value kurang dari 0.05.

7 Penanganan Autokorelasi

Penanganan autokorelasi dapat dilakukan dengan metode Cochrane Orcutt atau Hilderth Lu

7.1 Metode Cochrane-Orcutt

Cochrane-Orcutt menggunakan pendekatan secara iterative agar mendapatkan penduga rho yang lebih baik.

modelco <- orcutt::cochrane.orcutt(model)
## Warning in orcutt::cochrane.orcutt(model): Did not converge
modelco 
## Cochrane-orcutt estimation for first order autocorrelation 
##  
## Call:
## lm(formula = y ~ x, data = data)
## 
##  number of interaction: 100
##  rho 0.869529
## 
## Durbin-Watson statistic 
## (original):    0.53015 , p-value: 6.42e-05
## (transformed): NA , p-value: NA
##  
##  coefficients: 
## [1] NA
#rho optimum
rho <- modelco$rho
y
##  [1] 76.31 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77 81.11
y[-1]
##  [1] 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77 81.11
y[-12]
##  [1] 76.31 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77
#transformasi terhadap y dan x
(y.trans <- y[-1]-y[-12]*rho)
##  [1] 10.62628 10.59369 10.66545 10.49721 10.82766 10.91594 10.84553 10.85555
##  [9] 10.78904 10.54688 10.87818
(x.trans <- x[-1]-x[-12]*rho)
##  [1] 263.2477 263.3781 263.5086 263.6391 263.7696 263.9000 264.0305 264.1610
##  [9] 264.2914 264.4219 264.5524
#model baru
modelcorho <- lm(y.trans~x.trans)
summary(modelcorho)
## 
## Call:
## lm(formula = y.trans ~ x.trans)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.263344 -0.032178 -0.001385  0.089807  0.184904 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept) -29.3092    27.0281  -1.084    0.306
## x.trans       0.1517     0.1024   1.481    0.173
## 
## Residual standard error: 0.1401 on 9 degrees of freedom
## Multiple R-squared:  0.196,  Adjusted R-squared:  0.1067 
## F-statistic: 2.195 on 1 and 9 DF,  p-value: 0.1726

7.1.1 Deteksi autokorelasi dengan uji Durbin-watson

Hipotesis H0: Tidak terdapat autokorelasi H1: Terdapat autokorelasi

lmtest::dwtest(modelcorho,alternative = 'two.sided')
## 
##  Durbin-Watson test
## 
## data:  modelcorho
## DW = 1.8291, p-value = 0.4879
## alternative hypothesis: true autocorrelation is not 0

Diperoleh p-value > 5% : Tolak H0 sehingga cukup bukti untuk menyatakan bahwa tidak terdapat autokorelasi (positif) pada taraf 5%. Metode Cochrane-Orcutt dapat menangani autokorelasi pada sisaan.

7.1.2 Persamaan regresi setelah transformasi balik

cat("y = ", coef(modelcorho)[1]/(1-rho), "+", coef(modelcorho)[2],"x", sep = "")
## y = -224.6409+0.1517252x

Setelah penanganan autokorelasi, diperoleh persamaan regresi \[ y = -224.6409+0.1517252x \]

7.2 2. Metode Hildreth Lu

Mencari nilai rho yang SSE nya terkecil

 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))
}
#mencari rho yang meminimumkan SSE (iteratif)
r <- c(seq(0.1,0.8, by= 0.1), seq(0.9,0.99, by= 0.01))
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4) #0,40 memiliki SSE Terkecil
##     rho    SSE
## 1  0.10 0.4607
## 2  0.20 0.3942
## 3  0.30 0.3366
## 4  0.40 0.2878
## 5  0.50 0.2478
## 6  0.60 0.2167
## 7  0.70 0.1944
## 8  0.80 0.1809
## 9  0.90 0.1763
## 10 0.91 0.1763
## 11 0.92 0.1764
## 12 0.93 0.1766
## 13 0.94 0.1769
## 14 0.95 0.1773
## 15 0.96 0.1778
## 16 0.97 0.1783
## 17 0.98 0.1790
## 18 0.99 0.1797
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)

Pada iterasi pertama, didapatkan ρ optimum yang menghasilkan SSE terkecil berada di sekitar 0.9. Maka, selang kita perkecil.

r <- seq(0.89, 0.92, by= 0.01)
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4)
##    rho    SSE
## 1 0.89 0.1764
## 2 0.90 0.1763
## 3 0.91 0.1763
## 4 0.92 0.1764
tab$rho[which.min(tab$SSE)]
## [1] 0.9
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)

Diperoleh nilai ρ optimum yang menghasilkan SSE terkecil adalah sebesar 0.9, Sehingga model optimum yang dapat dibuat dengan metode Hildreth-Lu adalah sebagai berikut:

modelhl <- hildreth.lu.func(0.90, model)
summary(modelhl)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.262945 -0.031786  0.002045  0.082941  0.182273 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.92123   27.02291  -0.108    0.916
## x            0.05555    0.13345   0.416    0.687
## 
## Residual standard error: 0.14 on 9 degrees of freedom
## Multiple R-squared:  0.01889,    Adjusted R-squared:  -0.09013 
## F-statistic: 0.1733 on 1 and 9 DF,  p-value: 0.687

7.2.1 Deteksi autokorelasi dengan uji Durbin-watson

lmtest::dwtest(modelhl)
## 
##  Durbin-Watson test
## 
## data:  modelhl
## DW = 1.8932, p-value = 0.2811
## alternative hypothesis: true autocorrelation is greater than 0

Diperoleh p-value > 5% : Tolak H0 sehingga cukup bukti untuk menyatakan bahwa tidak terdapat autokorelasi (positif) pada taraf 5%. Metode HHildreth Lu dapat menangani autokorelasi pada sisaan.

7.2.2 Persamaan regresi setelah transformasi balik

cat("y = ", coef(modelhl)[1]/(1-0.90), "+", coef(modelhl)[2],"x", sep = "")
## y = -29.21227+0.05554545x

Setelah penanganan autokorelasi, diperoleh persamaan regresi \[ y = -29.21227+0.05554545x \]

8 Kesimpulan

Berdasarkan pengujian secara eksploratif dan uji statistik, terdeteksi adanya autokorelasi pada data IPM Provinsi DKI Jakarta tahun 2010 s.d. 2021. Maka, penanganan autokorelasi menggunakan metode Cochrane-Orcutt dan Hildreth-Lu dilakukan terhadap data sehingga masalah autokorelasi dapat diatasi.