library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.2
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(orcutt)
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.2
Data yang digunakan adalah data Indeks Pembangunan Manusia (IPM) Provinsi Bali tahun 2010–2021. Variabel yang digunakan dalam analisis adalah Tahun sebagai variabel bebas (X) dan IPM sebagai variabel terikat (Y).
dtBali <- read_excel("C:/Users/hp/Downloads/data_ipm_bali.xlsx")
dtBali <- dtBali[, c("Tahun", "IPM")]
dtBali
## # 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
str(dtBali)
## tibble [12 × 2] (S3: tbl_df/tbl/data.frame)
## $ Tahun: num [1:12] 2010 2011 2012 2013 2014 ...
## $ IPM : num [1:12] 70.1 70.9 71.6 72.1 72.5 ...
summary(dtBali)
## Tahun IPM
## Min. :2010 Min. :70.10
## 1st Qu.:2013 1st Qu.:71.97
## Median :2016 Median :73.46
## Mean :2016 Mean :73.31
## 3rd Qu.:2018 3rd Qu.:74.92
## Max. :2021 Max. :75.69
Data terdiri atas 12 pengamatan, yaitu IPM Provinsi Bali dari tahun 2010 sampai dengan 2021. Dalam analisis ini, Tahun digunakan sebagai variabel independen (X), sedangkan IPM digunakan sebagai variabel dependen (Y).
plot(
dtBali$Tahun,
dtBali$IPM,
type = "o",
pch = 16,
main = "Perkembangan IPM Provinsi Bali Tahun 2010–2021",
xlab = "Tahun",
ylab = "IPM"
)
Berdasarkan plot, nilai IPM Provinsi Bali menunjukkan pola yang
cenderung meningkat dari tahun ke tahun. Hal tersebut menunjukkan adanya
hubungan positif antara waktu (Tahun) dengan nilai IPM.
Namun, karena data merupakan data runtun waktu, pola yang meningkat secara berurutan juga dapat menyebabkan nilai pada suatu periode berkorelasi dengan nilai pada periode sebelumnya. Oleh karena itu, selain melihat hubungan antara Tahun dan IPM, perlu dilakukan pemeriksaan terhadap autokorelasi pada sisaan model regresi.
cor(dtBali$Tahun, dtBali$IPM)
## [1] 0.9923534
Nilai korelasi digunakan untuk melihat arah dan kekuatan hubungan linear antara Tahun dan IPM. Berdasarkan hasil korelasi, hubungan antara Tahun dan IPM bersifat positif, yang menunjukkan bahwa peningkatan tahun cenderung diikuti oleh peningkatan nilai IPM.
Namun, korelasi saja belum cukup untuk menjelaskan hubungan secara matematis. Oleh karena itu, selanjutnya dilakukan analisis regresi linear sederhana.
model <- lm(IPM ~ Tahun, data = dtBali)
summary(model)
##
## Call:
## lm(formula = IPM ~ Tahun, data = dtBali)
##
## 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
Berdasarkan hasil regresi linear sederhana, diperoleh persamaan:
\[ \widehat{IPM} = -974.75 + 0.52(Tahun) \]
Koefisien Tahun sebesar 0,52 menunjukkan bahwa setiap kenaikan satu tahun berkaitan dengan peningkatan rata-rata nilai IPM sebesar sekitar 0,52 poin.
Koefisien Tahun memiliki p-value sebesar \(2.03 \times 10^{-10}\), yang lebih kecil dari taraf signifikansi 5%. Dengan demikian, terdapat bukti yang cukup bahwa terdapat hubungan linear yang signifikan antara waktu (Tahun) dan IPM.
Nilai \(R^2\) sebesar 0,9848 menunjukkan bahwa sekitar 98,48% variasi IPM dapat dijelaskan oleh komponen tren waktu dalam model regresi linear sederhana ini. Namun, nilai \(R^2\) yang tinggi tidak serta-merta menunjukkan bahwa model bebas dari masalah autokorelasi, sehingga pemeriksaan terhadap sisaan tetap diperlukan.
sisaan <- residuals(model)
fitValue <- fitted(model)
par(mfrow = c(2,2))
qqnorm(
sisaan,
main = "Normal Q-Q Plot"
)
qqline(
sisaan,
col = "steelblue",
lwd = 2
)
plot(
fitValue,
sisaan,
pch = 16,
col = "steelblue",
xlab = "Fitted Values",
ylab = "Sisaan",
main = "Sisaan vs Fitted Values"
)
abline(h = 0, lwd = 2)
hist(
sisaan,
main = "Histogram Sisaan",
xlab = "Sisaan"
)
plot(
seq_along(sisaan),
sisaan,
pch = 16,
col = "steelblue",
xlab = "Urutan Pengamatan",
ylab = "Sisaan",
main = "Sisaan vs Urutan"
)
lines(
seq_along(sisaan),
sisaan
)
abline(h = 0, lwd = 2)
par(mfrow = c(1,1))
Plot diagnostik digunakan untuk melihat karakteristik sisaan model. Plot Q-Q digunakan untuk melihat kesesuaian distribusi sisaan terhadap distribusi normal, sedangkan plot sisaan terhadap fitted values digunakan untuk melihat pola tertentu pada sisaan.
Khusus untuk tugas ini, perhatian utama diberikan pada pola sisaan berdasarkan urutan waktu, karena data yang digunakan merupakan data runtun waktu. Jika sisaan pada suatu periode memiliki hubungan dengan sisaan pada periode sebelumnya, maka terdapat indikasi autokorelasi.
shapiro.test(sisaan)
##
## Shapiro-Wilk normality test
##
## data: sisaan
## W = 0.89467, p-value = 0.1354
Uji Shapiro-Wilk digunakan untuk menguji apakah sisaan mengikuti distribusi normal.
Hipotesis:
\[ H_0:\text{sisaan berdistribusi normal} \] \[ H_1:\text{sisaan tidak berdistribusi normal} \]
Dengan taraf signifikansi 5%, diperoleh p-value sebesar 0,1354. Karena p-value > 0,05, maka tidak terdapat cukup bukti untuk menolak \(H_0\).
Dengan demikian, berdasarkan uji Shapiro-Wilk, tidak terdapat cukup bukti bahwa sisaan menyimpang dari distribusi normal.
par(mfrow = c(1,2))
acf(
sisaan,
main = "ACF Sisaan"
)
pacf(
sisaan,
main = "PACF Sisaan"
)
par(mfrow = c(1,1))
Plot ACF digunakan untuk melihat korelasi antara sisaan pada suatu periode dengan sisaan pada beberapa periode sebelumnya. Adanya korelasi yang signifikan pada lag tertentu dapat menjadi indikasi adanya autokorelasi.
Untuk memperoleh keputusan formal, selanjutnya digunakan uji Durbin-Watson.
dw_awal <- dwtest(model)
dw_awal
##
## Durbin-Watson test
##
## data: model
## DW = 0.87546, p-value = 0.003527
## alternative hypothesis: true autocorrelation is greater than 0
Uji Durbin-Watson digunakan untuk menguji keberadaan autokorelasi positif pada sisaan model.
Hipotesis yang digunakan adalah:
\[ H_0: \rho = 0 \]
\[ H_1: \rho > 0 \]
Dengan taraf signifikansi 5%, diperoleh nilai Durbin-Watson sebesar 0,87546 dan p-value sebesar 0,003527.
Karena p-value < 0,05, maka \(H_0\) ditolak. Dengan demikian, terdapat bukti yang cukup bahwa sisaan model regresi awal mengalami autokorelasi positif.
Nilai Durbin-Watson yang berada cukup jauh di bawah 2 juga konsisten dengan adanya autokorelasi positif. Oleh karena itu, diperlukan penanganan terhadap autokorelasi sebelum model digunakan sebagai model akhir.
modelCO <- cochrane.orcutt(model)
## Warning in cochrane.orcutt(model): Did not converge
modelCO
## Cochrane-orcutt estimation for first order autocorrelation
##
## Call:
## lm(formula = IPM ~ Tahun, data = dtBali)
##
## number of interaction: 100
## rho 0.734645
##
## Durbin-Watson statistic
## (original): 0.87546 , p-value: 3.527e-03
## (transformed): NA , p-value: NA
##
## coefficients:
## [1] NA
Metode Cochrane-Orcutt digunakan untuk menangani autokorelasi dengan melakukan transformasi model berdasarkan estimasi parameter autokorelasi.
Pada data IPM Provinsi Bali, metode Cochrane-Orcutt memberikan peringatan “Did not converge” setelah mencapai 100 iterasi. Selain itu, koefisien model hasil transformasi tidak dapat diperoleh karena menghasilkan nilai NA.
Dengan demikian, metode Cochrane-Orcutt tidak mencapai konvergensi pada data yang digunakan. Oleh karena itu, hasil Cochrane-Orcutt tidak digunakan sebagai model akhir dan penanganan autokorelasi dilanjutkan menggunakan metode Hildreth-Lu.
Metode Hildreth-Lu dilakukan dengan mencari nilai \(\rho\) yang menghasilkan SSE terkecil.
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))
}
Fungsi tersebut melakukan transformasi:
\[ Y_t^*=Y_t-\rho Y_{t-1} \]
dan
\[ X_t^*=X_t-\rho X_{t-1} \]
untuk memperoleh model yang telah ditransformasi.
r <- seq(0.1, 0.9, by = 0.1)
tab <- data.frame(
rho = r,
SSE = sapply(
r,
function(i){
deviance(hildreth.lu.func(i, model))
}
)
)
round(tab, 4)
## rho SSE
## 1 0.1 0.3873
## 2 0.2 0.3555
## 3 0.3 0.3291
## 4 0.4 0.3082
## 5 0.5 0.2927
## 6 0.6 0.2827
## 7 0.7 0.2780
## 8 0.8 0.2788
## 9 0.9 0.2851
Pencarian awal dilakukan pada nilai \(\rho\) dari 0,1 sampai 0,9 dengan interval 0,1.
Berdasarkan hasil pencarian, SSE terkecil diperoleh pada:
\[ \rho=0.7 \]
dengan SSE sebesar:
\[ SSE=0.2780 \]
Nilai tersebut kemudian digunakan sebagai pusat pencarian yang lebih teliti.
Karena nilai awal terbaik berada di sekitar 0,7, dilakukan pencarian pada interval 0,6 sampai 0,8 dengan interval 0,001.
rOpt <- seq(0.6, 0.8, by = 0.001)
tabOpt <- data.frame(
rho = rOpt,
SSE = sapply(
rOpt,
function(i){
deviance(hildreth.lu.func(i, model))
}
)
)
head(
tabOpt[order(tabOpt$SSE), ],
10
)
## rho SSE
## 136 0.735 0.2776919
## 137 0.736 0.2776920
## 135 0.734 0.2776924
## 138 0.737 0.2776926
## 134 0.733 0.2776934
## 139 0.738 0.2776938
## 133 0.732 0.2776949
## 140 0.739 0.2776955
## 132 0.731 0.2776970
## 141 0.740 0.2776978
rho_opt <- tabOpt$rho[which.min(tabOpt$SSE)]
rho_opt
## [1] 0.735
tabOpt[which.min(tabOpt$SSE), ]
## rho SSE
## 136 0.735 0.2776919
Metode Hildreth-Lu dilakukan dengan mencari nilai \(\rho\) yang menghasilkan Sum of Squared Errors (SSE) terkecil setelah transformasi data.
Pencarian awal dilakukan pada interval 0,1 sampai 0,9 dengan interval 0,1. Hasil pencarian menunjukkan bahwa SSE terkecil berada di sekitar \(\rho = 0,7\). Selanjutnya dilakukan pencarian yang lebih teliti pada interval 0,6 sampai 0,8 dengan interval 0,001.
Berdasarkan pencarian tersebut, diperoleh nilai optimum:
\[ \rho = 0.735 \]
dengan SSE minimum sebesar 0,2776919.
Nilai \(\rho = 0,735\) kemudian digunakan sebagai parameter transformasi dalam metode Hildreth-Lu.
plot(
tabOpt$rho,
tabOpt$SSE,
type = "l",
xlab = expression(rho),
ylab = "SSE",
main = "Hubungan Rho dengan SSE"
)
abline(
v = rho_opt,
lty = 2,
col = "red",
lwd = 2
)
points(
rho_opt,
min(tabOpt$SSE),
pch = 19
)
text(
rho_opt,
min(tabOpt$SSE),
labels = paste0(
"rho = ",
round(rho_opt, 3)
),
pos = 4
)
Grafik menunjukkan hubungan antara nilai \(\rho\) dengan SSE. Titik minimum pada
grafik menunjukkan nilai \(\rho\) yang
menghasilkan SSE paling kecil.
Berdasarkan grafik dan hasil pencarian numerik, SSE minimum diperoleh pada:
\[ \boxed{\rho=0.735} \]
Oleh karena itu, nilai tersebut digunakan dalam pembentukan model Hildreth-Lu.
modelHL <- hildreth.lu.func(
rho_opt,
model
)
summary(modelHL)
##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.18521 -0.15406 -0.03417 0.13618 0.24766
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -180.9202 33.8105 -5.351 0.000462 ***
## x 0.3753 0.0632 5.939 0.000218 ***
## ---
## 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.7967, Adjusted R-squared: 0.7741
## F-statistic: 35.27 on 1 and 9 DF, p-value: 0.0002183
Dengan menggunakan nilai \(\rho = 0,735\), diperoleh model pada skala transformasi:
\[ Y_t^* = -180.9202 + 0.3753X_t^* + \varepsilon_t \]
Koefisien variabel Tahun pada model transformasi bernilai positif sebesar 0,3753. Hal ini menunjukkan bahwa setelah dilakukan transformasi untuk menangani autokorelasi, hubungan antara waktu dan IPM tetap menunjukkan arah positif.
Koefisien tersebut memiliki p-value sebesar 0,000218, sehingga lebih kecil dari 0,05. Dengan demikian, terdapat bukti yang cukup bahwa hubungan linear antara komponen waktu dan IPM tetap signifikan setelah transformasi.
Karena model Hildreth-Lu menggunakan data yang telah ditransformasi, intercept perlu dikembalikan ke skala model awal.
beta0_HL <- coef(modelHL)[1] / (1 - rho_opt)
beta1_HL <- coef(modelHL)[2]
cat(
"IPM = ",
round(beta0_HL, 4),
" + ",
round(beta1_HL, 7),
" Tahun",
sep = ""
)
## IPM = -682.7179 + 0.3753413 Tahun
Setelah dilakukan transformasi balik terhadap model Hildreth-Lu, diperoleh persamaan:
\[ \widehat{IPM} = -682.7179 + 0.3753413(Tahun) \]
Koefisien Tahun sebesar 0,3753413 menunjukkan bahwa setiap peningkatan waktu sebesar satu tahun berkaitan dengan peningkatan IPM sekitar 0,3753 poin, dengan struktur autokorelasi yang telah diperhitungkan dalam model.
Intercept sebesar -682,7179 tidak memiliki interpretasi praktis secara langsung karena Tahun = 0 berada jauh di luar rentang pengamatan, yaitu 2010–2021.
Setelah model ditransformasi menggunakan \(\rho=0.735\), dilakukan kembali uji Durbin-Watson.
dw_HL <- dwtest(modelHL)
dw_HL
##
## Durbin-Watson test
##
## data: modelHL
## DW = 2.1296, p-value = 0.4359
## alternative hypothesis: true autocorrelation is greater than 0
Setelah dilakukan transformasi menggunakan metode Hildreth-Lu, dilakukan kembali uji Durbin-Watson untuk mengevaluasi autokorelasi pada sisaan model.
Hipotesis yang digunakan adalah:
\[ H_0: \rho = 0 \]
\[ H_1: \rho > 0 \]
Hasil pengujian menunjukkan nilai Durbin-Watson sebesar 2,1296 dengan p-value sebesar 0,4359.
Karena p-value > 0,05, maka \(H_0\) tidak ditolak. Dengan demikian, tidak terdapat cukup bukti adanya autokorelasi positif pada sisaan model setelah transformasi Hildreth-Lu.
Nilai Durbin-Watson juga meningkat dari 0,87546 pada model awal menjadi 2,1296 setelah transformasi, sehingga hasil tersebut menunjukkan bahwa masalah autokorelasi positif yang terdeteksi pada model awal telah tertangani.
# Sisaan setelah transformasi Hildreth-Lu
sisaan_HL <- residuals(modelHL)
# ACF dan PACF Sisaan Setelah Transformasi Hildreth-Lu
par(mfrow = c(1, 2))
acf(
sisaan_HL,
main = "ACF Sisaan Setelah Hildreth-Lu"
)
pacf(
sisaan_HL,
main = "PACF Sisaan Setelah Hildreth-Lu"
)
par(mfrow = c(1, 1))
SSE_awal <- deviance(model)
MSE_awal <- mean(residuals(model)^2)
SSE_awal
## [1] 0.5982
MSE_awal
## [1] 0.04985
SSE_HL <- deviance(modelHL)
MSE_HL <- mean(residuals(modelHL)^2)
SSE_HL
## [1] 0.2776919
MSE_HL
## [1] 0.02524472
perbandingan <- data.frame(
Model = c(
"Regresi Awal",
"Hildreth-Lu"
),
SSE = c(
SSE_awal,
SSE_HL
),
MSE = c(
MSE_awal,
MSE_HL
),
DW = c(
dw_awal$statistic,
dw_HL$statistic
),
p_value_DW = c(
dw_awal$p.value,
dw_HL$p.value
)
)
perbandingan
## Model SSE MSE DW p_value_DW
## 1 Regresi Awal 0.5982000 0.04985000 0.8754597 0.003526813
## 2 Hildreth-Lu 0.2776919 0.02524472 2.1295833 0.435883328
Berdasarkan hasil perbandingan, model Hildreth-Lu menghasilkan SSE dan MSE yang lebih kecil dibandingkan model regresi awal. Namun, nilai SSE dan MSE kedua model tidak dapat dijadikan satu-satunya dasar perbandingan karena model Hildreth-Lu menggunakan data yang telah ditransformasi dan kehilangan satu pengamatan akibat proses transformasi.
Oleh karena itu, keberhasilan penanganan autokorelasi terutama dievaluasi berdasarkan perubahan hasil uji Durbin-Watson.
Pada model regresi awal diperoleh DW sebesar 0,87546 dengan p-value 0,003527, yang menunjukkan adanya bukti autokorelasi positif. Setelah dilakukan transformasi Hildreth-Lu, nilai DW meningkat menjadi 2,1296 dengan p-value 0,4359. Karena p-value setelah transformasi lebih besar dari 0,05, tidak terdapat cukup bukti adanya autokorelasi positif pada sisaan.
Dengan demikian, berdasarkan uji Durbin-Watson, metode Hildreth-Lu berhasil menangani masalah autokorelasi positif pada model regresi IPM Provinsi Bali.
Berdasarkan seluruh tahapan analisis, diperoleh beberapa kesimpulan sebagai berikut.
Model regresi linear sederhana antara Tahun dan IPM Provinsi Bali menunjukkan hubungan linear positif yang signifikan. Koefisien Tahun sebesar 0,52 menunjukkan bahwa peningkatan satu tahun berkaitan dengan peningkatan IPM sekitar 0,52 poin.
Pemeriksaan terhadap sisaan menunjukkan adanya autokorelasi positif. Hal ini ditunjukkan oleh hasil uji Durbin-Watson dengan nilai DW sebesar 0,87546 dan p-value sebesar 0,003527. Karena p-value < 0,05, terdapat bukti yang cukup adanya autokorelasi positif pada model awal.
Penanganan autokorelasi menggunakan metode Cochrane-Orcutt tidak mencapai konvergensi setelah 100 iterasi. Oleh karena itu, hasil Cochrane-Orcutt tidak digunakan sebagai model akhir.
Penanganan selanjutnya dilakukan menggunakan metode Hildreth-Lu. Berdasarkan pencarian nilai \(\rho\), diperoleh nilai optimum sebesar 0,735 yang menghasilkan SSE minimum sebesar 0,2776919.
Setelah dilakukan transformasi dan transformasi balik, diperoleh model:
\[ \widehat{IPM} = -682.7179 + 0.3753413(Tahun) \]
Koefisien Tahun sebesar 0,3753413 menunjukkan bahwa setiap peningkatan waktu sebesar satu tahun berkaitan dengan peningkatan IPM sekitar 0,3753 poin setelah struktur autokorelasi diperhitungkan.
Evaluasi kembali menggunakan uji Durbin-Watson menghasilkan DW sebesar 2,1296 dan p-value sebesar 0,4359. Karena p-value > 0,05, tidak terdapat cukup bukti adanya autokorelasi positif pada sisaan model setelah transformasi.
Dengan demikian, metode Hildreth-Lu dapat digunakan sebagai metode penanganan autokorelasi pada model regresi IPM Provinsi Bali karena setelah transformasi tidak terdapat cukup bukti autokorelasi positif berdasarkan uji Durbin-Watson.