Model ARIMA
Membaca Data Curah Hujan
data_hujan <- read.csv("C:/Users/ADVAN/OneDrive/文件/Tugas Apie/Topik Dalam Statistika 1/data curah hujan.csv")
head(data_hujan)## Tanggal Data_Curah_Hujan
## 1 1/4/2024 3.2
## 2 2/4/2024 0.0
## 3 3/4/2024 7.8
## 4 4/4/2024 2.4
## 5 5/4/2024 14.6
## 6 6/4/2024 1.2
Mengubah data tidak valid menjadi NA
Mengubah data tidak kosong menjadi NA
Melakukan Interpolasi Missing Value
## Warning: package 'zoo' was built under R version 4.5.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## [1] 0
## [1] "Tanggal" "Data_Curah_Hujan"
Mengubah Format Tanggal Menjadi Format Date
# Ubah menjadi character
data_hujan$Tanggal <- as.character(data_hujan$Tanggal)
# Membuat kolom tanggal baru
tanggal_baru <- rep(NA_character_, nrow(data_hujan))
# Format dd/mm/yyyy
idx1 <- grepl("/", data_hujan$Tanggal)
tanggal_baru[idx1] <- as.character(
as.Date(data_hujan$Tanggal[idx1],
format = "%d/%m/%Y")
)
# Format dd-mm-yyyy
idx2 <- grepl("-", data_hujan$Tanggal)
tanggal_baru[idx2] <- as.character(
as.Date(data_hujan$Tanggal[idx2],
format = "%d-%m-%Y")
)
# Konversi menjadi Date
data_hujan$Tanggal <- as.Date(tanggal_baru)Membentuk Variabel Tahun dan Bulan
data_hujan$Tahun <- format(data_hujan$Tanggal, "%Y")
data_hujan$Bulan <- format(data_hujan$Tanggal, "%m")## 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
## Warning: package 'lubridate' was built under R version 4.5.3
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
# Membuat variabel minggu
data_hujan$Minggu <- floor_date(data_hujan$Tanggal,
unit = "week",
week_start = 1)
# Mengubah data harian menjadi mingguan
data_mingguan <- data_hujan %>%
group_by(Minggu) %>%
summarise(
Curah_Hujan_Mingguan = sum(Data_Curah_Hujan,
na.rm = TRUE)
)
# Melihat hasil data mingguan
head(data_mingguan)## # A tibble: 6 × 2
## Minggu Curah_Hujan_Mingguan
## <date> <dbl>
## 1 2024-04-01 40.8
## 2 2024-04-08 42
## 3 2024-04-15 68.2
## 4 2024-04-22 52.5
## 5 2024-04-29 71.4
## 6 2024-05-06 109.
data_mingguan <- data_hujan %>%
group_by(Minggu) %>%
summarise(
Curah_Hujan_Mingguan = round(
mean(Data_Curah_Hujan, na.rm = TRUE),
1
)
)
# Menampilkan hasil
print(data_mingguan)## # A tibble: 105 × 2
## Minggu Curah_Hujan_Mingguan
## <date> <dbl>
## 1 2024-04-01 5.8
## 2 2024-04-08 6
## 3 2024-04-15 9.7
## 4 2024-04-22 7.5
## 5 2024-04-29 10.2
## 6 2024-05-06 15.6
## 7 2024-05-13 9.1
## 8 2024-05-20 14.4
## 9 2024-05-27 21.6
## 10 2024-06-03 10.6
## # ℹ 95 more rows
Analisis Statistika Deskriptif
# Analisis Statistika Deskriptif
rata_rata <- mean(data_mingguan$Curah_Hujan_Mingguan, na.rm = TRUE)
kuartil <- quantile(
data_mingguan$Curah_Hujan_Mingguan,
probs = c(0.25, 0.50, 0.75),
na.rm = TRUE
)
q1 <- kuartil[1]
median <- kuartil[2]
q3 <- kuartil[3]
varians <- var(data_mingguan$Curah_Hujan_Mingguan, na.rm = TRUE)
simpangan_baku <- sd(data_mingguan$Curah_Hujan_Mingguan, na.rm = TRUE)
maksimum <- max(data_mingguan$Curah_Hujan_Mingguan, na.rm = TRUE)
minimum <- min(data_mingguan$Curah_Hujan_Mingguan, na.rm = TRUE)
# Menampilkan hasil
statistika_deskriptif <- data.frame(
Statistik = c(
"Minimum",
"Kuartil 1 (Q1)",
"Median (Q2)",
"Kuartil 3 (Q3)",
"Maksimum",
"Rata-rata",
"Varians",
"Simpangan Baku"
),
Nilai = c(
minimum,
q1,
median,
q3,
maksimum,
rata_rata,
varians,
simpangan_baku
)
)
# Membulatkan 2 angka di belakang koma
statistika_deskriptif$Nilai <- round(
statistika_deskriptif$Nilai,
2
)
print(statistika_deskriptif)## Statistik Nilai
## 1 Minimum 0.00
## 2 Kuartil 1 (Q1) 3.40
## 3 Median (Q2) 7.40
## 4 Kuartil 3 (Q3) 12.50
## 5 Maksimum 32.60
## 6 Rata-rata 9.25
## 7 Varians 60.88
## 8 Simpangan Baku 7.80
Mengubah data menjadi Time Series
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 5.8 6.0 9.7 7.5 10.2 15.6
Visualisasi Data Time Series
ts.plot(data_mingguan.ts, col="blue", ylab = "Curah Hujan", xlab = "Minggu")
title(main = "Time Series Plot Data Curah Hujan", sub = "Sumber : Data Online BMKG Stasiun Meteorologi Tjilik Riwut ",
cex.sub = 0.8)
points(data_mingguan.ts, pch = 20, col = "blue")spliting data
# Training set
train.Curah_Hujan_Mingguan.ts <- data_mingguan.ts[1:84]
# Testing set
test.Curah_Hujan_Mingguan.ts <- data_mingguan.ts[85:105]Visualisasi data train yang akan digunakan untuk mencari model terbaik
ts.plot(train.Curah_Hujan_Mingguan.ts, col="blue", ylab = "Curah_Hujan_Mingguan", xlab = "Minggu")
title(main = "Train Time Series Plot Curah Hujan", cex.sub = 0.8)
points(train.Curah_Hujan_Mingguan.ts, pch = 20, col = "blue")Visualisasi data testing yang akan digunakan untuk mencari model terbaik
ts.plot(test.Curah_Hujan_Mingguan.ts, col="blue", ylab = "Curah_Hujan_Mingguan", xlab = "Minggu")
title(main = "Test Time Series Plot Curah Hujan", cex.sub = 0.8)
points(test.Curah_Hujan_Mingguan.ts, pch = 20, col = "blue")
# Model ARIMA
- Cek Cek kestasioneran data
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
adf.test(train.Curah_Hujan_Mingguan.ts, alternative = "stationary", k=trunc((length(train.Curah_Hujan_Mingguan.ts)-1)^(1/3)))##
## Augmented Dickey-Fuller Test
##
## data: train.Curah_Hujan_Mingguan.ts
## Dickey-Fuller = -2.8635, Lag order = 4, p-value = 0.2217
## alternative hypothesis: stationary
Karena nilai \(p-value = 0.2217 > \alpha = 0.05\) sehingag dilakukan differencing hingga data train stasioner
# Differencing Ordo 1
Curah_Hujan_Mingguan.diff1 <- diff(train.Curah_Hujan_Mingguan.ts, difference=1)library(tseries)
adf.test(Curah_Hujan_Mingguan.diff1, alternative = "stationary", k=trunc((length(Curah_Hujan_Mingguan.diff1)-1)^(1/3)))## Warning in adf.test(Curah_Hujan_Mingguan.diff1, alternative = "stationary", :
## p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: Curah_Hujan_Mingguan.diff1
## Dickey-Fuller = -6.3133, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
- Identifikasi kandidat model
Berdasarkan plot ACF terlihat bahwa plot cuts off setelah lag ke-1
sehingga kandidat model yang diperoleh adalah \(ARIMA(0,1,1)\)
Berdasarkan plot PACF di atas kandidat model yang diperoleh adalah \(ARIMA(2,1,0)\)
## Warning: package 'TSA' was built under R version 4.5.3
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o x o o o o o o o
## 1 x x o o o o x o x o o o o o
## 2 x x o o o o o x o o o o o o
## 3 x o o o o o o o o o o o o o
## 4 x o o o o o o o o o o o o o
## 5 x o o o o x o o o o o o o o
## 6 x o x x x o o o o o o o o o
## 7 o o o x x o o o o o o o o o
Berdasarkan hasil EACF di atas kandidat model yang diperoleh adalah \(ARIMA(1,1,0)\),\(ARIMA(2,1,1)\),\(ARIMA(1,1,3)\)
Karena data yang digunakan adalah data yang hasil differencing orde pertama maka \(d=1\) dan dapat ditentukan beberapa kandidat model yaitu: \(ARIMA(0,1,1),ARIMA(2,1,0),ARIMA(1,1,0),ARIMA(2,1,1),ARIMA(1,1,3)\)
# ARIMA(0,1,1)
arima011 <- arima(Curah_Hujan_Mingguan.diff1, order = c(0,0,1), include.mean = TRUE, method = "ML")
arima011##
## Call:
## arima(x = Curah_Hujan_Mingguan.diff1, order = c(0, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ma1 intercept
## -0.8095 0.0622
## s.e. 0.0836 0.1749
##
## sigma^2 estimated as 61.47: log likelihood = -289.23, aic = 582.45
# ARIMA(2,1,0)
arima210 <- arima(Curah_Hujan_Mingguan.diff1, order = c(2,0,0), include.mean = TRUE, method = "ML")
arima210##
## Call:
## arima(x = Curah_Hujan_Mingguan.diff1, order = c(2, 0, 0), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ar2 intercept
## -0.5087 -0.3546 0.1585
## s.e. 0.1043 0.1035 0.4924
##
## sigma^2 estimated as 68.73: log likelihood = -293.54, aic = 593.07
# ARIMA(1,1,0)
arima110 <- arima(Curah_Hujan_Mingguan.diff1, order = c(1,0,0), include.mean = TRUE, method = "ML")
arima110##
## Call:
## arima(x = Curah_Hujan_Mingguan.diff1, order = c(1, 0, 0), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 intercept
## -0.3699 0.1197
## s.e. 0.1025 0.7129
##
## sigma^2 estimated as 78.63: log likelihood = -298.98, aic = 601.97
# ARIMA(2,1,1)
arima211 <- arima(Curah_Hujan_Mingguan.diff1, order = c(2,0,1), include.mean = TRUE, method = "ML")
arima211##
## Call:
## arima(x = Curah_Hujan_Mingguan.diff1, order = c(2, 0, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ar2 ma1 intercept
## 0.1682 -0.0899 -0.8550 0.0454
## s.e. 0.1756 0.1524 0.1517 0.1481
##
## sigma^2 estimated as 59.65: log likelihood = -288.04, aic = 584.08
# ARIMA(1,1,3)
arima113 <- arima(Curah_Hujan_Mingguan.diff1, order = c(1,0,3), include.mean = TRUE, method = "ML")
arima113##
## Call:
## arima(x = Curah_Hujan_Mingguan.diff1, order = c(1, 0, 3), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ar1 ma1 ma2 ma3 intercept
## -0.8136 0.1356 -0.7865 -0.1091 0.0403
## s.e. 0.2867 0.3065 0.2095 0.1817 0.1264
##
## sigma^2 estimated as 58.94: log likelihood = -287.63, aic = 585.25
Model Terbaik
AICKandidatModel <- c(arima011$aic, arima210$aic, arima110$aic, arima211$aic, arima113$aic)
KandidatModelARIMA <- c("ARIMA(0,1,1)", "ARIMA(2,1,0)","ARIMA(1,1,0)","ARIMA(2,1,1)", "ARIMA(1,1,3)")
compmodelARIMA <- cbind(KandidatModelARIMA, AICKandidatModel)
colnames(compmodelARIMA) <- c("Kandidat Model", "Nilai AIC")
compmodelARIMA <- as.data.frame(compmodelARIMA)
compmodelARIMA## Kandidat Model Nilai AIC
## 1 ARIMA(0,1,1) 582.450422970504
## 2 ARIMA(2,1,0) 593.074312771881
## 3 ARIMA(1,1,0) 601.965328533654
## 4 ARIMA(2,1,1) 584.080230574667
## 5 ARIMA(1,1,3) 585.250321746231
Model terbaik diperoleh berdasarkan nilai AIC terkecil. Oleh karena itu, model terbaik yang diperoleh adalah \(ARIMA(0,1,1)\)
Model terbaik ini selanjutnya dilakukan uji hipotesis untuk mengetahui signifikansi parameternya, dimana:
## [1] 0.3556318
## [1] -9.683014
prmtrdugaanarima011 <- c("mu", "theta(1)")
thitungprmtrarima011 <- c(abs(intercept_mu), abs(ma_theta1))
ttabel <- c("1.661961084", "1.661961084")
keputusan <- c("Tidak Signifikan","Signifikan")
tksignimodelarima011 <- cbind(prmtrdugaanarima011, thitungprmtrarima011, ttabel, keputusan)colnames(tksignimodelarima011) <- c("Parameter dugaan", "T-Hitung", "T-Tabel", "Keputusan")
tksignimodelarima011 <- as.data.frame(tksignimodelarima011)
tksignimodelarima011## Parameter dugaan T-Hitung T-Tabel Keputusan
## 1 mu 0.355631789594054 1.661961084 Tidak Signifikan
## 2 theta(1) 9.68301435406699 1.661961084 Signifikan
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.809516 0.083585 -9.6849 <2e-16 ***
## intercept 0.062194 0.174945 0.3555 0.7222
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dibandingkan Arima
## Warning: package 'forecast' was built under R version 4.5.3
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
## Series: Curah_Hujan_Mingguan.diff1
## ARIMA(0,0,1) with non-zero mean
##
## Coefficients:
## ma1 mean
## -0.8096 0.0622
## s.e. 0.0836 0.1749
##
## sigma^2 = 62.99: log likelihood = -289.23
## AIC=584.45 AICc=584.75 BIC=591.71
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.06691802 7.840362 6.033166 76.36537 162.4157 0.5120261 0.1074457
## Series: Curah_Hujan_Mingguan.diff1
## ARIMA(2,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 mean
## -0.5087 -0.3546 0.1585
## s.e. 0.1043 0.1035 0.4924
##
## sigma^2 = 71.31: log likelihood = -293.54
## AIC=595.07 AICc=595.59 BIC=604.75
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.01264219 8.290571 6.089607 70.99019 120.366 0.5168161
## ACF1
## Training set -0.07471012
## Series: Curah_Hujan_Mingguan.diff1
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## -0.3698 0.1212
## s.e. 0.1024 0.7130
##
## sigma^2 = 80.57: log likelihood = -298.98
## AIC=603.97 AICc=604.27 BIC=611.22
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.001841727 8.867355 6.479491 87.36389 104.6858 0.5499051
## ACF1
## Training set -0.1325953
## Series: Curah_Hujan_Mingguan.diff1
## ARIMA(2,0,1) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 mean
## 0.1682 -0.0898 -0.8550 0.0454
## s.e. 0.1757 0.1524 0.1518 0.1481
##
## sigma^2 = 62.67: log likelihood = -288.04
## AIC=586.08 AICc=586.86 BIC=598.17
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.04578903 7.723374 5.913358 85.77726 157.9522 0.5018582
## ACF1
## Training set -0.006465298
## Series: Curah_Hujan_Mingguan.diff1
## ARIMA(1,0,3) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 ma3 mean
## -0.8136 0.1356 -0.7865 -0.1091 0.0403
## s.e. 0.2867 0.3065 0.2095 0.1817 0.1264
##
## sigma^2 = 62.71: log likelihood = -287.63
## AIC=587.25 AICc=588.36 BIC=601.76
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.02340331 7.67704 5.883528 95.68344 161.8555 0.4993265
## ACF1
## Training set -0.006080369
AICKandidatModel <- c(model1$aic, model2$aic, model3$aic, model4$aic, model5$aic)
AICcKandidatModel <- c(model1$aicc, model2$aicc, model3$aicc, model4$aicc, model5$aicc)
BICKandidatModel <- c(model1$bic, model2$bic, model3$bic, model4$bic, model5$bic)
KandidatModelARIMA <- c("ARIMA(0,1,1)", "ARIMA(2,1,0)","ARIMA(1,1,0)","ARIMA(2,1,1)", "ARIMA(1,1,3)")
compmodelARIMA <- cbind(KandidatModelARIMA, AICKandidatModel, AICcKandidatModel, BICKandidatModel)
colnames(compmodelARIMA) <- c("Kandidat Model", "Nilai AIC", "Nilai AICc", "Nilai BIC")
compmodelARIMA <- as.data.frame(compmodelARIMA)
compmodelARIMA## Kandidat Model Nilai AIC Nilai AICc Nilai BIC
## 1 ARIMA(0,1,1) 584.450422709736 584.754220178091 591.706944533126
## 2 ARIMA(2,1,0) 595.074312771582 595.587133284403 604.749675202769
## 3 ARIMA(1,1,0) 603.965335012339 604.269132480693 611.221856835728
## 4 ARIMA(2,1,1) 586.080230568305 586.859451347526 598.174433607288
## 5 ARIMA(1,1,3) 587.250321746231 588.355584904125 601.76336539301
Model terbaik yang didapatkan adalah \(ARIMA(0,1,1)\) dengan fungsi Arima di mana nilai AIC sebesar \(584.45\) merupakan nilai AIC terkecil.
Oleh karena itu, model yang disarankan untuk dianalisis lebih lanjut yaitu dengan menggunakan model \(ARIMA(0,1,1)\) yang merupakan model terbaik berdasarkan nilai AIC terkecil dari kandidat model berdasarkan ACF, PACF, dan EACF.
Model \(ARIMA(0,1,1)\), maka \(Y_t\) diperoleh dari penjabaran operator backshift untuk model \(ARIMA(0,1,1)\) sebagai berikut:
\[ \phi_p(B)(1-B)^dY_t = \mu + \theta_q(B)e_t \] \[ \phi_0(B)(1-B)^dY_t = \mu + \theta_q(B)e_t \] \[ (1-B)Y_t = \mu + \theta_1(B)e_t \] \[ Y_t-Y_{t-1} = \mu + e_t-\theta_1e_{t-1} \] \[ Y_t = \mu + Y_{t-1} + e_t - \theta_1e_{t-1} \]
Pendugaan parameter \(\hat{\mu}\) = \(0.0622\), \(\theta_1 = -0.8096\). Model terbaik yang diperoleh yaitu model ARIMA(0,1,1).
] \[ Y_t = 0.0622 + Y_{t-1} + e_t + 0.8096e_{t-1} \]
Diagnostic model
ARIMA011diag <- stats::arima(Curah_Hujan_Mingguan.diff1 , order = c(0,0,1), method = "ML")
checkresiduals(ARIMA011diag)##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,0,1) with non-zero mean
## Q* = 12.003, df = 9, p-value = 0.2131
##
## Model df: 1. Total lags used: 10
Berdasarkan plot di atas terlihat bahwa sisaan tidak mengikuti sebaran normal. Selanjutnya, 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:
Uji normalitas data \(H_0\) : sisaan menyebar normal \(H_1\) : sisaan tidak mengikuti sebaran normal
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: sisaan
## D = 0.44682, p-value = 8.882e-16
## alternative hypothesis: two-sided
Berdasarkan hasil \(p-value = 8.882e-16 < \alpha = 0.05\) yang berarti tolak \(H_0\), artinya sisaan tidak menyebar normal.
Uji nilai tengah sisaan \(H_0\) : \(\mu = 0\) \(H_1\) : \(\mu \ne 0\)
##
## One Sample t-test
##
## data: sisaan
## t = 0.077401, df = 82, p-value = 0.9385
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -1.655323 1.789351
## sample estimates:
## mean of x
## 0.06701357
Berdasarkan hasil \(p-value = 0.9385 > \alpha = 0.05\) yang berarti terima \(H_0\), artinya nilai tengah sisaan sama dengan \(0\)
Uji autokorelasi \(H_0\) : tidak ada autokorelasi \(H_1\) : terdapat autokorelasi
##
## Box-Ljung test
##
## data: sisaan
## X-squared = 33.023, df = 23, p-value = 0.08067
Hasil \(p-value = 0.08067 > \alpha = 0.05\) yang berarti terima \(H_0\) atau tidak terdapat gejala autokorelasi
Kesimpulan: Asumsi terpenuhi, kecuali sisaan tidak menyebar normal.
Peramalan
Peramalan hasil dari pemodelan dengan menggunakan data training sebagai berikut:
Fitted model \(ARIMA(0,1,1)\) dengan data training
predictARIMA011 <- fitted(arima011)
fittedARIMA011 <- cbind(Curah_Hujan_Mingguan.diff1, predictARIMA011)Visualisasi hasil fitted model \(ARIMA(0,1,1)\) dengan data training
ts.plot(Curah_Hujan_Mingguan.diff1, col="blue", ylab = "Curah Hujan", xlab = "Minggu")
title(main = "Fitted Time Series Plot Curah Hujan Mingguan", cex.sub = 0.8)
points(Curah_Hujan_Mingguan.diff1, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA011)forecasting <- predict(arima011, n.ahead = 5)
hasilforcasting <- as.data.frame(forecasting)
hasilforcasting## pred se
## 1 1.27838137 7.840371
## 2 0.06219376 10.087351
## 3 0.06219376 10.087351
## 4 0.06219376 10.087351
## 5 0.06219376 10.087351
# Membentuk model ARIMA(0,1,1) pada data training
library(forecast)
model_arima011 <- Arima(
train.Curah_Hujan_Mingguan.ts,
order = c(0,1,1)
)
# Peramalan 5 minggu ke depan
forecast_arima011 <- forecast(
model_arima011,
h = 5
)
# Menampilkan hasil peramalan
forecast_arima011## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 85 13.04968 2.932917 23.16645 -2.422575 28.52194
## 86 13.04968 2.751175 23.34819 -2.700525 28.79989
## 87 13.04968 2.572586 23.52678 -2.973655 29.07302
## 88 13.04968 2.396989 23.70238 -3.242206 29.34157
## 89 13.04968 2.224241 23.87513 -3.506402 29.60577
plot(
forecast_arima011,
main = "Peramalan Curah Hujan Mingguan dengan ARIMA(0,1,1)",
xlab = "Minggu",
ylab = "Curah Hujan (mm)",
col = "blue"
)
lines(train.Curah_Hujan_Mingguan.ts,
col = "black",
lwd = 2)
legend(
"topleft",
legend = c("Data Aktual", "Ramalan"),
col = c("black", "blue"),
lty = 1,
lwd = 2
)Visualisasi hasil peramalan model \(ARIMA(0,1,1) 5\) waktu ke depan
Fitting \(ARIMA(0,1,1)\) dengan data testing
arima011test <- arima(test.Curah_Hujan_Mingguan.ts, order = c(0,1,1), include.mean = TRUE, method = "ML")
arima011test##
## Call:
## arima(x = test.Curah_Hujan_Mingguan.ts, order = c(0, 1, 1), include.mean = TRUE,
## method = "ML")
##
## Coefficients:
## ma1
## -1.0000
## s.e. 0.2043
##
## sigma^2 estimated as 58.38: log likelihood = -70.57, aic = 143.14
## Series: test.Curah_Hujan_Mingguan.ts
## ARIMA(0,0,1) with non-zero mean
##
## Coefficients:
## ma1 mean
## -0.1475 8.8170
## s.e. 0.2662 1.4036
##
## sigma^2 = 60.51: log likelihood = -71.84
## AIC=149.67 AICc=151.09 BIC=152.81
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.004951582 7.399039 5.782727 -Inf Inf 0.7846305 0.003978717
predictARIMA011test <- fitted(arima011test)
fittedARIMA011test <- cbind(test.Curah_Hujan_Mingguan.ts, predictARIMA011test)Visualisasi hasil fitted model \(ARIMA(0,1,1)\) dengan testing
ts.plot(test.Curah_Hujan_Mingguan.ts, col="blue", ylab = "Curah_Hujan_Mingguan", xlab = "Minggu")
title(main = "Fitted Time Series Plot Curah Hujan Mingguan", cex.sub = 0.8)
points(test.Curah_Hujan_Mingguan.ts, pch = 20, col = "blue")
par(col="red")
lines(predictARIMA011test)Akurasi hasil peramalan
Akurasi hasil peramalan model \(ARIMA(0,1,1)\). Akurasi hasil peramalan model \(ARIMA(0,1,1)\) dibandingkan dengan data aktual adalah Data testing.
library(forecast)
# Model terbaik dari data training
model_arima <- Arima(train.Curah_Hujan_Mingguan.ts,
order = c(0,1,1))
# Meramalkan sebanyak panjang data testing
forecast_test <- forecast(model_arima,
h = length(test.Curah_Hujan_Mingguan.ts))# Akurasi terhadap data testing
akurasi_testing <- accuracy(
forecast_test,
test.Curah_Hujan_Mingguan.ts
)
akurasi_testing## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.3669447 7.799610 5.929500 -Inf Inf 0.8408482 0.1069515
## Test set -4.1163499 8.517147 7.368821 -Inf Inf 1.0449550 NA