Tugas Individu Pertemuan 3 MPDW

Apa itu Uji Autokorelasi?

Suatu model regresi dapat dikatakan baik ketika terbebas dari autokorelasi. Autokorelasi dapat muncul karena adanya observasi yang berurutan sepanjang waktu dan saling berkaitan satu sama lainnya. Permasalahan ini muncul karena residual tidak bebas pada satu observasi ke observasi lainnya.

Uji autokorelasi bertujuan menunjukkan korelasi anggota observasi yang diurutkan berdasarkan waktu atau ruang. Uji autokorelasi juga bertujuan untuk menguji apakah dalam suatu model regresi linear ada korelasi antara residual pada periode t dengan kesalahan pada periode t-1 (sebelumnya). Jika terjadi korelasi, maka dinamakan ada masalah autokorelasi. Masalah ini timbul karena residual tidak bebas dari satu observasi ke obervasi lainnya.

Deteksi autokorelasi dapat dilakukan menggunakan metode grafik yaitu plot residual vs fitted value dan plot ACF PACF, serta menggunakan uji formal, yaitu uji Durbin-Watson. Selanjutnya, penanganan autokorelasi dapat dilakukan dengan metode Cochrane-Orcutt dan Hildreth-lu.

Yuk Coba Deteksi Autokorelasi!

Library yang Digunakan

Sebelum memulai analisis, kita perlu memastikan library yang dibutuhkan telah di-install dan diaktifkan.

install.packages(c("dplyr", "googlesheets4", "forecast", "TTR", "tseries", "lmtest", "orcutt", "HoRM"), dependencies = TRUE)

Kemudian panggil package tersebut dengan fungsi library().

library(dplyr)
library(googlesheets4)
library(forecast)
library(TTR)
library(tseries)
library(lmtest) #uji-Durbin Watson
library(orcutt) #Cochrane-Orcutt
library(HoRM)#Hildreth Lu

Data yang Digunakan

Pembangunan nasional menempatkan masyarakat Indonesia sebagai titik sentral pembangunan. Masyarakat yang unggul, baik dari segi kuantitas dan kualitas, dibutuhkan untuk dapat ikut berpartisipasi dalam proses pembangunan. Oleh karena itu, dirumuskan suatu konsep baru dalam mengukur pembangunan yang berorientasi pada manusia.

Indeks Pembangunan Manusia (IPM) merupakan pengukur perbandingan keberhasilan pembangunan manusia yang mencakup tiga dimensi kehidupan manusia. Di antaranya peluang hidup (diukur dengan indikator hidup yang sehat dan panjang umur yang diukur dengan harapan hidup saat kelahiran dalam tahun), pengetahuan (diukur dengan indikator angka tingkat baca tulis dan rata-rata lama sekolah dalam tahun), dan hidup layak (diukur dengan indikator logaritma natural dari produk domestik bruto per kapita dalam partisipasi daya beli per bulan dalam ribuan rupiah). Pada kesempatan kali ini saya akan mendalami data IPM di Provinsi Bali tahun 2010-2021.

Kemudian data akan dianalisis menggunakan model regresi dengan peubah β€˜Tahun’ sebagai X dan β€˜Nilai IPM’ sebagai Y. Berikut adalah baris data yang digunakan:

dataregresi <- read_sheet("https://docs.google.com/spreadsheets/d/1Mu7kwDJYFrT0PHi7PHYwMwdtbdnYFroITfXd2nepfrI/edit#gid=0")
dataregresi
## # A tibble: 12 Γ— 2
##    Tahun   IPM
##    <dbl> <dbl>
##  1  2010  70.1
##  2  2011  70.9
##  3  2012  71.6
##  4  2013  72.1
##  5  2014  72.5
##  6  2015  73.3
##  7  2016  73.6
##  8  2017  74.3
##  9  2018  74.8
## 10  2019  75.4
## 11  2020  75.5
## 12  2021  75.7

Selanjutnya, kolom Tahun dan IPM disimpan ke peubah X dan Y.

x <- dataregresi$Tahun
y <- dataregresi$IPM

Eksplorasi Data

Selanjutnya, akan dilakukan eksplorasi terhadap data regresi dengan mencari nilai korelasi antara peubah X dan Y, membuat model regresi linear, dan membuat scatterplot peubah X dan Peubah Y.

1. Mencari Korelasi

round(cor(x,y), 2)
## [1] 0.99

2. Membuat Scatterplot

#diagram pencar identifikasi model
plot(x,y,pch = 20, col = "blue", main = "Scatter Plot Tahun vs Nilai IPM", ylab = "Nilai IPM", xlab = "Tahun")

Dapat dilihat dengan jelas dari scatterplot di atas bahwa terdapat hubungan positif antara variabel tahun dan IPM. Nilai korelasi antara kedua variabel ini juga hampir sempurna, yaitu sebesar \(0.99\). Jika dianalisis lebih lanjut, plot di atas juga menunjukkan kenaikan nilai IPM yang cenderung lebih rendah pada tahun 2020 dan 2021, yaitu ketika COVID-19 menyerang Indonesia.

3. Membuat Model Regresi Deret Waktu

Model regresi yang digunakan adalah \(Y=Ξ²0+Ξ²1x\)

model <- lm(y~x, data = dataregresi)
summary(model)
## 
## Call:
## lm(formula = y ~ x, data = dataregresi)
## 
## 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 ***
## x              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

Berdasarkan hasil di atas, didapat model regresi linear adalah: \[ Y = -974.75 + 0.52x \] Artinya nilai dugaan rataan Y bertambah sebesar 0.52 jika X bertambah satu satuan atau bertambah satu tahun lamanya. Berdasarkan uji-t parsial untuk intersep dan koefisien X, terlihat bahwa kedua parameter berpengaruh nyata pada taraf 5%. Hal ini juga sejalan dengan hasil uji F yang dilakukan didapat bahwa \(Pβˆ’Value<0.05\), sehingga dapat disimpulkan bahwa terdapat minimal 1 variabel yang berpengaruh nyata secara signifikan pada taraf 5%. Nilai \(R^2=0.9848\) menujukkan bahwa variabel x (tahun) dapat menjelaskan keragaman variabel y (IPM) sebesar 98.48%.

Deteksi Autokorelasi

1. Plot Residual vs Order

#Residual 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(model, which=1)

hist(resi1, col = "steelblue")

plot(seq(1,12,1),resi1, col = "steelblue", pch = 20, 
     xlab = "Order", ylab = "Residual", main = "Residual vs Order")
lines(seq(1,12,1),resi1, col = "red")
abline(a = 0, b = 0, lwd = 2)

  1. Normal Q-Q Plot

    Berdasarkan hasil eksplorasi di atas, terlihat bahwa banyak amatan yang telah mendekati garis qq-plot distribusi normal. Sehingga secara eksploratif, dapat disimpulkan bahwa sisaan cukup menyebar normal.

  2. Residual vs Fitted Values

    Berdasarkan eksplorasi plot Residuals vs Fitted di atas, data sisaan cukup menyebar di sekitar titik 0, sehingga asumsi kehomogenan ragam masih terpenuhi.

  3. Histogram

    Berdasarkan histogram di atas, data terlihat cukup menjulur ke kiri.

  4. Residual vs Order

    Berdasarkan hasil eksplorasi di atas, titik pada plot kebebasan sisaan mayoritas bergerak di sekitar titik nol. Namun, terdapat beberapa titik amatan yang terletak cukup jauh dari titik nol. Sehingga, belum dapat disimpulkan apakah terdapat autokorelasi atau tidak.

2. Plot ACF PACF

Autocorrelation Function (ACF) merupakan korelasi antar data di dalam time series yang dipisahkan dalam lag. Lag adalah beda urutan suatu sisaan dengan sisaan sebelumnya. Artinya, jika lag =2, maka nilai t akan dikorelasikan dengan t+2 (artinya data pertama akan dikorelasikan dengan data ketiga), jika menggunakan lag=4, maka kemudian t akan dikorelasikan dengan t+4, begitu seterusnya. Hal ini biasanya ditulis dengan rumus korelasi (Xt, Xk+t) dengan k adalah jumlah lag dan t adalah nilainya.

Sama halnya autocorrelation, Partial Autocorrelation Function (PACF) juga menghitung korelasi antar data di time series. Perbedaannya adalah jika ACF mencari korelasi antara Xt dan Xt+k ( k = lag), maka PACF juga menghitung korelasi antara Xt dan Xt+k namun sebelumnya menghilangkan data antara Xt dan Xt+k terlebih dahulu. Berarti data yang dihilangkan adalah data Xt+1 sampai dengan Xt+k-1

par(mfrow = c(2,1))
acf(resi1)
pacf(resi1)

Berdasarkan kedua plot di atas, terlihat bahwa garis pada plot tidak melebihi garis batas biru. Hal ini mengindikasikan tidak adanya autokorelasi.

3. Uji Durbin-Watson

Tentang Uji Durbin-Watson

Pendeteksian autokorelasi dapat dilakukan dengan uji Durbin-Watson.

Asumsi pada Uji Durbin-Watson:

  1. Terdapat intersep pada model regresi

  2. Seluruh peubah penjelas bersifat tetap (fixed) pada penarikan contoh berulang

  3. 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.

  4. Galat menyebar normal

  5. 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 \]

Uji Durbin-Watson menggunakan dua titik kritis, yaitu batas bawah 𝑑𝐿 dan batas atas π‘‘π‘ˆ. Nilai 𝑑 ini selalu terletak di antara 0 dan 4. Gambaran tentang statistik Durbin-Watson:

  1. Jika 𝑑 mendekati nol -> semakin besar kemungkinan adanya autokorelasi positif
  2. Jika 𝑑 mendekati 4 -> semakin besar kemungkinan adanya autokorelasi negatif
  3. Jika 𝑑 mendekati 2 -> belum cukup bukti adanya autokorelasi negatif atau positif

Hipotesis:

H0: Tidak ada autokorelasi

H1: Ada autokorelasi

Pengujian dengan Durbin-Watson:

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

Berdasarkan hasil uji di atas, didapat nilai \(P-Value = 0.007\) yang berarti TOLAK H0. Artinya, pada taraf nyata 5%, ada bukti untuk menyatakan bahwa terdapat autokorelasi pada data.

Penanganan Autokorelasi

1. Cochrane-Orcutt

Metode Cochrane-Orcutt dilakukan dengan menghitung nilai koefisien autokorelasi (\(\rho\)) menggunakan nilai error pada model regresi. Pada metode ini autokorelasi dihilangkan secara bertahap dari bentuk yang paling sederhana sehingga autokorelasi dapat diatasi. Setelah ditemukan nilai duga bagi \(\rho\), maka langkah selanjutnya adalah melakukan transformasi sebagai berikut:

\[ y_t^*=y_t-\hat{p}y_{t-1};x_t^*=z_t-\hat{p}x_{t-1} \]

#Interactive method using to solve first order autocorrelation problems. 
modelco <- cochrane.orcutt(model, convergence = 7, max.iter = 1000)
modelco 
## Cochrane-orcutt estimation for first order autocorrelation 
##  
## Call:
## lm(formula = y ~ x, data = dataregresi)
## 
##  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)           x 
## -682.274737    0.375122
#rho optimum
rho <- modelco$rho
rho
## [1] 0.7353396

Telah didapat nilai (\(\rho\)) optimum sebesar \(0.735\). Selanjutnya akan dilakukan transformasi peubah X dan Y menggunakan nilai (\(\rho\)).

#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
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\). Artinya pada taraf nyata 5%, ada bukti untuk menyatakan bahwa tidak ada autokorelasi atau terbukti bahwa autokorelasi telah berhasil ditangani dengan metode Cochrane-Orcutt. Selanjutnya akan dilakukan transformasi untuk mendapatkan model regresi deret waktu terbaru.

b0 <- modelcorho$coefficients[1]/(1-rho)
b0
## (Intercept) 
##   -682.2747
b1 <- modelcorho$coefficients[2]
b1
##   x.trans 
## 0.3751221

Setelah dilakukan transformasi balik, didapat model regresi deret waktu yaitu: \[ \hat{y_t} = -682,27 + 0.375x_t \]

2. Hildreth-lu

Prosedur Hildreth-Lu menggunakan pendekatan yang sama untuk memperkirakan parameter autokorelasi ρ untuk digunakan dalam transformasi. Nilai ρ dipilih dengan prosedur Hildreth-Lu, yang meminimalkan sum square error untuk model regresi yang ditransformasi.

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
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.3873
## 2  0.20 0.3555
## 3  0.30 0.3291
## 4  0.40 0.3082
## 5  0.50 0.2927
## 6  0.60 0.2827
## 7  0.70 0.2780
## 8  0.80 0.2788
## 9  0.90 0.2851
## 10 0.91 0.2860
## 11 0.92 0.2869
## 12 0.93 0.2880
## 13 0.94 0.2891
## 14 0.95 0.2902
## 15 0.96 0.2914
## 16 0.97 0.2926
## 17 0.98 0.2939
## 18 0.99 0.2953
#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 \(ρ\) optimum yang menghasilkan SSE terkecil berada di sekitar \(0.7\). Sehingga selang kita perkecil.

#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)
##    rho    SSE
## 1 0.68 0.2785
## 2 0.69 0.2782
## 3 0.70 0.2780
## 4 0.71 0.2779
## 5 0.72 0.2778
## 6 0.73 0.2777
## 7 0.74 0.2777
## 8 0.75 0.2778
#grafik SSE optimum
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)

Dapat dilihat bahwa nilai \(ρ\) optimum yang menghasilkan SSE terkecil adalah sebesar \(0.74\). Sehingga model optimum yang dapat dibuat dengan metode Hildreth-Lu adalah sebagai berikut:

# 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
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, dapat dilihat bahwa nilai \(Pβˆ’value = 0.4421 > 0.05\). Sehingga tak tolak H0, atau belum cukup bukti untuk menyatakan bahwa terdapat autokorelasi pada taraf nyata 5%.

# Transformasi Balik
cat("IPM = ", coef(modelhl)[1]/(1-0.74), "+", coef(modelhl)[2],"tahun", sep = "")
## IPM = -676.0755+0.3720559tahun

Model regresi setelah melakukan penanganan autokorelasi adalah:

\[ \hat{y_t}= = -676.075 + 0.372x_t \]

Kesimpulan

Terdapat masalah autokorelasi pada data deret waktu IPM Provinsi Bali tahun 2010-2021. Hal ini dapat dideteksi setelah melakukan pengujian dengan metode grafik dan uji Durbin-Watson. Oleh karena itu, dilakukan penanganan autokorelasi terhadap data IPM dengan metode Cochrane-Orcutt dan Hildreth-Lu. Setelah dilakukan penanganan menggunakan kedua metode tersebut, masalah autokorelasi pada data IPM Provinsi Bali tahun 2010-2021 berhasil diatasi.