## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, warning=FALSE,message=FALSE--------------------------------------- library(tsissm) library(xts) library(data.table) library(tsaux) library(knitr) library(zoo) ## ----fig.width=6,fig.height=3------------------------------------------------- data("maunaloa") opar <- par(mfrow = c(1,1)) par(mar = c(2,2,2,2)) plot(zoo(maunaloa$co2, maunaloa$date), type = "l", xlab = "", ylab = "", main = "Mauna Loa Daily Average CO2") par(opar) ## ----fig.width=6,fig.height=3------------------------------------------------- d <- data.table(date = maunaloa$date, value = maunaloa$co2) d[, year := year(date)] s <- d[,list(.N), by = "year"] opar <- par(mfrow = c(1,1)) par(mar = c(2,2,2,2)) barplot(s$N, names.arg = s$year, main = "Observations/Year", col = "steelblue") par(opar) ## ----fig.width=6,fig.height=3------------------------------------------------- co2 <- xts(maunaloa$co2, maunaloa$date) train <- co2["/2023"] test <- co2["2024/"] spec_naive <- issm_modelspec(train, slope = TRUE, seasonal = TRUE, seasonal_frequency = 320, seasonal_harmonics = 2) # fixed slope spec_naive$parmatrix[parameters == "beta", initial := 0] spec_naive$parmatrix[parameters == "beta", lower := 0] spec_naive$parmatrix[parameters == "beta", estimate := 0] mod_naive <- estimate(spec_naive, scores = FALSE) p_naive <- predict(mod_naive, h = length(test), nsim = 3000, forc_dates = index(test)) opar <- par(mfrow = c(1,1)) par(mar = c(2,2,2,2)) plot(p_naive, n_original = 600, gradient_color = "yellow", interval_color = "orange", main = "CO2 [Naive] Model Prediction", median_width = 1, xlab = "") lines(index(test), as.numeric(test), col = 3) legend("topleft", c("Median Forecast","Actual"), col = c(1,3), lty = 1, bty = "n") par(opar) ## ----------------------------------------------------------------------------- full_dates <- seq(index(co2)[1], tail(index(co2),1), by = "days") co2_full <- xts(rep(as.numeric(NA), length(full_dates)), full_dates) co2_full <- cbind(co2_full, co2, join = "left") co2_full <- co2_full[,-1] ## ----fig.width=6,fig.height=3------------------------------------------------- train_full <- co2_full["/2023"] test_full <- co2_full["2024/"] spec <- issm_modelspec(train_full, slope = TRUE, seasonal = TRUE, seasonal_frequency = 366, seasonal_harmonics = 5, distribution = "norm") # fixed slope spec$parmatrix[parameters == "beta", initial := 0] spec$parmatrix[parameters == "beta", lower := 0] spec$parmatrix[parameters == "beta", estimate := 0] mod <- estimate(spec, scores = FALSE) p <- predict(mod, h = length(test_full), nsim = 3000, forc_dates = index(test_full)) opar <- par(mfrow = c(1,1)) par(mar = c(2,2,2,2)) plot(p, n_original = 600, gradient_color = "yellow", interval_color = "orange", main = "CO2 [Correct] Model Prediction", median_width = 1, xlab = "") lines(index(test_full), as.numeric(test_full), col = 3) legend("topleft", c("Median Forecast","Actual"), col = c(1,3), lty = 1, bty = "n") par(opar) ## ----------------------------------------------------------------------------- use <- which(!is.na(as.numeric(test_full))) tab <- data.frame(MAPE = c(mape(as.numeric(test), as.numeric(p_naive$analytic_mean)) * 100, mape(as.numeric(test_full)[use], as.numeric(p$analytic_mean)[use]) * 100), CRPS = c(crps(as.numeric(test), p_naive$distribution), crps(as.numeric(test_full)[use], p$distribution[,use]))) rownames(tab) <- c("Naive","Correct") colnames(tab) <- c("MAPE (%)", "CRPS") tab |> kable(digits = 2)