Pendeteksian dan Penanganan Autokorelasi pada Data IPM Provinsi DI Yogyakarta Periode Tahun 2010 - 2021

Pada tahun 1990, United Nations Development Programme (UNDP) menetapkan sebuah ukuran standar pembangunan manusia, yaitu Human Development Index (HDI) atau Indeks Pembangunan Manusia (IPM). Indeks Pembangunan Manusia memberi informasi tentang tingkat pembangunan sumber daya manusia di suatu wilayah sehingga dapat digunakan sebagai tolok ukur angka kesejahteraan suatu wilayah. UNDP menetapkan tiga komponen penyusun IPM, yaitu Angka Harapan Hidup, Angka Harapan Lama Sekolah dan Rata-Rata Lama Sekolah, serta Produk Nasional Bruto (PNB) per Kapita.

Packages yang Digunakan

Terdapat 9 packages yang digunakan, di antaranya:

readxl dplyr forecast TTR tseries lmtest lawstat orcutt HoRM

Data

Data yang digunakan merupakan data IPM Provinsi DI Yogyakarta tahun 2010 sampai dengan 2021 yang diperoleh dari situs resmi Badan Pusat Statistik (BPS). Data terdiri atas dua peubah, yaitu IPM sebagai peubah respon (Y) dan Tahun sebagai peubah penjelas (X).

yogya <- read_excel("C:/Users/ASUS/Downloads/Tugas Individu MPDW.xlsx", sheet = 3)
head(yogya)
## # A tibble: 6 x 2
##   Tahun   IPM
##   <dbl> <dbl>
## 1  2010  75.4
## 2  2011  75.9
## 3  2012  76.2
## 4  2013  76.4
## 5  2014  76.8
## 6  2015  77.6

Eksplorasi Data

Diagram Pencar

x <- yogya$Tahun
y <- yogya$IPM

plot(x,y,pch = 20, col = "#336699", 
     main = "Scatterplot IPM Provinsi DI Yogyakarta\n Tahun 2010 - 2021",
     ylab = "IPM", xlab = "Tahun")

Berdasarkan scatterplot di atas, terlihat adanya hubungan positif antara periode waktu (tahun) dengan nilai IPM yang ditunjukkan oleh titik-titik pada plot berhubungan linear positif. Artinya, peningkatan tahun akan turut meningkatkan nilai IPM.

Korelasi

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

Korelasi bernilai 0.9879122 atau mendekati 1. Hal ini menunjukkan bahwa terdapat hubungan linear positif yang kuat antara kedua peubah.

Model Regresi

model <- lm(y~x, data = yogya)
summary(model)
## 
## Call:
## lm(formula = y ~ x, data = yogya)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.3998 -0.1889  0.0090  0.2036  0.3752 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -902.11533   48.63008  -18.55 4.47e-09 ***
## x              0.48626    0.02413   20.15 1.99e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2885 on 10 degrees of freedom
## Multiple R-squared:  0.976,  Adjusted R-squared:  0.9736 
## F-statistic: 406.2 on 1 and 10 DF,  p-value: 1.992e-09

Berdasarkan ringkasan model dapat diketahui bahwa hasil uji-F memiliki p-value = 1.992e-09 < α = 0.05 sehingga model layak untuk digunakan. Selain itu, seluruh peubah signifikan dalam model. Selanjutnya, dapat dilihat nilai koefisien determinasi yang besar, yaitu 0.976. Artinya, keragaman nilai IPM dapat dijelaskan oleh peubah tahun sebesar 97.6%. Oleh karena itu, dapat disimpulkan bahwa model regresi tersebut merupakan model yang baik.

Deteksi dan Penanganan Autokorelasi

Autokorelasi merupakan kondisi di mana terdapat hubungan antara sisaan satu pengamatan dengan pengamatan lain pada model regresi. Model regresi yang baik merupakan model yang bebas dari autokorelasi.

Deteksi Autokorelasi

Autokorelasi dapat dideteksi secara eksploratif dengan menggunakan plot sisaan, autocorrelation function (ACF), dan partial autocorrelation function (PACF).

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 = "Fitted Values", 
     ylab = "Sisaan", 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 = "Order", ylab = "Sisaan", main = "Sisaan vs Order")
lines(seq(1,12,1), resi1, col = "red")
abline(a = 0, b = 0, lwd = 2)

Terlihat bahwa normal Q-Q Plot cenderung menyebar dengan mengikuti garis lurus yang menandakan sisaan menyebar normal. Hasil plot sisaan vs fitted value menunjukkan lebar pita sisaan relatif sama sehingga ragam sisaan homogen. Hasil plot sisaan vs order memperlihatkan tebaran membentuk pola tertentu yang mengindikasikan tidak terpenuhinya asumsi non-autokorelasi.

2. ACF dan PACF Plot

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

Berdasarkan plot ACF dan PACF, terlihat bahwa terdapat beberapa garis yang melewati batas sehingga dapat diasumsikan ada autokorelasi. Untuk memastikan, dilakukan uji formal yang terdiri atas Durbin Watson Test, Breusch-Godfrey Test, dan Run’s Test.

1. Durbin Watson Test

H0: tidak ada autokorelasi

H1: ada autokorelasi

dwtest(model, alternative = 'two.sided')
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 0.77348, p-value = 0.002881
## alternative hypothesis: true autocorrelation is not 0

Berdasarkan hasil uji Durbin Watson, diperoleh nilai p-value (0.002881) < alpha (0.05) sehingga H0 ditolak. Cukup bukti untuk menyatakan bahwa terdapat autokorelasi.

2. Breusch-Godfrey Test

H0: tidak ada autokorelasi

H1: ada autokorelasi

bgtest(model)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model
## LM test = 4.2573, df = 1, p-value = 0.03908

Berdasarkan hasil uji Breusch-Godfrey, diperoleh nilai p-value (0.03908) < alpha (0.05) sehingga H0 ditolak. Cukup bukti untuk menyatakan bahwa terdapat autokorelasi.

3. Run’s Test

H0: tidak ada autokorelasi

H1: ada autokorelasi

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

Berdasarkan hasil Runs Test, diperoleh nilai p-value (0.06928) > alpha (0.05) sehingga H0 tidak ditolak. Tidak cukup bukti untuk menyatakan bahwa terdapat autokorelasi.

Berdasarkan hasil uji formal, diperoleh kesimpulan bahwa terdeteksi adanya autokorelasi pada data IPM DI Yogyakarta. Oleh karena itu, akan dicobakan penanganan terhadap autokorelasi dengan menggunakan metode Cochrane-Orcutt dan Hildreth-Lu.

Penanganan Autokorelasi

Autokorelasi dapat ditangani dengan beberapa metode, di antaranya adalah metode Cochrane-Orcutt dan Hildret-Lu. Metode Cochrane-Orcutt dilakukan dengan menghitung nilai ρ^ (koefisien autokorelasi) menggunakan nilai error pada model regresi. Untuk mendapatkan nilai ρ^ yang menjamin tidak terdapat masalah autokorelasi pada metode Cochrane-Orcutt, dalam mencari nilai ρ^ dilakukan secara berulang untuk mendapatkan nilai yang sudah konvergen.

1. Cochrane-Orcutt

#Interactive method using to solve first order autocorrelation problems
modelco <- orcutt::cochrane.orcutt(model)
modelco
## Cochrane-orcutt estimation for first order autocorrelation 
##  
## Call:
## lm(formula = y ~ x, data = yogya)
## 
##  number of interaction: 16
##  rho 0.681705
## 
## Durbin-Watson statistic 
## (original):    0.77348 , p-value: 1.44e-03
## (transformed): 1.06089 , p-value: 1.381e-02
##  
##  coefficients: 
## (Intercept)           x 
## -845.830309    0.458316
#rho optimum
rho <- modelco$rho
y
##  [1] 75.37 75.93 76.15 76.44 76.81 77.59 78.38 78.89 79.53 79.99 79.97 80.22
y[-1]
##  [1] 75.93 76.15 76.44 76.81 77.59 78.38 78.89 79.53 79.99 79.97 80.22
y[-12]
##  [1] 75.37 75.93 76.15 76.44 76.81 77.59 78.38 78.89 79.53 79.99 79.97
#transformasi terhadap y dan x
(y.trans <- y[-1]-y[-12]*rho)
##  [1] 24.54993 24.38817 24.52820 24.70050 25.22827 25.48654 25.45800 25.75033
##  [9] 25.77404 25.44045 25.70409
(x.trans <- x[-1]-x[-12]*rho)
##  [1] 640.7738 641.0921 641.4104 641.7287 642.0470 642.3653 642.6836 643.0019
##  [9] 643.3202 643.6385 643.9568

Model dengan Peubah Hasil Transformasi

modelcorho <- lm(y.trans~x.trans)
summary(modelcorho)
## 
## Call:
## lm(formula = y.trans ~ x.trans)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.32566 -0.20940  0.09673  0.17268  0.30395 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -269.22393   46.78322  -5.755 0.000275 ***
## x.trans        0.45832    0.07283   6.293 0.000142 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2431 on 9 degrees of freedom
## Multiple R-squared:  0.8148, Adjusted R-squared:  0.7942 
## F-statistic:  39.6 on 1 and 9 DF,  p-value: 0.0001422

Cek Autokorelasi

dwtest(modelcorho,alternative = 'two.sided')
## 
##  Durbin-Watson test
## 
## data:  modelcorho
## DW = 1.0609, p-value = 0.02762
## alternative hypothesis: true autocorrelation is not 0
bgtest(modelcorho)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelcorho
## LM test = 2.1945, df = 1, p-value = 0.1385
runs.test(resid(modelcorho), alternative = 'two.sided')
## 
##  Runs Test - Two sided
## 
## data:  resid(modelcorho)
## Standardized Runs Statistic = -1.3416, p-value = 0.1797

Berdasarkan hasil Breusch-Godfrey Test dan Runs Test, diperoleh p-value > 0.05 sehingga H0 tidak ditolak. Belum cukup bukti untuk menyatakan bahwa terdapat autokorelasi pada taraf 5%

Transformasi Balik

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

2. Hildreth-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))
}

#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.70 memiliki SSE Terkecil
##     rho    SSE
## 1  0.10 0.7394
## 2  0.20 0.6742
## 3  0.30 0.6213
## 4  0.40 0.5806
## 5  0.50 0.5522
## 6  0.60 0.5361
## 7  0.70 0.5322
## 8  0.80 0.5406
## 9  0.90 0.5612
## 10 0.91 0.5639
## 11 0.92 0.5668
## 12 0.93 0.5698
## 13 0.94 0.5729
## 14 0.95 0.5761
## 15 0.96 0.5795
## 16 0.97 0.5829
## 17 0.98 0.5865
## 18 0.99 0.5902
#grafik rho dan SSE
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)

Diperoleh nilai rho optimum di sekitar 0.70.

#rho optimal di sekitar 0.7
r <- seq(0.6, 0.8, by= 0.01)
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4) #0.68 memiliki SSE Terkecil
##     rho    SSE
## 1  0.60 0.5361
## 2  0.61 0.5351
## 3  0.62 0.5343
## 4  0.63 0.5336
## 5  0.64 0.5331
## 6  0.65 0.5326
## 7  0.66 0.5323
## 8  0.67 0.5321
## 9  0.68 0.5320
## 10 0.69 0.5320
## 11 0.70 0.5322
## 12 0.71 0.5325
## 13 0.72 0.5329
## 14 0.73 0.5334
## 15 0.74 0.5341
## 16 0.75 0.5349
## 17 0.76 0.5358
## 18 0.77 0.5368
## 19 0.78 0.5379
## 20 0.79 0.5392
## 21 0.80 0.5406
#grafik SSE optimum
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)

Diperoleh nilai rho optimum 0.68.

# Model terbaik
modelhl <- hildreth.lu.func(0.68, model)
summary(modelhl)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.32527 -0.20946  0.09704  0.17256  0.30371 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -270.83558   46.78291  -5.789 0.000263 ***
## x              0.45858    0.07244   6.330 0.000136 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2431 on 9 degrees of freedom
## Multiple R-squared:  0.8166, Adjusted R-squared:  0.7962 
## F-statistic: 40.07 on 1 and 9 DF,  p-value: 0.000136

Cek Autokorelasi

dwtest(modelhl)
## 
##  Durbin-Watson test
## 
## data:  modelhl
## DW = 1.06, p-value = 0.01373
## alternative hypothesis: true autocorrelation is greater than 0
bgtest(modelhl)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelhl
## LM test = 2.1982, df = 1, p-value = 0.1382
runs.test(resid(modelhl), alternative = 'two.sided')
## 
##  Runs Test - Two sided
## 
## data:  resid(modelhl)
## Standardized Runs Statistic = -1.3416, p-value = 0.1797

Berdasarkan hasil Breusch-Godfrey Test dan Runs Test, diperoleh p-value > 0.05 sehingga H0 tidak ditolak. Belum cukup bukti untuk menyatakan bahwa terdapat autokorelasi pada taraf 5%

Transformasi Balik

cat("y = ", coef(modelhl)[1]/(1-0.68), "+", coef(modelhl)[2],"x", sep = "") #persamaan regresi setelah di transformasi ke persamaan awal
## y = -846.3612+0.4585795x

Daftar Pustaka

Chatterjee S, Hadi AS. 2012. Regression Analysis by Example. New Jersey (US): John Wiley and Son Inc.

Priyatno D. 2017. Panduan praktis olah data menggunakan SPSS. Yoyakarta: Penerbit Andi.