Pendeteksian dan Penanganan Autokorelasi pada Regresi Linear
1. Pendahuluan
Analisis regresi linear merupakan suatu kajian dari hubungan antara satu peubah respon, dengan satu atau lebih peubah lain. Autokorelasi adalah salah satu pelanggaran asumsi yang terdapat pada regresi linear. Autokorelasi muncul ketika hasil pada amatan yang berdekatan cenderung terlalu mirip (korelasi positif) atau terlalu berbeda (korelasi negatif). Autokorelasi seringkali menjadi penyebab ketidakbebasan pada galat. Alasan amatan tidak saling bebas adalah:
- Pengukuran berulang dilakukan ke subjek yang sama.
- Amatan berkorelasi dalam waktu.
- Amatan berkorelasi dalam tempat.
- Pengaturan sistematis dari unit percobaan.
Pada tugas ini, akan dilakukan pendeteksian autokorelasi hingga penanganannya.
1.1 Library yang digunakan
library(dplyr)
library(TTR)
library(lmtest) # uji-Durbin Watson
library(orcutt) # Cochrane-Orcutt
library(HoRM) # Hildreth Lu
library(corrplot)
library(googlesheets4)
library(knitr)
library(ggplot2)1.2 Data yang digunakan
Data yang digunakan adalah data Indeks Pembangunan Manusia di Provinsi Bali pada tahun 2010 hingga 2021. Indeks Pembangunan Manusia (IPM) menjelaskan bagaimana penduduk dapat mengakses hasil pembangunan dalam memperoleh pendapatan, kesehatan, pendidikan, dan sebagainya. IPM dibentuk oleh 3 (tiga) dimensi dasar:
Umur panjang dan hidup sehat;
Pengetahuan; dan
Standar hidup layak.
Isi dari data yang diambil dapat dilihat sebagai berikut:
gs4_deauth()
df <- read_sheet("https://docs.google.com/spreadsheets/d/1q_Oyp5KkIIMUpBcC7uzEr3lvdXcPZDgNrp_D9fKBzIg/edit?usp=sharing")
kable(df, align="l")| Tahun | IPM_Bali |
|---|---|
| 2010 | 70.10 |
| 2011 | 70.87 |
| 2012 | 71.62 |
| 2013 | 72.09 |
| 2014 | 72.48 |
| 2015 | 73.27 |
| 2016 | 73.65 |
| 2017 | 74.30 |
| 2018 | 74.77 |
| 2019 | 75.38 |
| 2020 | 75.50 |
| 2021 | 75.69 |
1.3 Eksplorasi Data
ggplot(df, aes(x=Tahun, y=IPM_Bali)) +
geom_line(lwd=1.2,col="red3") +
labs(x="Year",y = "Indeks Pembangunan",
title="Time Series Plot Indeks Pembangunan Manusia Bali",
subtitle = "Periode 2010 - 2021")+
theme_bw()+
theme(plot.title = element_text(size = 14L,
face = "bold",
hjust = 0.5),
plot.subtitle = element_text(size = 11L,
hjust = 0.5))+
geom_point(size=2) +
geom_text(aes(label=paste(IPM_Bali,"%")), vjust=-0.8, size=3)Syntax di atas menghasilkan output line chart data Indeks Pembangunan Manusia (IPM) Provinsi Bali pada tahun 2010 hingga 2021. Pada tahun 2020 dan 2021, kenaikan IPM Bali relatif jauh lebih rendah dibandingkan kenaikan pada tahun-tahun lainnya. Hal ini terjadi karena pandemi COVID-19 yang memberikan dampak luas terhadap berbagai aspek dalam kehidupan masyarakat, tidak terkecuali IPM. Pertumbuhan IPM pada tahun 2020 mengalami perlambatan dengan hanya tumbuh sebesar 0.12 persen, cukup melambat dibandingkan pertumbuhan tahun sebelumnya yang mencapai 0.61 persen.
Hubungan antara peubah tahun dan IPM dapat dilihat dari korelasinya menggunakan syntax berikut:
corrplot(corr=cor(df), method = "number", type = "upper")Dapat terlihat bahwa terdapat korelasi yang sangat kuat antara Tahun dan IPM di Bali, yaitu 0.99.
1.4 Model Regresi Linear
Model regresi linear sederhana untuk populasi dapat ditunjukan:
\[ Y=\beta_0+\beta_1X+\varepsilon \]
yang dapat diduga dalam bentuk fungsi penduga parameter dan residual:
\[ Y=b_0+b_1X+e \]
Pendugaan model regresi dengan Metode Kuadrat Terkecil dapat dilakukan dengan menggunakan syntax sebagai berikut:
model <- lm(IPM_Bali~Tahun, data = df)
summary(model)##
## Call:
## lm(formula = IPM_Bali ~ Tahun, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.4800 -0.1125 0.0800 0.1725 0.2500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -974.75000 41.22291 -23.65 4.15e-10 ***
## Tahun 0.52000 0.02045 25.42 2.03e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2446 on 10 degrees of freedom
## Multiple R-squared: 0.9848, Adjusted R-squared: 0.9832
## F-statistic: 646.4 on 1 and 10 DF, p-value: 2.033e-10
Dari output di atas, didapat intersep model (\(b_0\)) yaitu sebesar -974.75 dan koefisien (\(b_1\)) yaitu sebesar 0.52. Dengan masing-masing uji t-parsial penduga parameter memiliki nilai \(P-Value< 0.05\) yang mengindikasikan bahwa kedua penduga parameter ini signifikan. Sehingga, dapat disimpulkan bahwa model regresi yang dibentuk dari data IPM adalah sebagai berikut:
\[ Y=-974.75+0.52X+e \]
Dengan nilai \(R^2\) sebesar 98.48%.
2. Mendeteksi Autokorelasi
Pendeteksian autokorelasi dapat dilakukan dengan 2 cara, yaitu secara eksploratif (Subjektif) dan secara formal (Objektif).
2.1 Prosedur Eksploratif
2.1.1 Plot residual vs order
Uji eksploratif dapat dilakukan dengan melihat beberapa chart atau plot dari sisaan. Syntax yang digunakan untuk mendapat hal tersebut adalah sebagai berikut:
resi <- residuals(model)
par(mfrow = c(2,2))
plot(model, which=1:2)
hist(resi, col = "steelblue", main = "Histogram Sisaan")
plot(resi, type="o",
ylab = "Sisaan", xlab = "Order", main = "Sisaan vs Order")
abline(h = 0, col='red')Terdapat 4 output yang dihasilkan dari syntax di atas, yaitu
Residuals vs Fitted, Normal Q-Q Plot,
Histogram sisaan, dan sisaan vs order. Keempat
chart di atas diperlukan untuk memeriksa asumsi regresi. Dalam hal ini,
fokus kita adalah pemeriksaan kebebasan galat yang terdapat pada plot
keempat, yaitu plot Sisaan vs Order. Dari plot tersebut,
terdapat pola naik turun yang mengindikasikan bahwa sisaan dari galatnya
tidak saling bebas atau terdapat autokorelasi.
2.1.2 ACF dan PACF
Selain plot Sisaan vs Order, dapat dilihat Autocorrelation Function (ACF) dan plot Partial Autocorrelation Function (PACF). Pengujian kedua plot ini menggunakan lag sebagai pembandingnya. Lag adalah beda urutan suatu sisaan dengan sisaan sebelumnya. Misal, lag 1 berarti tiap sisaan dibandingkan dengan sisaan satu observasi sebelumnya. Jika garis vertikal di tiap lag lebih tinggi dari garis biru horizontal, maka dianggap terjadi autokorelasi di lag tersebut (kecuali lag 0 di plot ACF).
acf(resi)pacf(resi)Baik dari plot ACF maupun plot PACF, tidak ada garis vertikal di lag tertentu yang melebihi tinggi garis biru horizontal. Artinya, menurut kedua plot ini, tidak terdapat autokorelasi pada model.
2.2 Uji Formal
Uji formal untuk menentukan kebebasan galat percobaan menggunakan
Durbin Watson Test, Breush-Godfrey Test, dan
Runs Test. Secara umum, Hipotesis yang diuji pada ketiga
uji tersebut adalah:
\(H_0:\) Tidak ada autokorelasi
\(H_1:\) Ada autokorelasi
2.2.1 Durbin Watson Test
Salah satu uji formal yang biasa digunakan untuk menguji kebebasan
galat adalah Uji Durbin Watson. Uji ini hanya dapat
memperhatikan ketidakbebasan pada lag 1.
Adapun asumsi-asumsi yang perlu dipenuhi adalah:
- Terdapat intersep pada model regresi
- Seluruh peubah penjelas bersifat tetap (fixed) pada penarikan contoh berulang
- Galat mengikuti skema Autoregressive (AR) ordo ke-1 : \[u_t=\rho u_{t-1}+v_t\]dengan \(\rho\) adalah koefisien autokorelasi yang bernilai -1 s.d 1 dan \(v_t\) adalah komponen sisaan yang memenuhi asumsi kebebasan dan kehomogenan.
- Galat menyebar normal
- Lag dari peubah respon tidak disertakan sebagai peubah penjelas dalam model
Jika \(e_k\) adalah residual yang
diurutkan berdasarkan waktu, statistik Durbin Watson
adalah:
\[ d=\frac{\sum_{t=1}^{n}(e_t-e_{t-1})^2}{\sum_{t=1}^{n}e_t^2}; 0\le d\le4 \]
Interpretasi dari nilai statistik di atas jika dilakukan secara manual yaitu:
Jika \(d\) mendekati 0, maka semakin besar kemungkinan adanya autokorelasi positif
Jika \(d\) mendekati 2, maka belum cukup bukti adanya autokorelasi
Jika \(d\) mendekati 0, maka semakin besar kemungkinan adanya autokorelasi negatif
Pengujian Durbin-Watson Test:
lmtest::dwtest(model, alternative = 'two.sided')##
## Durbin-Watson test
##
## data: model
## DW = 0.87546, p-value = 0.007054
## alternative hypothesis: true autocorrelation is not 0
Dari hasil uji di atas, dapat terlihat bahwa nilai \(P-Value<0.05\), sehingga \(H_0\) ditolak. Artinya, ada
autokorelasi pada galat menurut uji
Durbin-Watson.
2.2.2 Breusch-Godfrey Test
Seperti dijelaskan sebelumnya, uji Durbin Watson hanya dapat menguji
autokorelasi lag 1. Padahal, terlihat di plot ACF dan PACF bahwa
autokorelasi dapat muncul di lag lainnya. Salah satu alternatif yang
dapat dilakukan adalah dengan Breusch-Gofrey Test.
Pengujian Breusch-Godfrey Test:
bgtest(IPM_Bali ~ Tahun, data=df, order=1)##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: IPM_Bali ~ Tahun
## LM test = 1.8283, df = 1, p-value = 0.1763
Dari hasil uji di atas, dapat terlihat bahwa nilai \(P-Value>0.05\), sehingga \(H_0\) tidak ditolak. Artinya, tidak
ada autokorelasi pada galat menurut uji
Breusch-Godfrey.
2.2.3 Runs Test
Runs didefinisikan sebagai serangkaian nilai yang meningkat atau serangkaian nilai yang menurun. Misalnya ada 20 data, jika nilai data naik dari nilai sebelumnya dinotasikan positif (+), dan sebaliknya dinotasikan negatif (-). Jika proses tersebut menghasilkan + + + + − − − + + + − − + + + + - - - -, ada 6 run, 3 positif dan 3 negatif. Sebuah run merupakan kumpulan tanda positif atau negatif, dinotasikan sebagai \(R\). Dengan statistik Run berupa nilai Z sebagai berikut:
\[ Z=\frac{R-\bar{R}}{s_R} \]
Run Test akan menolak \(H_0\) jika \[|Z|>Z_{1-\alpha/2}\]
Pengujian Runs Test:
lawstat::runs.test(resid(model), alternative = 'two.sided')##
## Runs Test - Two sided
##
## data: resid(model)
## Standardized Runs Statistic = 0, p-value = 1
Dari hasil uji di atas, dapat terlihat bahwa nilai \(P-Value>0.05\), sehingga \(H_0\) tidak ditolak. Artinya, tidak
ada autokorelasi pada galat menurut uji Runs.
3. Penanganan Aurokorelasi
Dari ketiga uji di atas, masih terdapat satu uji—yaitu uji
Durbin-Watson—yang menolak \(H_0\) atau menyatakan bahwa ada
autokorelasi pada galat. Maka dari itu, akan dilakukan penanganan
terhadap autokorelasi ini dengan menggunakan dua metode, yaitu
Cochrane-Orcutt dan Hildreth-lu.
3.1 Cochrane-Orcutt
Metode Cochrane-Orcutt dilakukan untuk menduga koefisien
autokorelasi (\(\rho\)) dengan
memanfaatkan nilai error pada model regresi. Setelah ditemukan nilai
duga bagi \(\rho\), maka langkah
selanjutnya adalah dengan melakukan transformasi. Transformasinya adalah
sebagai berikut:
\[ y_t^*=y_t-\hat{p}y_{t-1};x_t^*=z_t-\hat{p}x_{t-1} \]
Penanganan Cochrane-Orcutt:
#Interactive method using to solve first order autocorrelation problems.
modelco <- orcutt::cochrane.orcutt(model,convergence = 7,max.iter = 10^6)
modelco## Cochrane-orcutt estimation for first order autocorrelation
##
## Call:
## lm(formula = IPM_Bali ~ Tahun, data = df)
##
## number of interaction: 234
## rho 0.73534
##
## Durbin-Watson statistic
## (original): 0.87546 , p-value: 3.527e-03
## (transformed): 2.13019 , p-value: 4.363e-01
##
## coefficients:
## (Intercept) Tahun
## -682.274737 0.375122
# Mencari nilai optimum bagi rho
rho <- modelco$rho
rho## [1] 0.7353396
Telah didapat nilai rho (\(\rho\)) optimum sebesar \(0.7353\). Selanjutnya akan dilakukan transformasi peubah X dan Y menggunakan nilai \(\rho\).
# Membuat variabel baru
y <- df$IPM_Bali
x <- df$Tahun#transformasi terhadap y dan x
(y.trans <- y[-1]-y[-12]*rho)## [1] 19.32270 19.50649 19.42498 19.46937 19.97259 19.77167 20.14224 20.13427
## [9] 20.39866 20.07010 20.17186
(x.trans <- x[-1]-x[-12]*rho)## [1] 532.9675 533.2321 533.4968 533.7615 534.0261 534.2908 534.5554 534.8201
## [9] 535.0848 535.3494 535.6141
#model baru
modelcorho <- lm(y.trans~x.trans)
summary(modelcorho) ##
## Call:
## lm(formula = y.trans ~ x.trans)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.18524 -0.15403 -0.03408 0.13616 0.24765
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -180.57113 33.81062 -5.341 0.000468 ***
## x.trans 0.37512 0.06328 5.928 0.000221 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1757 on 9 degrees of freedom
## Multiple R-squared: 0.7961, Adjusted R-squared: 0.7734
## F-statistic: 35.14 on 1 and 9 DF, p-value: 0.0002213
Didapat model transformasi dengan intersep sebesar \(-180.571\) dan koefisien x.trans sebesar \(0.375\).
lmtest::dwtest(modelcorho,alternative = 'two.sided') ##
## Durbin-Watson test
##
## data: modelcorho
## DW = 2.1302, p-value = 0.8726
## alternative hypothesis: true autocorrelation is not 0
Berdasarkan hasil di atas, didapat nilai \(P-Value=0.8726>0.05\), sehingga \(H_0\) tidak ditolak. Artinya, tidak
ada autokorelasi atau terbukti bahwa autokorelasi telah
berhasil ditangani dengan metode Cochrane-Orcutt.
Selanjutnya akan dilakukan transformasi balik untuk mendapatkan model
regresi deret waktu terbaru.
(b0 <- modelcorho$coefficients[1]/(1-rho))## (Intercept)
## -682.2747
(b1 <- modelcorho$coefficients[2])## x.trans
## 0.3751221
Setelah dilakukan transformasi balik, didapat model regresi yang baru yaitu:
\[ \hat{y_t}=-682.275+0.375x_t \]
3.2 Hildreth-lu
Sama seperti metode Cochrane-Orcutt, Prosedur
Hildreth-Lu juga menduga nilai parameter autokorelasi \(\rho\) untuk digunakan dalam transformasi.
Nilai \(\rho\) dipilih sedemikian
sehingga SSE untuk model regresi yang ditransformasi mencapai titik
minimumnya.
Penanganan Hildreth-lu:
# 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,40 memiliki SSE Terkecil#grafik rho dan SSE
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)Pada iterasi pertama dapat terlihat bahwa \(\rho\) optimum yang menghasilkan SES terkecil berada di sekitar \(0.7\). Untuk hasil yang lebih akurat, selang dapat diperkecil.
#rho optimal di sekitar 0.7
r <- seq(0.68, 0.75, by= 0.01)
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4)#grafik SSE optimum
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)Dari grafik di atas, dapat terlihat bahwa nilai \(\rho\) optimum berada di \(\rho=0.74\). Sehingga nilai ini akan digunakan untuk merumuskan model terbaik pada tahap selanjutnya:
# Model terbaik
modelhl <- hildreth.lu.func(0.74, model)
summary(modelhl)##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.18566 -0.15366 -0.03286 0.13587 0.24747
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -175.77964 33.81212 -5.199 0.000565 ***
## x 0.37206 0.06442 5.776 0.000267 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1757 on 9 degrees of freedom
## Multiple R-squared: 0.7875, Adjusted R-squared: 0.7639
## F-statistic: 33.36 on 1 and 9 DF, p-value: 0.0002675
# Deteksi autokorelasi
lmtest::dwtest(modelhl)##
## Durbin-Watson test
##
## data: modelhl
## DW = 2.1385, p-value = 0.4421
## alternative hypothesis: true autocorrelation is greater than 0
Pada uji Durbin-Watson di atas, dapat terlihat bahwa
nilai \(P-Value=0.4421>0.05\)sehingga \(H_0\) tidak ditolak. Artinya, tidak
ada autokorelasi atau terbukti bahwa autokorelasi telah
berhasil ditangani dengan metode Hidreth-lu. Selanjutnya
akan dilakukan transformasi balik untuk mendapatkan model regresi deret
waktu terbaru.
# Transformasi Balik
cat("IPM = ", coef(modelhl)[1]/(1-0.74), " + ", coef(modelhl)[2]," tahun", sep = "")## IPM = -676.0755 + 0.3720559 tahun
Setelah dilakukan transformasi balik, didapat model regresi yang baru yaitu:
\[ \hat{y_t}=-676.0755+0.372x_t \]
4. Kesimpulan
Setelah dilakukan pendeteksian autokorelasi pada regresi linear IPM
Provinsi Bali terhadap Tahun, uji Durbin-Watson menyatakan
bahwa terdapat autokorelasi pada galat model. Oleh karenanya, dilakukan
penanganan autokorelasi terhadap model tersebut dengan cara
transformasi. Transformasi ini memerlukan nilai \(\rho\) optimum yang mana dapat dicari
dengan dua metode, yaitu Cochrane-Orcutt dan
Hildreth-Lu. Setelah ditemukan nilai \(\rho\) optimum dan dilakukan transformasi,
masalah autokorelasi pada akhirnya dapat dihilangkan.