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.
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
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
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#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")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.
#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%.
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.
#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.
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.
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%.
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%.
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.
Penanganan autokorelasi dapat dilakukan dengan metode Cochrane Orcutt atau Hilderth Lu
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
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.
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 \]
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
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.
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 \]
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.