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 LuData 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$IPMEksplorasi 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)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.
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.
Histogram
Berdasarkan histogram di atas, data terlihat cukup menjulur ke kiri.
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:
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 \]
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:
- Jika π mendekati nol -> semakin besar kemungkinan adanya autokorelasi positif
- Jika π mendekati 4 -> semakin besar kemungkinan adanya autokorelasi negatif
- 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.