Penanganan Autokorelasi pada Data Time Series IPM Provinsi Sulawesi Selatan Tahun 2010 - 2021
Siti Aisyah
1. Pendahuluan
1.1 Latar Belakang
Dalam suatu model regresi linear, biasanya terdapat korelasi antara kesalahan pengganggu (residual) pada periode t dengan kesalahan pada periode t-1 atau periode sebelumnya. Jika terjadi korelasi, hal tersebut mengindikasikan adanya pelanggaran asumsi yang dinamakan autokorelasi.
Autokorelasi dapat terjadi karena adanya keterkaitan observasi antara satu sama lain yang berurutan sepanjang waktu, atau dengan kata lain residual tidak bebas dari satu observasi ke observasi lainnya. Autokorelasi ini sering ditemukan pada data runut waktu (time series).
Adapun cara untuk mendeteksi ada atau tidaknya autokorelasi salah satunya dengan Uji Durbin Watson (DW). Sedangkan metode untuk menangani autokorelasi antara lain Metode Cochrane-Orcutt dan Hildreth-Lu.
1.2 Library yang Digunakan
Pendeteksian dan penanganan autokorelasi memerlukan beberapa library, di antaranya :
library(readxl)
library(dplyr)
##
## 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(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.6 v purrr 0.3.4
## v tibble 3.1.6 v stringr 1.4.0
## v tidyr 1.2.0 v forcats 0.5.1
## v readr 2.1.2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
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)
## Warning: package 'lmtest' 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(orcutt)
## Warning: package 'orcutt' was built under R version 4.1.3
library(HoRM)
## Warning: package 'HoRM' was built under R version 4.1.3
1.3 Data yang Digunakan
Data yang digunakan adalah data riil Indeks Pembangunan Manusia (IPM) Provinsi Sulawesi Selatan dari tahun 2010 hingga 2021. Provinsi Sulawesi Selatan merupakan provinsi ketiga dengan kinerja IPM terbaik di Indonesia yang kondisi IPM nasional kala itu cenderung landai. Dilansir dari web lokadata, Sulawesi Selatan justru mengalami peningkatan sebesar 0.38%.
Data dapat dilihat sebagai berikut :
data <- read_excel("C:/ICA/Semester 5/MPDW/Tugas Individu MPDW.xlsx", sheet="Sheet2")
knitr::kable(data,align = "l")
| Tahun | IPM |
|---|---|
| 2010 | 66.00 |
| 2011 | 66.65 |
| 2012 | 67.26 |
| 2013 | 67.92 |
| 2014 | 68.49 |
| 2015 | 69.15 |
| 2016 | 69.76 |
| 2017 | 70.34 |
| 2018 | 70.90 |
| 2019 | 71.66 |
| 2020 | 71.93 |
| 2021 | 72.24 |
1.4 Eksplorasi Data
x <- data$Tahun
y <- data$IPM
1.4.1 Time Series Plot
p <- ggplot(data, aes(x=x, y=y)) +
geom_line(lwd=1.2,col="#790252")
p+labs(x="Tahun",y = "IPM",
title="Plot IPM Provinsi Sulawesi Selatan",
subtitle = "Periode 2010 - 2021")+
theme_bw()+
theme(
plot.title = element_text(size = 14L,
face = "bold",
hjust = 0.5),
plot.subtitle = element_text(size = 11L,
face = "plain",
hjust = 0.5)
)+geom_point(size=2) +geom_text(aes(label=paste(IPM,"%")),vjust=-0.8,size=3)
Berdasarkan plot di atas, terlihat bahwa IPM Provinsi Sulawesi Selatan
mengalami tren kenaikan positif tiap tahunnya.Kenaikan IPM tiap tahunnya
cenderung konstan, berada di sekitar angka 0.50% dengan total kumulatif
sebesar 12.24% dari tahun 2010 hingga 2021.
1.4.2 Korelasi antara Kedua Peubah
cor(x, y)
## [1] 0.9975255
Korelasi antara peubah Tahun dan IPM bersifat positif dengan nilai sebesar 0.9975, yang mana menurut Nugroho et. al (2014) hubungan antara kedua peubah tersebut sangat kuat.
2. Isi
2.1 Pemodelan
model <- lm(y~x, data = data)
summary(model)
##
## Call:
## lm(formula = y ~ x, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.34949 -0.06650 0.02163 0.08917 0.24548
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.115e+03 2.639e+01 -42.24 1.33e-12 ***
## x 5.875e-01 1.309e-02 44.87 7.28e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1566 on 10 degrees of freedom
## Multiple R-squared: 0.9951, Adjusted R-squared: 0.9946
## F-statistic: 2013 on 1 and 10 DF, p-value: 7.275e-13
Berdasarkan pemodelan di atas, model regresi linier yang dibentuk dari data IPM Sulawesi Selatan adalah : Y = -1115 + 0.5875X + e di mana Y adalah IPM sedangkan X adalah Tahun.
Selain model, diperoleh hasil dari uji F-parsial dan F-simultan penduga parameter yang memiliki nilai kurang dari p-value (0.05) sehingga tolak H0. Hal ini mengindikasikan bahwa kedua penduga parameter berpengaruh signifikan terhadap peubah respon (Y). Adapun nilai Adjusted R-squared yang diperoleh yakni sebesar 0.9946.
2.2 Pengecekan Asumsi
Dengan Eksploratif
#sisaan dan fit.valueted value
residual <- residuals(model)
fit.value <- predict(model)
#Diagnostik dengan eksploratif
par(mfrow = c(2,2))
qqnorm(residual)
qqline(residual, col = "steelblue", lwd = 2)
plot(fit.value, residual, col = "steelblue", pch = 20, xlab = "Sisaan",
ylab = "fitted Values", main = "Sisaan vs fitted Values")
abline(a = 0, b = 0, lwd = 2)
hist(residual, col = "steelblue",main = "Histogram Residual")
plot(seq(1,12,1), residual, col = "steelblue", pch = 20,
xlab = "Sisaan", ylab = "Order", main = "Sisaan vs Order")
lines(seq(1,12,1), residual, col = "red")
abline(a = 0, b = 0, lwd = 2)
Plot ACF dan PACF Plot fungsi autokorelasi (ACF) dan fungsi autokorelasi parsial (PACF) dapat digunakan untuk memeriksa apakah terdapat korelasi antarpeubah. Kedua fungsi ini dicirikan dengan adanya lag, yaitu beda urutan sisaan dengan sisaan sebelumnya.Apabila garis vertikal pada tiap lag memotong garis (putus-putus) horizontal, maka autokorelasi dianggap signifikan kecuali untuk lag 0 pada plot ACF.
par(mfrow = c(1,2))
acf(residual)
pacf(residual)
Dapat dilihat dari plot ACF dan PACF di atas bahwa tidak terdapat garis vertikal yang memotong garis horizontal di tiap lag. Artinya, autokorelasi dianggap tidak signifikan. Akan tetapi hal ini perlu dipastikan dengan uji formal.
Dengan Uji Formal
#Durbin Watson
lmtest::dwtest(model, alternative = 'two.sided')
##
## Durbin-Watson test
##
## data: model
## DW = 0.91414, p-value = 0.009523
## alternative hypothesis: true autocorrelation is not 0
#Breusch-Godfrey
bgtest(IPM ~ Tahun, data=data, order=1)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: IPM ~ Tahun
## LM test = 2.6078, df = 1, p-value = 0.1063
#Run 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
2.3 Penanganan Autokorelasi
2.3.1 Metode Cochrane-Orcutt
model.co <- orcutt::cochrane.orcutt(model,convergence=3,max.iter = 100)
model.co
## Cochrane-orcutt estimation for first order autocorrelation
##
## Call:
## lm(formula = y ~ x, data = data)
##
## number of interaction: 50
## rho 0.860526
##
## Durbin-Watson statistic
## (original): 0.91414 , p-value: 4.761e-03
## (transformed): 1.80608 , p-value: 2.312e-01
##
## coefficients:
## (Intercept) x
## -776.41145 0.42013
Mencari Nilai Rho
rho <- model.co$rho
rho
## [1] 0.8605263
Menghilangkan Amatan Terkecil dan Terbesar
y[-1]
## [1] 66.65 67.26 67.92 68.49 69.15 69.76 70.34 70.90 71.66 71.93 72.24
y[-12]
## [1] 66.00 66.65 67.26 67.92 68.49 69.15 69.76 70.34 70.90 71.66 71.93
Transformasi terhadap y dan x
#transformasi terhadap y dan x
y.trans <- y[-1]-y[-12]*rho
x.trans <- x[-1]-x[-12]*rho
Model Baru
modelcorho <- lm(y.trans~x.trans)
summary(modelcorho)
##
## Call:
## lm(formula = y.trans ~ x.trans)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.17410 -0.06012 0.01239 0.04960 0.26850
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -108.28900 24.67104 -4.389 0.00175 **
## x.trans 0.42013 0.08747 4.803 0.00097 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.128 on 9 degrees of freedom
## Multiple R-squared: 0.7193, Adjusted R-squared: 0.6882
## F-statistic: 23.07 on 1 and 9 DF, p-value: 0.0009697
Uji DW
lmtest::dwtest(modelcorho,alternative = 'two.sided')
##
## Durbin-Watson test
##
## data: modelcorho
## DW = 1.8061, p-value = 0.4624
## alternative hypothesis: true autocorrelation is not 0
Transformasi Balik
cat("IPM = ", coef(modelcorho)[1]/(1-rho), "+", coef(modelcorho)[2]," Tahun", sep = "") #persamaan regresi setelah di transformasi ke persamaan awal
## IPM = -776.4114+0.4201304 Tahun
2.3.2 Metode Hidreth-Lu
Mendefinisikan Fungsi Hidreth-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))
}
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)
## rho SSE
## 1 0.10 0.2081
## 2 0.20 0.1953
## 3 0.30 0.1840
## 4 0.40 0.1742
## 5 0.50 0.1658
## 6 0.60 0.1588
## 7 0.70 0.1532
## 8 0.80 0.1491
## 9 0.90 0.1465
## 10 0.91 0.1463
## 11 0.92 0.1461
## 12 0.93 0.1460
## 13 0.94 0.1458
## 14 0.95 0.1457
## 15 0.96 0.1456
## 16 0.97 0.1455
## 17 0.98 0.1454
## 18 0.99 0.1453
Grafik Rho dan SSE
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)
#### Rho Optimum
r <- seq(0.9, 1.0, 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.90 0.1465
## 2 0.91 0.1463
## 3 0.92 0.1461
## 4 0.93 0.1460
## 5 0.94 0.1458
## 6 0.95 0.1457
## 7 0.96 0.1456
## 8 0.97 0.1455
## 9 0.98 0.1454
## 10 0.99 0.1453
## 11 1.00 0.2196
Model Terbaik
modelhl <- hildreth.lu.func(0.99, model)
summary(modelhl)
##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.19190 -0.05519 0.01456 0.04415 0.27057
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 43.420 25.624 1.694 0.124
## x -1.993 1.212 -1.645 0.134
##
## Residual standard error: 0.1271 on 9 degrees of freedom
## Multiple R-squared: 0.2312, Adjusted R-squared: 0.1458
## F-statistic: 2.707 on 1 and 9 DF, p-value: 0.1343
Pendeteksian Autokorelasi
lmtest::dwtest(modelhl)
##
## Durbin-Watson test
##
## data: modelhl
## DW = 2.0137, p-value = 0.3572
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::bgtest(modelhl)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelhl
## LM test = 0.068622, df = 1, p-value = 0.7934
Transformasi Balik
cat("IPM = ", coef(modelhl)[1]/(1-0.99), "+", coef(modelhl)[2]," Tahun", sep = "") #persamaan regresi setelah di transformasi ke persamaan awal
## IPM = 4341.98+-1.993455 Tahun