2022-09-09

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