Input Data

Berikut data jumlah transportasi roda 4, baik transportasi pribadi seperti mobil dan transportasi umum seperti bus, yang melewati Malioboro Kepatihan selama 39 hari dari tanggal 25 April 2024 hingga 2 Juni 2024 dengan interval waktu 30 menit mulai pukul 17.00-17.30.

library(readxl)
library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
Data = read_excel("/Users/nadhifanurf/Documents/analisis runtun waktu/21106010065-data.xlsx")
Data
## # A tibble: 39 × 3
##    Date                 Data Location                     
##    <dttm>              <dbl> <chr>                        
##  1 2024-04-25 00:00:00   302 Malioboro Kepatihan          
##  2 2024-04-26 00:00:00   235 Malioboro Kepatihan          
##  3 2024-04-27 00:00:00   252 Malioboro Kepatihan          
##  4 2024-04-28 00:00:00   278 Malioboro Kepatihan          
##  5 2024-04-29 00:00:00   255 Malioboro Kepatihan          
##  6 2024-04-30 00:00:00   255 Kleringan (Jl. Abu Bakar Ali)
##  7 2024-05-01 00:00:00   230 Malioboro Kepatihan          
##  8 2024-05-02 00:00:00   273 Malioboro Kepatihan          
##  9 2024-05-03 00:00:00   276 Malioboro Kepatihan          
## 10 2024-05-04 00:00:00   256 Malioboro Kepatihan          
## # ℹ 29 more rows

Data Time Series

ts_data = ts(Data$Data, frequency = 365)
ts_data
## Time Series:
## Start = c(1, 1) 
## End = c(1, 39) 
## Frequency = 365 
##  [1] 302 235 252 278 255 255 230 273 276 256 242 283 263 249 235 247 191 291 261
## [20] 268 244 274 285 271 264 238 274 220 215 119 151 250 252 238 253 334 293 147
## [39] 279

Plot Time Series

x = as.Date(Data$Date, format = "%d/%m/%Y", data = Data)
data = zoo(ts_data, order.by = x)
plot(data, xlab = "Date", ylab = "Jumlah Kendaraan Roda 4", main = "Plot Pengamatan Kendaraan Roda 4 di Malioboro Kepatihan")

ACF dan PACF Data Time Series

Setelah data jumlah transportasi roda 4 diubah menjadi data time series, selanjutnya akan dianalisis stationeritas dari data tersebut. Berikut output untuk plot ACF dan PACF.

acf(ts_data, lag.max = 39, type = "correlation", main = "ACF Data Lalu Lintas")

acf(ts_data, lag.max = 39, type = "partial", main = "PACF Data Lalu Lintas")

Berdasarkan output plot ACF dan PACF dapat disimpulkan bahwa data time series stationer.

Persamaan Model MA(1)

Kemudian akan dicari persamaan model MA(1). Berikut ouput untuk model MA(1) dari data time series yang telah stationer.

Model_MA = arima(ts_data, order = c(0, 0, 1))
Model_MA
## 
## Call:
## arima(x = ts_data, order = c(0, 0, 1))
## 
## Coefficients:
##          ma1  intercept
##       0.2521   250.5380
## s.e.  0.1745     7.9743
## 
## sigma^2 estimated as 1588:  log likelihood = -199.09,  aic = 404.19

Persamaan Model AR(1)

Kemudian akan dicari persamaan model AR(1). Berikut ouput untuk model AR(1) dari data time series yang telah stationer.

Model_AR = arima(ts_data, order = c(1, 0, 0))
Model_AR
## 
## Call:
## arima(x = ts_data, order = c(1, 0, 0))
## 
## Coefficients:
##          ar1  intercept
##       0.2147   250.3831
## s.e.  0.1587     8.1148
## 
## sigma^2 estimated as 1599:  log likelihood = -199.22,  aic = 404.44

Persamaan Model ARMA(1,1)

Kemudian akan dicari persamaan model ARMA(1,1). Berikut ouput untuk model ARMA(1,1) dari data time series yang telah stationer.

Model_ARMA = arima(ts_data, order = c(1, 0, 1))
Model_ARMA
## 
## Call:
## arima(x = ts_data, order = c(1, 0, 1))
## 
## Coefficients:
##           ar1     ma1  intercept
##       -0.1402  0.3869   250.5190
## s.e.   0.5815  0.5560     7.7472
## 
## sigma^2 estimated as 1586:  log likelihood = -199.07,  aic = 406.13

Persamaan Model AR1MA(p,d,q) yang Optimal

Kemudian akan dicari persamaan model ARIMA(p,d,q) dengan p = 1, d = 0, dan q = 0 yang diperoleh dengan fungsi auto.arima. Berikut ouput untuk model ARIMA(1) dari data time series yang telah stationer.

library(forecast) 
## Warning: package 'forecast' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
Model_ARIMA = auto.arima(ts_data)
summary(Model_ARIMA)
## Series: ts_data 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      mean
##       0.2147  250.3831
## s.e.  0.1587    8.1148
## 
## sigma^2 = 1686:  log likelihood = -199.22
## AIC=404.44   AICc=405.12   BIC=409.43
## 
## Training set error measures:
##                      ME     RMSE      MAE       MPE     MAPE MASE       ACF1
## Training set -0.3150802 39.98953 27.71907 -3.860358 13.42333  NaN 0.01002601

Model Terbaik

Setelah diperoleh persamaan model MA(1), AR(1), ARMA(1,1), dan ARIMA(1,0,0), akan dipilih model terbaik diantara keempat model dengan AIC terkecil. Berikut diperoleh output AIC untuk masing-masing persamaan model.

AIC(Model_MA)
## [1] 404.1888
AIC(Model_AR)
## [1] 404.4366
AIC(Model_ARMA)
## [1] 406.1325
AIC(Model_ARIMA)
## [1] 404.4366

Berdasarkan output di atas, disimpulkan bahwa model terbaik diantara persamaan model MA(1), AR(1), ARMA(1,1), dan ARIMA(1,0,0) adalah model MA(1) sebab model tersebut memiliki nilai AIC terendah diantara model lainnya yaitu 404.1888.

Data Fitted Berdasarkan Model Terbaik

Selanjutnya akan dilakukan uji diagnostik model MA(1) dengan uji Ljung Box. Berikut output uji Ljung Box untuk model MA(1).

loan.fit.ar2 = arima(ts_data, order=c(0, 0, 1))
fit.loan.ar2 = as.vector(fitted(loan.fit.ar2))
fit.loan.ar2
##  [1] 252.0995 262.6847 243.5724 252.6627 256.9260 250.0524 251.7854 245.0455
##  [9] 257.5859 255.1806 250.7446 248.3333 259.2782 251.4764 249.9137 246.7780
## [17] 250.5940 235.5131 264.5274 249.6487 255.1648 247.7231 257.1630 257.5563
## [25] 253.9274 253.0775 246.7367 257.4117 241.1058 243.9562 219.0340 233.3852
## [33] 254.7269 249.8505 247.5503 251.9120 271.2341 256.0256 223.0504
res.loan.ar2 = as.vector(residuals(loan.fit.ar2))
Box.test(res.loan.ar2, lag = 20, fitdf = 1, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  res.loan.ar2
## X-squared = 10.585, df = 19, p-value = 0.937

Berdasarkan uji Ljung-Box diperoleh p-value untuk model MA(1) sebesar 0.937 > 0.05, oleh karena itu dapat disimpulkan bahwa residu dari model MA(1) merupakan white noise dan model layak digunakan.

Data Forecast Berdasarkan Model Terbaik

Untuk prediksi jumlah transportasi roda 4 pada malioboro kepatihan periode berikutnya setelah periode yang telah diamati sebelumnya akan digunakan fungsi forecast. Berikut output data forecast untuk model MA(1) 2 periode berikutnya.

loan.ar2.forecast = as.array(forecast(loan.fit.ar2, h = 2))
loan.ar2.forecast
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1.106849       264.6441 213.5700 315.7181 186.5331 342.7551
## 1.109589       250.5380 197.8657 303.2103 169.9827 331.0933

Berdasarkan output di atas, disimpulkan bahwa prediksi utama untuk 2 periode berikutnya yaitu 3 Juni 2024 dan 4 Juni 2024 secara berurutan adalah 264.6441 dan 250.5380.

Berdasarkan model MA(1) diperoleh output plot data forecast sebagai berikut

autoplot(loan.ar2.forecast)

Plot Berdasarkan Data Model Terbaik

Berdasarkan data time series dan data fitted diperoleh output plot data time series dan data fitted berdasarkan model MA(1) sebagai berikut

x = as.Date(Data$Date, format = "%d/%m/%Y", data = Data)
data = zoo(ts_data, order.by = x)
plot(data, col = "black", xlab = "Date", ylab = "Jumlah Kendaraan Roda 4", main = "Plot Pengamatan Kendaraan Roda 4 di Malioboro Kepatihan")

X = as.Date(Data$Date, format = "%d/%m/%Y", data = Data)
fitted_data = zoo(fit.loan.ar2, order.by = X)
lines(fitted_data, col = "blue", xlab = "Date", ylab = "Jumlah Kendaraan Roda 4")

legend("bottomleft", legend = c("Data Time Series", "Data Fitted"), col=c("black", "blue"), lty = 1)