Soal
Data yang digunakan pada tugas praktikum 7 ini adalah data time series yang sudah Anda pilih/tentukan pada tugas praktikum 1.
Lakukan pendugaan parameter, diagnostik model serta forecasting dari hasil yang Anda peroleh pada tugas praktikum 6.
Silahkan upload tugas praktikum 7 di sini. Aturan penamaan folder yang sudah di-compressed adalah NIM_Nama_Prakt7 (7Z atau ZIP) Folder tersebut terdiri dari file data, script R beserta hasil.
Jawaban
Jawaban ini tersedia di : rpubs
Data
Data yang digunakan adalah data Daily Delhi climate data yang diambil dari Kaggle. Data ini memiliki beberapa variabel seperti mean temperature, humidity, wind speed, and mean pressure. Namun, pada tugas ini variabel yang digunakan adalah wind speed.
Membaca data
DailyDelhiClimateTest <- read.csv("D:/S2/IPB/STA542 Analisis Deret Waktu/1/Res/DailyDelhiClimateTest.csv", header=TRUE)
head(DailyDelhiClimateTest)
## date meantemp humidity wind_speed meanpressure
## 1 2017-01-01 15.91304 85.86957 2.743478 59.000
## 2 2017-01-02 18.50000 77.22222 2.894444 1018.278
## 3 2017-01-03 17.11111 81.88889 4.016667 1018.333
## 4 2017-01-04 18.70000 70.05000 4.545000 1015.700
## 5 2017-01-05 18.38889 74.94444 3.300000 1014.333
## 6 2017-01-06 19.31818 79.31818 8.681818 1011.773
Visualisasi data
Sebelum dilakukan visualisasi data, variabel yang digunakan yaitu wind speed akan diubah menjadi time-series object dengan fungsits. Data yang digunakan terdiri dari 114 observasi atau yang diukur dalam 114 hari. Hasil dari visualisasi data tersaji pada plot berikut:
DailyDelhiClimateTest.ts <- ts(DailyDelhiClimateTest$wind_speed, start=1) #form a time-series object
head(DailyDelhiClimateTest.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 2.743478 2.894444 4.016667 4.545000 3.300000 8.681818
ts.plot(DailyDelhiClimateTest.ts, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Time Series Plot of Wind Speed", sub = "Source : Kaggle (https://www.kaggle.com/)",
cex.sub = 0.8)
points(DailyDelhiClimateTest.ts, pch = 20, col = "blue")
Split data
Data yang akan digunakan untuk menentukan model terbaik berdasarkan kandidat model akan dilakukan splitting data terlebih dahulu yaitu dengan membagi data menjadi dua bagian bagian pertama yaitu sebagai data training sebesar 80% dan bagian kedua sebagai data testing sebesar 20%. Splitting data ini menggunakan fungsi subset. Rasio splitting data yang digunakan 80:20 karena data wind speed dari Daily Delhi Climate memiliki range yang masuk akal yaitu antara 0 hingga 20 dan jika dilihat dari nilai rata-ratanya sebesar 8.1439241. Selain itu rasio splitting data 80:20 ratio adalah the best splitting ratio yang sebelumnya telah diteliti oleh [Rácz, A. et al.].
options(digits = 8)
# Training set
train.DailyDelhiClimateTest.ts = subset(DailyDelhiClimateTest.ts, start=1,end=94)
# Testing set
test.DailyDelhiClimateTest.ts = subset(DailyDelhiClimateTest.ts, start=95,end=114)
Visualisasi data training yang akan digunakan untuk mencari model terbaik
ts.plot(train.DailyDelhiClimateTest.ts, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Time Series Plot of Wind Speed", sub = "Source : Kaggle (https://www.kaggle.com/)", cex.sub = 0.8)
points(train.DailyDelhiClimateTest.ts, pch = 20, col = "blue")
Model ARIMA
Model ARIMA terbaik dari data wind speed dari Daily Delhi Climate sebagai berikut:
1. Cek kestasioneran data
Mengidentifikasi kestasioneran data dilakukan dengan uji ADF.
Uji Augmented Dickey-Fuller (ADF) adalah salah satu alat identifikasi untuk menguji kestasioneran data dan memiliki hipotesis sebagai berikut:
\(H_{0}\) : Data tidak stasioner (unit roots mendekati 1)
\(H_{1}\) : Data stasioner (unit roots tidak mendekati 1)
adf.test(train.DailyDelhiClimateTest.ts, alternative = "stationary", k=trunc((length(train.DailyDelhiClimateTest.ts)-1)^(1/3)))
## Warning in adf.test(train.DailyDelhiClimateTest.ts, alternative =
## "stationary", : p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train.DailyDelhiClimateTest.ts
## Dickey-Fuller = -4.96428, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan hasil uji ADF dengan taraf signifikansi \(\alpha = 5% = 0.05\) di atas dapat diketahui bersama bahwa, \(p-value = 0.01 < \alpha = 0.05\) sehingga keputusan yang diambil adalah Tolak \(H_{0}\) artinya data yang digunakan merupakan data yang stasioner
2. Identifikasi kandidat model
Identifikasi kandidat model diperoleh berdasarkan nilai \(p\) dan \(q\) dimana nilai \(d=0\)
acf(train.DailyDelhiClimateTest.ts, lag.max = 20, col = "blue")
Berdasarkan plot ACF terlihat bahwa plot cuts off setelah lag ke-1 sehingga kandidat model yang diperoleh adalah \(ARIMA(0,0,1)\)
pacf(train.DailyDelhiClimateTest.ts, lag.max = 20, col = "blue")
Berdasarkan plot PACF di atas kandidat model yang diperoleh adalah \(ARIMA(1,0,0)\)
eacf(train.DailyDelhiClimateTest.ts)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o o o o
## 1 o o o o o o o o o o o o o o
## 2 x o o o o o o o o o o o o o
## 3 x o o o o o o o o o o o o o
## 4 x x o o o o o o o o o o o o
## 5 o o o x o o o o o o o o o o
## 6 o o x x o o o o o o o o o o
## 7 x x o x o o o o o o o o o o
Berdasarkan hasil EACF di atas kandidat model yang diperoleh adalah \(ARIMA(1,0,1), ARIMA(2,0,1)\), dan \(ARIMA(3,0,1)\)
Karena data yang digunakan adalah data yang stasioner maka \(d=0\) dan dapat ditentukan beberapa kandidat model yaitu: \(ARIMA(0,0,1), ARIMA(1,0,0), ARIMA(1,0,1), ARIMA(2,0,1), ARIMA(3,0,1)\).
# ARIMA(0,0,1)
arima001 <- arima(train.DailyDelhiClimateTest.ts, order = c(0,0,1), include.mean = TRUE, method = "ML")
arima001
##
## Call:
## arima(x = train.DailyDelhiClimateTest.ts, order = c(0, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ma1 intercept
## 0.30050 7.97552
## s.e. 0.08785 0.41696
##
## sigma^2 estimated as 9.7094: log likelihood = -240.26, aic = 484.53
# ARIMA(1,0,0)
arima100 <- arima(train.DailyDelhiClimateTest.ts, order = c(1,0,0), include.mean = TRUE, method = "ML")
arima100
##
## Call:
## arima(x = train.DailyDelhiClimateTest.ts, order = c(1, 0, 0), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 intercept
## 0.37489 7.97396
## s.e. 0.09854 0.50271
##
## sigma^2 estimated as 9.4007: log likelihood = -238.77, aic = 481.55
# ARIMA(1,0,1)
arima101 <- arima(train.DailyDelhiClimateTest.ts, order = c(1,0,1), include.mean = TRUE, method = "ML")
arima101
##
## Call:
## arima(x = train.DailyDelhiClimateTest.ts, order = c(1, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ma1 intercept
## 0.51209 -0.15761 7.96742
## s.e. 0.21032 0.23360 0.53995
##
## sigma^2 estimated as 9.3572: log likelihood = -238.56, aic = 483.12
# ARIMA(2,0,1)
arima201 <- arima(train.DailyDelhiClimateTest.ts, order = c(2,0,1), include.mean = TRUE, method = "ML")
arima201
##
## Call:
## arima(x = train.DailyDelhiClimateTest.ts, order = c(2, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ar2 ma1 intercept
## 0.09171 0.17727 0.25468 7.96839
## s.e. 0.79485 0.29812 0.79974 0.53636
##
## sigma^2 estimated as 9.3355: log likelihood = -238.45, aic = 484.91
# ARIMA(3,0,1)
arima301 <- arima(train.DailyDelhiClimateTest.ts, order = c(3,0,1), include.mean = TRUE, method = "ML")
arima301
##
## Call:
## arima(x = train.DailyDelhiClimateTest.ts, order = c(3, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ar2 ar3 ma1 intercept
## 0.70722 -0.02716 -0.08113 -0.35959 7.97629
## s.e. 0.73026 0.28721 0.11474 0.72723 0.50064
##
## sigma^2 estimated as 9.3156: log likelihood = -238.36, aic = 486.71
AICKandidatModel <- c(484.53, 481.55, 483.12, 484.91, 486.71)
KndidatModelARIMA <- c("ARIMA(0,0,1)", "ARIMA(1,0,0)", "ARIMA(1,0,1)", "ARIMA(2,0,1)", "ARIMA(3,0,1)")
compmodelARIMA <- cbind(KndidatModelARIMA, AICKandidatModel)
colnames(compmodelARIMA) <- c("Kandidat Model", "Nilai AIC")
compmodelARIMA <- as.data.frame(compmodelARIMA)
compmodelARIMA
## Kandidat Model Nilai AIC
## 1 ARIMA(0,0,1) 484.53
## 2 ARIMA(1,0,0) 481.55
## 3 ARIMA(1,0,1) 483.12
## 4 ARIMA(2,0,1) 484.91
## 5 ARIMA(3,0,1) 486.71
Model terbaik diperoleh Berdasarkan nilai AIC terkecil dari kandidat model. Oleh karena itu, Model terbaik yang diperoleh yaitu \(ARIMA(1,0,0)\)
Model \(ARIMA(1,0,0)\), maka \(Y_{t}\) diperoleh dari penjabaran operator backshift sehingga untuk model \(ARIMA(1,0,0)\): \[\phi_{p} (1-B)^{d} Y_{t}=\mu+\theta_{q}(B)e_{t}\] \[(1-\phi_{1}(B))(1-B)^{0} Y_{t}=\mu+\theta_{0}(B)e_{t}\] \[(1-\phi_{1}(B))(1) Y_{t}=\mu+(1)e_{t}\] \[(Y_{t}-\phi_{1}Y_{t-1})=\mu+e_{t}\] \[Y_{t}=\mu+\phi_{1}Y_{t-1}+e_{t}\]
Penduga parameter \(\widehat{\mu}=7.97396\), \(\widehat{\phi}_{1}=0.37489\), dengan sigma^2 estimated as 9.4007 adalah nilai dugaan bagi \(\sigma_{e}^2\). Model terbaik yang diperoleh yaitu model \(ARIMA(1,0,0)\).
\[Y_{t}=\mu+\phi_{1}Y_{t-1}+e_{t}=7.97396+0.37489Y_{t-1}+e_{t}\]
Oleh karena itu, model terbaik tersebut selanjutnya bisa digunakan untuk peramalan.
Model terbaik ini selanjutnya dilakukan uji hipotesis untuk mengetahui signifikansi sebuah parameter.
\(H_{0}\) : parameter \(= 0\)
\(H_{1}\) : parameter \(\neq\) \(0\)
Pengambilan keputusan yaitu Tolak \(H_{0}\) jika \(|t_{hitung}| > t_{\frac{\alpha}{2},(n-1)}\)
T-hitung parameter dugaan model \(ARIMA(1,0,0)\) \[t_{hitung}=\frac{parameter estimasi}{SE parameter estimasi}\]
intercept_mu <- 7.97396/0.50271
intercept_mu
## [1] 15.861948
ar_phi1 <- 0.37489/0.09854
ar_phi1
## [1] 3.8044449
prmtrdugaanarima100 <- c("mu", "phi(1)")
thitungprmtrarima100 <- c(abs(intercept_mu), abs(ar_phi1))
ttabel <- c("1.981180359", "1.981180359")
keputusan <- c("Signifikan", "Signifikan")
tksignimodelarima100 <- cbind(prmtrdugaanarima100, thitungprmtrarima100, ttabel, keputusan)
colnames(tksignimodelarima100) <- c("Parameter dugaan", "T-Hitung", "T-Tabel", "Keputusan")
tksignimodelarima100 <- as.data.frame(tksignimodelarima100)
tksignimodelarima100
## Parameter dugaan T-Hitung T-Tabel Keputusan
## 1 mu 15.8619482405363 1.981180359 Signifikan
## 2 phi(1) 3.80444489547392 1.981180359 Signifikan
lmtest::coeftest(arima100)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.3748900 0.0985368 3.80457 0.00014205 ***
## intercept 7.9739594 0.5027069 15.86204 < 2.22e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan tabel di atas maka pengambilan keputusan dari semua paramater dugaan dari model \(ARIMA(1,0,0)\) semua parameternya signifikan.
Dibandingkan dengan autoarima
auto.arima(train.DailyDelhiClimateTest.ts, trace = TRUE)
##
## ARIMA(2,1,2) with drift : Inf
## ARIMA(0,1,0) with drift : 509.6631
## ARIMA(1,1,0) with drift : 498.68014
## ARIMA(0,1,1) with drift : Inf
## ARIMA(0,1,0) : 507.68091
## ARIMA(2,1,0) with drift : 497.92096
## ARIMA(3,1,0) with drift : 497.96692
## ARIMA(2,1,1) with drift : Inf
## ARIMA(1,1,1) with drift : Inf
## ARIMA(3,1,1) with drift : Inf
## ARIMA(2,1,0) : 495.93179
## ARIMA(1,1,0) : 496.70215
## ARIMA(3,1,0) : 495.96707
## ARIMA(2,1,1) : 482.9352
## ARIMA(1,1,1) : 480.95136
## ARIMA(0,1,1) : 486.38975
## ARIMA(1,1,2) : 483.00556
## ARIMA(0,1,2) : 482.44406
## ARIMA(2,1,2) : Inf
##
## Best model: ARIMA(1,1,1)
## Series: train.DailyDelhiClimateTest.ts
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.32134 -0.94195
## s.e. 0.10897 0.04151
##
## sigma^2 estimated as 9.6898: log likelihood=-237.34
## AIC=480.68 AICc=480.95 BIC=488.28
Diagnostic model
ARIMA100diag <- stats::arima(train.DailyDelhiClimateTest.ts, order = c(1,0,0), method = "ML")
checkresiduals(ARIMA100diag)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,0,0) with non-zero mean
## Q* = 7.31257, df = 8, p-value = 0.50331
##
## Model df: 2. Total lags used: 10
Berdasarkan pl0t di atas terlihat bahwa sisaan tidak mengikuti sebaran normal. Selanjutnya, ditinjau dari plot ACF dan PACF terlihat bahwa tidak ada lag yang signifikan. Hal tersebut menunjukkan bahwa tidak ada gejala autokorelasi pada sisaan. Selanjutnya, untuk memastikan kembali akan dilakukan uji asumsi secara formal:
sisaan <- arima100$residuals
Uji formal normalitas data
\(H_{0}\) : sisaan menyebar normal
\(H_{1}\) : sisaan tidak mengikuti sebaran normal
# Uji formal normalitas data
ks.test(sisaan,"pnorm")
##
## One-sample Kolmogorov-Smirnov test
##
## data: sisaan
## D = 0.303924, p-value = 3.3471e-08
## alternative hypothesis: two-sided
Hasil pengujian, Normalitas Data: Hasil : \(p-value=0.000000033471 < \alpha=0.05\) yang berarti TOLAK \(H_{0}\). Sisaan tidak menyebar normal
Uji nilai tengah sisaan
\(H_{0}:\mu = 0\)
\(H_{1}:\mu \neq 0\)
# Uji nilai tengah sisaan
t.test(sisaan, mu = 0, alternative = "two.sided")
##
## One Sample t-test
##
## data: sisaan
## t = 0.0783562, df = 93, p-value = 0.93771
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -0.60642519 0.65624802
## sample estimates:
## mean of x
## 0.024911413
Nilai Tengah Sisaan Hasil : \(p-value=0.93771 > \alpha=0.05\) yang berarti TAK TOLAK \(H_{0}\). Nilai tengah sisaan sama dengan \(0\)
Uji autokorelasi
\(H_{0}\) : tidak ada autokorelasi
\(H_{1}\) : terdapat autokorelasi
# Uji autokorelasi
Box.test(sisaan, lag = 23 ,type = "Ljung")
##
## Box-Ljung test
##
## data: sisaan
## X-squared = 14.7715, df = 23, p-value = 0.90264
Autokorelasi Hasil : \(p-value=0.90264 > \alpha=0.05\) yang berarti TAK TOLAK \(H_{0}\). Tidak terdapat gejala autokorelasi
Kesimpulan : Asumsi terpenuhi, kecuali sisaan tidak menyebar normal.
Overfitting
Overfitting model ARIMA akan diaplikasikan pada \(ARIMA(1,0,1)\) dan \(ARIMA(2,0,0)\)
# Overfitting model
ovefitarima111<- arima(train.DailyDelhiClimateTest.ts, order = c(1,1,1), method = "ML")
ovefitarima101<- arima(train.DailyDelhiClimateTest.ts, order = c(1,0,1), method = "ML")
ovefitarima200<- arima(train.DailyDelhiClimateTest.ts, order = c(2,0,0), method = "ML")
modelakursii <- c("AIC ARIMA(1,1,1)", "AIC ARIMA(1,0,1)", "AIC ARIMA(2,0,0)")
ModelARIMAaku <- c(478.68, 483.12, 482.99)
Akurasiall <- cbind(modelakursii, ModelARIMAaku)
colnames(Akurasiall) <- c("Akurasi", "Nilai")
Akurasiall <- as.data.frame(Akurasiall)
Akurasiall
## Akurasi Nilai
## 1 AIC ARIMA(1,1,1) 478.68
## 2 AIC ARIMA(1,0,1) 483.12
## 3 AIC ARIMA(2,0,0) 482.99
Berdasarkan model terbaik dari fungsi auto.arima yaitu \(ARIMA(1,1,1)\) nilai AIC sebesar \(478.68\) dan overfitting model \(ARIMA(1,0,1)\) dan \(ARIMA (2,0,0)\) nilai AICnya sebesar \(483.12\) dan \(482.99\) dieroleh bahwa nilai AIC terkecil yaitu model \(ARIMA(1,1,1)\) dari fungsi auto.arima. Namun, model ini tidak disarankan untuk dilanjutkan dalam analisis karena beberapa pertimbangan yaitu sebagai berikut:
Hasil plot correlogram pada data train wind speed tanpa differencing di atas adalah stasioner, dibuktikan berdasarkan adanya lag maka data pada proses ini sudah stasioner. Sehingga tidak perlu melakukan differencing
uji ADF pada data train wind speed tanpa differencing juga memenuhi asumsi stasioner.
Oleh karena itu, model yang disarankan untuk dianalisis lebih lanjut yaitu dengan menggunakan model \(ARIMA(1,0,0)\) yang mana ini adalah model terbaik (dengan nilai AIC terkecil) dari kandidat model berdasarkan ACF, PACF, dan EACF.
Peramalan
Selanjutnya yaitu melakukan peramalan hasil dari pemodelan dengan menggunakan data training, yaitu sebagai berikut:
Fitted model \(ARIMA(1,0,0)\) dengan data training
predictARIMA100 <- fitted(arima100)
fittedARIMA100 <- cbind(train.DailyDelhiClimateTest.ts, predictARIMA100)
Visualisasi hasil fitted model \(ARIMA(1,0,0)\) dengan data training
ts.plot(train.DailyDelhiClimateTest.ts, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Fitted Time Series Plot of Wind Speed", cex.sub = 0.8)
points(train.DailyDelhiClimateTest.ts, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA100)
forecasting <- predict(arima100, n.ahead = 20)
hasilforcasting <- as.data.frame(forecasting)
hasilforcasting
## pred se
## 1 10.3530266 3.0660616
## 2 8.8658479 3.2744368
## 3 8.3083195 3.3026689
## 4 8.0993077 3.3066174
## 5 8.0209512 3.3071719
## 6 7.9915762 3.3072498
## 7 7.9805638 3.3072608
## 8 7.9764353 3.3072623
## 9 7.9748876 3.3072625
## 10 7.9743074 3.3072626
## 11 7.9740899 3.3072626
## 12 7.9740083 3.3072626
## 13 7.9739777 3.3072626
## 14 7.9739663 3.3072626
## 15 7.9739620 3.3072626
## 16 7.9739604 3.3072626
## 17 7.9739598 3.3072626
## 18 7.9739595 3.3072626
## 19 7.9739595 3.3072626
## 20 7.9739594 3.3072626
Visualisasi hasil peramalan model ARIMA(1,0,0) 20 waktu ke depan
plot(arima100, n.ahead=20, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Fitted Time Series Plot of Wind Speed", cex.sub = 0.8)
points(train.DailyDelhiClimateTest.ts, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA100)
Fitting ARIMA(1,0,0) dengan data testing
arima100test <- arima(test.DailyDelhiClimateTest.ts, order = c(1,0,0), include.mean = TRUE, method = "ML")
arima100test
##
## Call:
## arima(x = test.DailyDelhiClimateTest.ts, order = c(1, 0, 0), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 intercept
## 0.60476 9.54622
## s.e. 0.17698 1.95106
##
## sigma^2 estimated as 13.229: log likelihood = -54.43, aic = 112.86
predictARIMA100test <- fitted(arima100test)
fittedARIMA100test <- cbind(test.DailyDelhiClimateTest.ts, predictARIMA100test)
Visualisasi hasil fitted model \(ARIMA(1,0,0)\) dengan data testing
ts.plot(test.DailyDelhiClimateTest.ts, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Fitted Time Series Plot of Wind Speed", cex.sub = 0.8)
points(test.DailyDelhiClimateTest.ts, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA100test)
forecastingtest <- predict(arima100test, n.ahead = 20)
hasilforcastingtest <- as.data.frame(forecastingtest)
hasilforcastingtest
## pred se
## 1 11.1252078 3.6372306
## 2 10.5011318 4.2506420
## 3 10.1237140 4.4539404
## 4 9.8954657 4.5260143
## 5 9.7574296 4.5520894
## 6 9.6739506 4.5615889
## 7 9.6234655 4.5650582
## 8 9.5929341 4.5663265
## 9 9.5744698 4.5667902
## 10 9.5633032 4.5669598
## 11 9.5565502 4.5670218
## 12 9.5524661 4.5670445
## 13 9.5499963 4.5670528
## 14 9.5485026 4.5670559
## 15 9.5475993 4.5670570
## 16 9.5470530 4.5670574
## 17 9.5467226 4.5670575
## 18 9.5465228 4.5670576
## 19 9.5464020 4.5670576
## 20 9.5463289 4.5670576
Visualisasi hasil peramalan model ARIMA(1,0,0) 20 waktu ke depan
plot(arima100test, n.ahead=20, col="blue", ylab = "Wind speed", xlab = "Day")
title(main = "Fitted Time Series Plot of Wind Speed", cex.sub = 0.8)
points(test.DailyDelhiClimateTest.ts, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA100test)
Akurasi hasil peramalan
Akurasi hasil peramalan model \(ARIMA(1,0,0)\). AKurasi hasil peramalan model \(ARIMA(1,0,0)\) dibandingin dengan data aktual adalah Data testing.
akurasi.arima100training <- accuracy(train.DailyDelhiClimateTest.ts, predictARIMA100)
akurasi.arima100testing <- accuracy(test.DailyDelhiClimateTest.ts, predictARIMA100test)
compmodelforecast <- cbind(akurasi.arima100training, akurasi.arima100testing)
Akurasi <- c("ME", "RMSE", "MAE", "MPE", "MAPE")
ModelARIMA100train <- c(-0.024911413, 3.0660616, 2.4836684, -0.38040078, 31.953958)
ModelARIMA100test <- c(0.19557203, 3.6372306, 2.8111992, 2.1593286, 30.871504)
Akurasiall <- rbind(Akurasi, ModelARIMA100train, ModelARIMA100test)
Akurasiall <- as.data.frame(Akurasiall)
Akurasiall
## V1 V2 V3 V4 V5
## Akurasi ME RMSE MAE MPE MAPE
## ModelARIMA100train -0.024911413 3.0660616 2.4836684 -0.38040078 31.953958
## ModelARIMA100test 0.19557203 3.6372306 2.8111992 2.1593286 30.871504
Berdasarkan hasil fitting model dengan menggunakan metode ARIMA yang diperoleh model terbaik yaitu \(ARIMA(1,0,0)\). Pemilihan model terbaik ini didapatkan berdasarkan nilai akurasi AIC yang terkecil dari model tentatif dan diperoleh akurasi dari model berdasarkan nilai MAPE sebesar \(31.953958\) untuk data train dan MAPE sebesar \(30.87150\) untuk data testing.
Berdasarkan range nilai MAPE bahwa kemampuan model dalam meramal:
rangeaku <- c("<10%", "10-20%", "20-50%", ">50%")
arti <- c("Kemampuan peramalan sangat baik", "Kemampuan peramalan baik", "Kemampuan peramalan layak", "Kemampuan peramalan buruk")
Akurasiall <- cbind(rangeaku, arti)
colnames(Akurasiall) <- c("Range MAPE", "Arti")
Akurasiall <- as.data.frame(Akurasiall)
Akurasiall
## Range MAPE Arti
## 1 <10% Kemampuan peramalan sangat baik
## 2 10-20% Kemampuan peramalan baik
## 3 20-50% Kemampuan peramalan layak
## 4 >50% Kemampuan peramalan buruk
Sehingga berdasarkan range tersebut model \(ARIMA(1,0,0)\) dengan nilai MAPE sebesar \(31.953958\) untuk data train dan MAPE sebesar \(30.87150\) untuk data testing memiliki tingkat peramalan yang layak.