Tugas Individu 1 Metode Peramalan Deret Waktu
Pendahuluan
Analisis regresi merupakan suatu proses statistik untuk mengestimasi hubungan antara variabel-variabel, yakni berupa teknik-teknik memodelkan dan melakukan analisis beberapa variabel atas dasar bentuk hubungan antara satu variabel tak bebas dan satu atau lebih variabel bebas (Amstrong, 2012). Dalam melakukan analisis regresi diperlukan beberapa asumsi yang harus terpenuhi, salah satunya autokorelasi. Suatu model dapat dikategorikan baik jika tidak terdapat autokorelasi. Uji autokorelasi dapat muncul karena adanya observasi yang berurutan sepanjang waktu dan saling berkaitan satu sama lainnya (Ghozali, 2016). Permasalahan ini muncul karena residual tidak bebas pada satu observasi ke observasi lainnya. Uji autokorelasi bertujuan untuk menguji apakah dalam suatu model regresi linear ada korelasi antara kesalahan pengganggu pada periode t dengan kesalahan pada periode t-1 (Ajija, 2011). Jika terjadi korelasi, maka dinamakan ada problem autokorelasi dan perlu ditangani. Autokorelasi dapat dideteksi secara eksploratid dan uji formal (uji Durbin Watson Test, Breusch-Godfrey Test, Run’s Test). Penanganan autokorelasi dapat dilakukan dengan metode Cpchran-Orcutt dan Hildreth-Lu.
Memanggil Library yang Digunakan
library(ggplot2)
library(dplyr)##
## 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(readxl)## Warning: package 'readxl' was built under R version 4.1.3
library(forecast)## Warning: package 'forecast' was built under R version 4.1.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(readxl)
library(TTR)## Warning: package 'TTR' was built under R version 4.1.3
library(tseries)## Warning: package 'tseries' was built under R version 4.1.3
library(lmtest) #uji-Durbin Watson## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(orcutt) #Cochrane-Orcutt## Warning: package 'orcutt' was built under R version 4.1.3
library(HoRM)#Hildreth Lu## Warning: package 'HoRM' was built under R version 4.1.3
Memanggil Data IPM DKI Jakarta 2010-2021
setwd("D:/SEMESTER 5/METODE PERAMALAN DERET WAKTU")
dataregresi <- read_xlsx("IPM DKI.xlsx")
head(dataregresi)## # A tibble: 6 x 2
## Tahun IPM
## <dbl> <dbl>
## 1 2010 76.3
## 2 2011 77.0
## 3 2012 77.5
## 4 2013 78.1
## 5 2014 78.4
## 6 2015 79.0
Indeks Pembangunan Manusia
Menurut BPS Indeks Pembangunan Manusia adalah ukuran capaian pembangunan manusia berbasis sejumlah komponen dasar kualitas hidup. Sebagai ukuran kualitas hidup, IPM dibangun melalui pendekatan tiga dimensi dasar. Dimensi tersebut mencakup umur panjang dan sehat; pengetahuan, dan kehidupan yang layak.
Eksplorasi Data
Time Series Plot
p <- ggplot(dataregresi, aes(x=Tahun, y=IPM)) +
geom_line(lwd=1.2,col="blue3")
p +labs(x="Year",y = "Indeks Pembangunan",
title="Time Series Plot Indeks Pembangunan Manusia DKI Jakarta ",
subtitle = "Periode 2010 - 2021")+
theme_bw()+
theme(
plot.title = element_text(size = 14L,
face = "bold",
hjust = 0.5),
plot.subtitle = element_text(size = 11L,
face = "plain",
hjust = 0.5)
)+geom_point(size=2) +geom_text(aes(label=paste(IPM,"%")),vjust=-0.8,size=3) Indeks Pembangunan Manusia di DKI Jakarta dengan 12 pengamatan mengalami kenaikan yang konstan.Nilai IPM DKI Jakarta dalam kurun waktu 2010-2021 telah mengalami kenaikan sebesar 4.8%. Pada tahun 2016 IPM DKI Jakarta di nilai 79.6 % dan naik 1 % menjadi 80.06% pada tahun 2017. Kenaikan tersebut merupakan yang paling tinggi dibandingkan kenaikan pada periode yang lain yang tidak sampai menyentuh angka 1%. Sedangkan kenaikan paling rendah terjadi pada tahun 2019 ke 2020 yang hanya naik sebesar 0.01%.
Pemodelan Regresi
x <- dataregresi$Tahun
y <- dataregresi$IPM
model<- lm(y~x, data = dataregresi)
summary(model)##
## Call:
## lm(formula = y ~ x, data = dataregresi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.42154 -0.16017 0.05061 0.16141 0.30594
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -816.54150 44.39144 -18.39 4.86e-09 ***
## x 0.44437 0.02202 20.18 1.97e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2634 on 10 degrees of freedom
## Multiple R-squared: 0.976, Adjusted R-squared: 0.9736
## F-statistic: 407.1 on 1 and 10 DF, p-value: 1.97e-09
cor(x, y)## [1] 0.9879386
Model regresi awal yang diperoleh adalah y = -816.54150 + 0.44437x. Model tersebut dapat diintrepetasikan bahwa setiap bertambahnya tahun maka IPM DKI Jakarta akan bertambah sebesar 0.44437x.
Dari hasil diatas, sekilas dapat terlihat bahwa model awal adalah model terbaik. Namun, masih diperlukan lagi analisis lebih lanjut dan dilakukan pengujian asumsi sehingga akan terdeteksi bahwa ada asumsi yang belum terpenuhi yang dapat berpengaruh pada keakuratan model.
Deteksi Auotokorelasi
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 = "Sisaan",
ylab = "Fitted Values", 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 = "Sisaan", ylab = "Order", main = "Sisaan vs Order")
lines(seq(1,12,1), resi1, col = "red")
abline(a = 0, b = 0, lwd = 2) Pengujian pertama yang dilakukan adalah eksploratif dengan melihat sebaran normal Q-Q Plot, Sisaan vs Fitted Values, Histogram, dan Plot Sisaan vs Order. Berdasarkan hasil Normal Q-Q Plot terlihat bahwa data cenderung menyebar normal dikarenakan sebaran data membentuk garis lurus. Sedangkan pada histogram dapat diduga bahwa model tidak menyebar secara normal namun menjulur ke kiri.Kemudian pada plot sisaan vs fitted value, terlihat lebar pita tidak sama sehingga dapat diduga bahwa pendugaan ragam tidak homogen. Pada plot sisaan vs order, terlihat data tidak membentuk pola pita yang sama dan tidak menyebar acak sehingga diduga terdapat autokorelasi antar amatan. Oleh karena itu, untuk memastikan perlu dilakukan pengujian lebih lanjut dengan melihat nilai ACF dan PACF
2. ACF dan PACF Plot
#ACF dan PACF identifikasi autokorelasi
par(mfrow = c(2,1))
acf(resi1)
pacf(resi1) Berdasarkan plot nilai ACF dan PACF, terdapat garis hitam yang melewati garis biru sehingga dapat diduga terdapat nilai autokorelasi. Sehingga untuk memastikannya, maka diperlukan uji statistik.
Uji Statistik
1. Durbin Watson Test
H0: tidak ada autokorelasi
H1: ada autokorelasi
lmtest::dwtest(model, alternative = 'two.sided') #ada autokorelasi##
## Durbin-Watson test
##
## data: model
## DW = 0.53015, p-value = 0.0001284
## alternative hypothesis: true autocorrelation is not 0
Berdasarkan uji Durbin Watson Test, didapatkan nilai p-value (<0.05) sehingga tolak H0 atau cukup bukti untuk menyatakan bahwa ada autokorelasi antar amatan pada taraf 5%.
2. Breusch-Godfrey Test
H0: tidak ada autokorelasi
H1: ada autokorelasi
lmtest::bgtest(y ~ x, data=dataregresi, order=1) #Perform Breusch-Godfrey test for first-order serial correlation##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: y ~ x
## LM test = 5.1467, df = 1, p-value = 0.02329
Berdasarkan uji Breusch-Godfrey Test, didapatkan nilai p-value (<0.05) sehingga tolak H0 atau cukup bukti untuk menyatakan bahwa ada autokorelasi antar amatan pada taraf 5%.
3. Run’s Test
lawstat::runs.test(resid(model), alternative = 'two.sided')##
## Runs Test - Two sided
##
## data: resid(model)
## Standardized Runs Statistic = -1.2111, p-value = 0.2259
Berdasarkan uji Run’Test didapatkan nilai p-value > 5% sehingga gagal tolak H0 sehingga belum cukup bukti untuk menyatakan bahwa terdapat autokorelasi pada taraf 5%
Berdasarkan uji statistik pada uji Durbin Watson dan uji Breusch-Godfrey didapatkan nilai p-value < 0.05 yang artinya Tolak H0 (Terdapat autokorelasi). Oleh karena itu, diperlukan adanya penanganan menggunakan Cochran Orcutt dan Hildreth-lu.
Penanganan Autokorelasi
1. Cochrane-Orcutt
#Interactive method using to solve first order autocorrelation problems.
modelco <- orcutt::cochrane.orcutt(model, convergence = 4, max.iter=1000)
modelco ## Cochrane-orcutt estimation for first order autocorrelation
##
## Call:
## lm(formula = y ~ x, data = dataregresi)
##
## number of interaction: 185
## rho 0.882051
##
## Durbin-Watson statistic
## (original): 0.53015 , p-value: 6.42e-05
## (transformed): 1.85597 , p-value: 2.592e-01
##
## coefficients:
## (Intercept) x
## -156.599042 0.118213
#rho optimum
rho <- modelco$rho
y## [1] 76.31 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77 81.11
y[-1]## [1] 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77 81.11
y[-12]## [1] 76.31 76.98 77.53 78.08 78.39 78.99 79.60 80.06 80.47 80.76 80.77
#transformasi terhadap y dan x
(y.trans <- y[-1]-y[-12]*rho)## [1] 9.670666 9.629692 9.694564 9.519435 9.845999 9.926769 9.848717 9.852974
## [9] 9.781333 9.535538 9.866717
(x.trans <- x[-1]-x[-12]*rho)## [1] 238.0769 238.1949 238.3128 238.4308 238.5487 238.6667 238.7846 238.9026
## [9] 239.0205 239.1384 239.2564
Model Baru
modelcorho <- lm(y.trans~x.trans)
summary(modelcorho)##
## Call:
## lm(formula = y.trans ~ x.trans)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.263180 -0.032017 -0.002564 0.086985 0.183823
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.4707 27.0164 -0.684 0.511
## x.trans 0.1182 0.1132 1.044 0.324
##
## Residual standard error: 0.14 on 9 degrees of freedom
## Multiple R-squared: 0.1081, Adjusted R-squared: 0.008978
## F-statistic: 1.091 on 1 and 9 DF, p-value: 0.3236
Pengecekan Autokorelasi
lmtest::dwtest(modelcorho,alternative = 'two.sided') ##
## Durbin-Watson test
##
## data: modelcorho
## DW = 1.856, p-value = 0.5185
## alternative hypothesis: true autocorrelation is not 0
lmtest::bgtest(modelcorho, order=1)##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelcorho
## LM test = 0.045735, df = 1, p-value = 0.8307
lawstat::runs.test(resid(modelcorho),alternative = 'two.sided')##
## Runs Test - Two sided
##
## data: resid(modelcorho)
## Standardized Runs Statistic = -0.67082, p-value = 0.5023
Setelah dilakukan perhitungan untuk pengecekan autokorelasi pada uji Durbin Watson, Breusch Godfrey, dan Run Test didapatkan niai p-value lebih besar dari 0.05, sehingga dapat disimpulkan gagal tolak H0 atau terdapat cukup bukti untuk menyatakan bahwa sisaan saling bebas atau tidak terdapat autokorelasi pada taraf 5%. Dengan begitu, maka penanganan autokorelasi menggunakan metode Cochrane-Orcut berhasil dilakukan.
Transformasi Balik
cat("IPM = ", coef(modelcorho)[1]/(1-rho), "+", coef(modelcorho)[2]," Tahun", sep = "") #persamaan regresi setelah di transformasi ke persamaan awal## IPM = -156.599+0.1182134 Tahun
Setelah ditransformasi, diperoleh model baru IPM = -156.599+0.1182134 Tahun, yang dapat diartikan setiap bertambahnya tahun, nilai IPM akan bertambah sebesar 0.1182134.
2. 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,90 memiliki SSE Terkecil## rho SSE
## 1 0.10 0.4607
## 2 0.20 0.3942
## 3 0.30 0.3366
## 4 0.40 0.2878
## 5 0.50 0.2478
## 6 0.60 0.2167
## 7 0.70 0.1944
## 8 0.80 0.1809
## 9 0.90 0.1763
## 10 0.91 0.1763
## 11 0.92 0.1764
## 12 0.93 0.1766
## 13 0.94 0.1769
## 14 0.95 0.1773
## 15 0.96 0.1778
## 16 0.97 0.1783
## 17 0.98 0.1790
## 18 0.99 0.1797
#grafik rho dan SSE
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)#rho optimal di sekitar 0.95
r <- seq(0.8, 0.9, by= 0.01)
tab <- data.frame("rho" = r, "SSE" = sapply(r, function(i){deviance(hildreth.lu.func(i, model))}))
round(tab, 4) #0,90 memiliki SSE Terkecil## rho SSE
## 1 0.80 0.1809
## 2 0.81 0.1801
## 3 0.82 0.1793
## 4 0.83 0.1786
## 5 0.84 0.1780
## 6 0.85 0.1775
## 7 0.86 0.1771
## 8 0.87 0.1768
## 9 0.88 0.1765
## 10 0.89 0.1764
## 11 0.90 0.1763
#grafik SSE optimum
plot(tab$SSE ~ tab$rho , type = "l")
abline(v = tab[tab$SSE==min(tab$SSE),"rho"], lty = 3)Model Terbaik
modelhl <- hildreth.lu.func(0.90, model)
summary(modelhl)##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.262945 -0.031786 0.002045 0.082941 0.182273
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.92123 27.02291 -0.108 0.916
## x 0.05555 0.13345 0.416 0.687
##
## Residual standard error: 0.14 on 9 degrees of freedom
## Multiple R-squared: 0.01889, Adjusted R-squared: -0.09013
## F-statistic: 0.1733 on 1 and 9 DF, p-value: 0.687
Deteksi Autokorelasi
lmtest::dwtest(modelhl, alternative = "two.sided")##
## Durbin-Watson test
##
## data: modelhl
## DW = 1.8932, p-value = 0.5623
## alternative hypothesis: true autocorrelation is not 0
lmtest::bgtest(modelhl,order=1)##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelhl
## LM test = 0.020352, df = 1, p-value = 0.8866
lawstat::runs.test(resid(modelhl),alternative = 'two.sided')##
## Runs Test - Two sided
##
## data: resid(modelhl)
## Standardized Runs Statistic = -0.67082, p-value = 0.5023
Setelah dilakukan perhitungan untuk pengecekan autokorelasi pada uji Durbin Watson, Breusch Godfrey, dan Run Test didapatkan niai p-value lebih besar dari 0.05, sehingga dapat disimpulkan gagal tolak H0 atau terdapat cukup bukti untuk menyatakan bahwa sisaan saling bebas atau tidak terdapat autokorelasi pada taraf 5%. Dengan begitu, maka penanganan autokorelasi menggunakan metode Hildreth-lu berhasil dilakukan.
Pengecekan Asumsi Autokorelasi
#fungsi Hildreth Lu dengan library HoRM
modelhl2 <- HoRM::hildreth.lu(y, x, 0.90) #fungsi hildreth lu dengan rho tertentu
summary(modelhl2)##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.262945 -0.031786 0.002045 0.082941 0.182273
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.92123 27.02291 -0.108 0.916
## x 0.05555 0.13345 0.416 0.687
##
## Residual standard error: 0.14 on 9 degrees of freedom
## Multiple R-squared: 0.01889, Adjusted R-squared: -0.09013
## F-statistic: 0.1733 on 1 and 9 DF, p-value: 0.687
Model Hildreth-Lu dengan memanfaatkan nilai rho yang didapatkan melalui metode Cochrane-Orcutt juga menghasilkan model yang sudah bebas dari autokorelasi
Transformasi Balik
cat("IPM = ", coef(modelhl)[1]/(1-0.90), "+", coef(modelhl)[2],"x", sep = "") #persamaan regresi setelah di transformasi ke persamaan awal## IPM = -29.21227+0.05554545x
Setelah ditransformasi, diperoleh model baru IPM = -29.21227+0.05554545x Tahun, yang dapat diartikan setiap bertambahnya tahun, nilai IPM akan bertambah sebesar 0.05554545x.
Penutup
Kesimpulan
Setelah diuji baik secara eksploratif dan uji formal pada data IPM Provinsi DKI Jakarta tahun 2020-2021 terdapat problem autokorelasi. Oleh sebab itu, perlu penanganan autokorelasi dengaan metode Cocharane-Orcut dan Hildreth-Lu. Setelah dilakukan penanganan, autokorelasi dapat diatasi.
Daftar Pustaka
Ajija, Shochrul Rohmatul, dkk. 2011. Cara Cerdas Menguasai Eviews. Jakarta: Salemba Empat
Amstrong, SJ. 2012. Illusion in Regression Analysi. International Journal Forecasting. 28(1):689-693
Ghozali, I.2016. Aplikasi Analisis Multivariete Dengan Program IBM SPSS 23. Edisi 8.Semarang: Badan Penerbit Universitas Diponegoro.
Sumber Data : https://www.bps.go.id/indicator/26/494/1/-metode-baru-indeks-pembangunan-manusia-menurut-provinsi.html