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.