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