From 9b245e1f7caa3848cbe990737b92cd2d39ddf7cc Mon Sep 17 00:00:00 2001 From: David Jobst Date: Thu, 1 Feb 2024 15:37:03 +0100 Subject: [PATCH] first commit --- .DS_Store | Bin 0 -> 6148 bytes .Rbuildignore | 3 + .github/.DS_Store | Bin 0 -> 6148 bytes .github/.gitignore | 1 + .github/workflows/R-CMD-check.yaml | 49 ++++ .gitignore | 5 + DESCRIPTION | 27 +++ NAMESPACE | 22 ++ NEWS.md | 3 + R/dar_semos.R | 261 +++++++++++++++++++++ R/dargarchadd_semos.R | 361 +++++++++++++++++++++++++++++ R/dargarchmult_semos.R | 352 ++++++++++++++++++++++++++++ R/sar_semos.R | 299 ++++++++++++++++++++++++ R/semos.R | 142 ++++++++++++ R/station.R | 25 ++ README.Rmd | 131 +++++++++++ README.md | 135 +++++++++++ data/station.RData | Bin 0 -> 213465 bytes inst/.DS_Store | Bin 0 -> 6148 bytes inst/CITATION | 11 + man/dar_semos.Rd | 96 ++++++++ man/dargarchadd_semos.Rd | 101 ++++++++ man/dargarchmult_semos.Rd | 101 ++++++++ man/sar_semos.Rd | 100 ++++++++ man/semos.Rd | 73 ++++++ man/station.Rd | 33 +++ tsEMOS.Rproj | 21 ++ 27 files changed, 2352 insertions(+) create mode 100644 .DS_Store create mode 100644 .Rbuildignore create mode 100644 .github/.DS_Store create mode 100644 .github/.gitignore create mode 100644 .github/workflows/R-CMD-check.yaml create mode 100644 .gitignore create mode 100644 DESCRIPTION create mode 100644 NAMESPACE create mode 100644 NEWS.md create mode 100644 R/dar_semos.R create mode 100644 R/dargarchadd_semos.R create mode 100644 R/dargarchmult_semos.R create mode 100644 R/sar_semos.R create mode 100644 R/semos.R create mode 100644 R/station.R create mode 100644 README.Rmd create mode 100644 README.md create mode 100644 data/station.RData create mode 100644 inst/.DS_Store create mode 100644 inst/CITATION create mode 100644 man/dar_semos.Rd create mode 100644 man/dargarchadd_semos.Rd create mode 100644 man/dargarchmult_semos.Rd create mode 100644 man/sar_semos.Rd create mode 100644 man/semos.Rd create mode 100644 man/station.Rd create mode 100644 tsEMOS.Rproj diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b97349f3b50e330dfbb856cce7fb5d2f68cb7282 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(E!vjSB3?qQFJMFuDm5Xc24l7~sXdfJ&iX<=iO=KA z?nW%utB9R}-EV$(vma!C7-QUM!9kfKJKUlTI@}%2t ziC(|ATGj1?!{gJ7(PQ$I$`?&22fmf;87$!yl+X1%`?EBW=>&Xbewjx|3=jjv05Pz= z445;)Zfq|Fv~psA82Et!+#duqMAu-UQEeU2;q@8g79tAh_?AEv23>=NMu>oLT?(j6 zxp`u6T@HR>@?3+3MqSRhni5bB75Utr(^LFq~6 literal 0 HcmV?d00001 diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..8d19d5c --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,3 @@ +^.*\.Rproj$ +^\.Rproj\.user$ +^README.Rmd diff --git a/.github/.DS_Store b/.github/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4585d6d67eb853ab5c7ecc733febb1a157b6881f GIT binary patch literal 6148 zcmeHKPfG$p6n~?ZyGY=nz~ewyAu}5Am6g;3~k+(QHkQb>Yy zC7KO?kpbE}7k5m-7>4j=|B_JFPg;G(l==XxlaFBM(yQeCi^ul;B)(K&MfFUFttuPM#(eHNd;13`=iOoS6ss3Qr@%i?%Z|kbykcj~%AWmk9I5yL zy^G961|u`T3@`(m!hk*hoYJN&nAgb+FatkkfX)YrO6Xb44C +Description: Implements time series based Ensemble Model Output Statistics (EMOS), i.e. + Smooth EMOS (SEMOS), + Deseasonalized Autoregressive SEMOS (DAR-SEMOS), + Deseasonalized Autoregressive SEMOS with Generalized Autoregressive Conditional Heteroscedasticity (DAR-GARCH-SEMOS), + Standardized Autoregressive SEMOS (SAR-SEMOS). +Imports: + imputeTS, + rugarch, + stats4 +URL: https://github.com/jobstdavid/tsEMOS +BugReports: https://github.com/jobstdavid/tsEMOS/issues +License: GPL-3 +Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.2.3 + diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..e384f38 --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,22 @@ +# Generated by roxygen2: do not edit by hand + +export(dar_semos) +export(dargarchadd_semos) +export(dargarchmult_semos) +export(sar_semos) +export(semos) +importFrom(imputeTS,na_ma) +importFrom(rugarch,ugarchfit) +importFrom(rugarch,ugarchspec) +importFrom(stats,ar) +importFrom(stats,coef) +importFrom(stats,dnorm) +importFrom(stats,embed) +importFrom(stats,lm) +importFrom(stats,na.omit) +importFrom(stats,optim) +importFrom(stats,pnorm) +importFrom(stats,predict) +importFrom(stats,residuals) +importFrom(stats4,coef) +importFrom(utils,tail) diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 0000000..85f4830 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,3 @@ +# tsEMOS 0.1.0 (February 1, 2024) + +- First release. diff --git a/R/dar_semos.R b/R/dar_semos.R new file mode 100644 index 0000000..68a6dfb --- /dev/null +++ b/R/dar_semos.R @@ -0,0 +1,261 @@ +#' Deseasonalized Autoregressive smooth EMOS (DAR-SEMOS) +#' +#' Deseasonalized autoregressive smooth EMOS (DAR-SEMOS) as described by Jobst, Möller and Groß (2024). +#' +#' @param train data frame containing the training data. +#' @param test data frame containing the testing data. +#' @param doy_col column of the variable day of the year. +#' @param obs_col column of the observation variable. +#' @param mean_col column of the ensemble mean forecast variable. +#' @param sd_col column of the ensemble standard deviation variable. +#' @param n_ahead integer corresponding to the forecast ahead time +#' (0 for ahead times not greater than 24 hours, +#' 1 for ahead times greater than 24 hours and not greater than 48 hours, and so on). +#' @param aic logical; if \code{TRUE} (default), then the Akaike Information Criterion +#' is used to choose the order of the autoregressive model. +#' If \code{FALSE}, the model of order \code{order.max} is fitted. +#' @param order.max maximum order (or order) of model to fit. +#' @param ... unused +#' +#' @return A data frame containing the distribution (location and scale) parameters. +#' +#' @references +#' +#' Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +#' +#' @examples +#' # load data for station Hannover +#' data(station) +#' +#' # select data for lead time 24 hours +#' data <- station[station$lt == 24, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dar_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 0) +#' +#' # distribution parameters +#' head(fit) +#' +#' # select data for lead time 48 hours +#' data <- station[station$lt == 48, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dar_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 1) +#' +#' # distribution parameters +#' head(fit) +#' +#' @importFrom stats ar dnorm pnorm embed lm na.omit optim +#' @importFrom imputeTS na_ma +#' @export +dar_semos <- function(train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ...) { + + + # get necessary training data + n <- nrow(train) + doy <- train[, doy_col] + # replace values which can not be used for n_ahead by NA + obs <- c(train[1:(n-n_ahead), obs_col], rep(NA, n_ahead)) + # impute missing values due to leadtime to be able to calculate approximate residuals + obs <- na_ma(obs) + m <- train[, mean_col] + s <- train[, sd_col] + + if(! all((1:365 %in% unique(doy))) ) { + stop("Each day of the year needs to be at least once in doy!") + } + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + # data frame for seasonal linear model + df <- data.frame(obs, m, sin1, sin2, cos1, cos2) + + # fit seasonal linear model + slm <- lm(obs ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*m, data = df) + + # in-sample non-standardized residuals + r <- as.numeric(slm$residuals) + + # fit AR(p)-process on non-standardized residuals + arm <- ar(r, aic = aic, order.max = order.max) + + # get parameters of AR(p)-process + a <- as.numeric(arm$ar) + mu <- as.numeric(arm$x.mean) + p <- length(a) + coef_arm <- c(arm$x.mean, arm$ar) + + # prediction function for the AR(p)-process with n_ahead forecast step + predict_r <- function(r, mu, a, p, n_ahead) { + + # fill matrix with lags + r_mat <- na.omit(embed(c(rep(NA, p), r), p)) + # adapt matrix row number based on n_ahead + r_mat <- matrix(r_mat[-c(nrow(r_mat):(nrow(r_mat)-n_ahead)), ], ncol = p) + # extend r_mat for prediction values base on n_ahead + 1 + r_mat <- cbind(matrix(NA, ncol = n_ahead + 1, nrow = nrow(r_mat)), r_mat) + + # calculate r-values for correction + for (k in (n_ahead+1):1) { + r_mat[, k] <- as.vector(mu + (matrix(r_mat[, (k+1):(k+p)], ncol = p) - mu) %*% a) + } + + return(r_mat[, 1]) + + } + + # distinguish between lag p != 0 and p == 0 + # if p == 0 a seasonal EMOS model without an autoregressive correction is estimated + if (p != 0) { + + # estimates AR-parameters based on a one step ahead prediction for all forecast steps n_ahead + # i.e. no in-between step prediction of r-values, which is however needed in practice for n_ahead > 0 + # i.e. one assumes that the observed r-values are already the predicted values + # however for model prediction, in-between step prediction of r-values needs to be carried out for n_ahead > 0 + + optim_fun1 <- function(pars, obs, m, s, doys, p) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + + # adapt length of parameters based on lag p + OBS <- obs[-c(1:p)] + MU <- MU[-c(1:p)] + SIGMA <- SIGMA[-c(1:p)] + + # correct MU + MU <- r_c+MU + # calculate CRPS + z <- (OBS - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(slm$coefficients, rep(0, 5), 1, rep(0, 4), coef_arm)), + fn = optim_fun1, + obs = obs, + m = m, + s = s, + doys = doys, + p = p, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- c(doy[(n-p+1-n_ahead):n], test[, doy_col]) + obs <- c(obs[(n-p+1-n_ahead):n], test[, obs_col]) + m <- c(m[(n-p+1-n_ahead):n], test[, mean_col]) + s <- c(s[(n-p+1-n_ahead):n], test[, sd_col]) + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = n_ahead) + + # predicted/correct parameters + MU <- r_c + MU[-c(1:(p+n_ahead))] + SIGMA <- SIGMA[-c(1:(p+n_ahead))] + + } else { + + optim_fun2 <- function(pars, obs, m, s, doys) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + + z <- (obs - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(slm$coefficients, rep(0, 5), 1, rep(0, 4))), + fn = optim_fun2, + obs = obs, + m = m, + s = s, + doys = doys, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- test[, doy_col] + obs <- test[, obs_col] + m <- test[, mean_col] + s <- test[, sd_col] + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- as.vector(doys %*% pars[1:5] + doys %*% pars[6:10]*m) + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + + } + + # create output + output <- data.frame(location = MU, scale = SIGMA) + + # output + return(output) + +} diff --git a/R/dargarchadd_semos.R b/R/dargarchadd_semos.R new file mode 100644 index 0000000..4f9b044 --- /dev/null +++ b/R/dargarchadd_semos.R @@ -0,0 +1,361 @@ +#' Additive Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive Conditional Heteroscedasticity (DAR-GARCH-SEMOS (+)) +#' +#' Additive Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive +#' Conditional Heteroscedasticity (DAR-GARCH-SEMOS (+)) as described by Jobst, Möller and Groß (2024). +#' +#' @param train data frame containing the training data. +#' @param test data frame containing the testing data. +#' @param doy_col column of the variable day of the year. +#' @param obs_col column of the observation variable. +#' @param mean_col column of the ensemble mean forecast variable. +#' @param sd_col column of the ensemble standard deviation variable. +#' @param w integer; window size for the calculation of the empirical standard deviation. +#' Default: \code{w = 1}. +#' @param n_ahead integer corresponding to the forecast ahead time +#' (0 for ahead times not greater than 24 hours, +#' 1 for ahead times greater than 24 hours and not greater than 48 hours, and so on). +#' @param aic logical; if \code{TRUE} (default), then the Akaike Information Criterion +#' is used to choose the order of the autoregressive model. +#' If \code{FALSE}, the model of order \code{order.max} is fitted. +#' @param order.max maximum order (or order) of model to fit. +#' @param ... unused +#' +#' @return A data frame containing the distribution (location and scale) parameters. +#' +#' @references +#' +#' Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +#' +#' @examples +#' # load data for station Hannover +#' data(station) +#' +#' # select data for lead time 24 hours +#' data <- station[station$lt == 24, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dargarchadd_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 0) +#' +#' # distribution parameters +#' head(fit) +#' +#' # select data for lead time 48 hours +#' data <- station[station$lt == 48, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dargarchadd_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 1) +#' +#' # distribution parameters +#' head(fit) +#' +#' @importFrom stats ar dnorm pnorm embed lm na.omit optim predict residuals +#' @importFrom utils tail +#' @importFrom imputeTS na_ma +#' @importFrom stats4 coef +#' @importFrom rugarch ugarchspec ugarchfit +#' +#' @export +dargarchadd_semos <- function(train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ...) { + + # get necessary training data + n <- nrow(train) + doy <- train[, doy_col] + # replace values which can not be used for n_ahead by NA + obs <- c(train[1:(n-n_ahead), obs_col], rep(NA, n_ahead)) + # impute missing values to be able to calculate approximate residuals of residuals + obs <- na_ma(obs) + m <- train[, mean_col] + s <- train[, sd_col] + + if(! all((1:365 %in% unique(doy))) ) { + stop("Each day of the year needs to be at least once in doy!") + } + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # data frame for seasonal linear model for mu + df_mu <- data.frame(obs, m, s, sin1, sin2, cos1, cos2) + + # start time + start_tm <- Sys.time() + + # fit seasonal linear model to have initial values for mu + mu_model <- lm(obs ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*m, data = df_mu) + r <- mu_model$residuals + + # calculate observed empirical standard deviation of observation for each doy + sd.r <- function(r) { + n <- length(r) + sqrt(1/(n-1)*sum(r^2)) + } + # create data.frame with residuals + df_r <- data.frame(id = seq_along(doy), doy = doy, r = r) + + # extend data.frame with empirical standard deviation of observation for each doy by symmetric window size + # enables estimation if only one year of data is available + s_obs <- c() + for (k in sort(unique(df_r$doy))) { + days <- (k + -w:w) %% 365 + days[days == 0] <- 365 + s_obs <- c(s_obs, sd.r(df_r[days, "r"])) + } + df_s_obs <- data.frame(doy = sort(unique(df_r$doy)), s_obs = s_obs) + + # combine both data frames by doy + df_s_obs <- merge(df_r, df_s_obs, by = "doy") + # get correct order of s_obs depending on doy + df_s_obs <- df_s_obs[order(df_s_obs$id), ] + + # data.frame for seasonal linear model for sigma + df_sigma <- data.frame(df_mu, s_obs = df_s_obs$s_obs) + # fit seasonal linear model to have initial values for sigma + sigma_model <- lm(log(s_obs) ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*s, data = df_sigma) + # predict the observed standard deviation based on the harmonic model and use link function exp for back-transformation + s_pred <- exp(predict(sigma_model)) + + # fit AR(p)-process on non-standardized residuals + arm <- ar(r, aic = aic, order.max = order.max) + + # get parameters of AR(p)-process + a <- as.numeric(arm$ar) + mu <- as.numeric(arm$x.mean) + p <- length(a) + coef_arm <- c(arm$x.mean, arm$ar) + + # calculate residuals of autoregressive process + r_arm <- na.omit(residuals(arm)) + + + # define GARCH(1,1) model + spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,1)), + mean.model = (list(armaOrder = c(0,0), include.mean = FALSE)), + distribution.model = "norm") + + # fit GARCH(1,1) model + fit_garch <- ugarchfit(spec, data = r_arm, solver = "hybrid") + + # receive coefficients of GARCH(1,1) model + omega0 <- as.numeric(coef(fit_garch)[1]) + omega1 <- as.numeric(coef(fit_garch)[3]) + omega2 <- as.numeric(coef(fit_garch)[2]) + coef_garch <- c(omega0, omega1, omega2) + + # prediction function for the AR(p)-process with n_ahead forecast step + predict_r <- function(r, mu, a, p, n_ahead) { + + # fill matrix with lags + r_mat <- na.omit(embed(c(rep(NA, p), r), p)) + # adapt matrix row number based on n_ahead + r_mat <- matrix(r_mat[-c(nrow(r_mat):(nrow(r_mat)-n_ahead)), ], ncol = p) + # extend r_mat for prediction values base on n_ahead + 1 + r_mat <- cbind(matrix(NA, ncol = n_ahead + 1, nrow = nrow(r_mat)), r_mat) + + # calculate r-values for correction + for (k in (n_ahead+1):1) { + r_mat[, k] <- as.vector(mu + (matrix(r_mat[, (k+1):(k+p)], ncol = p) - mu) %*% a) + } + + return(r_mat[, 1]) + + } + + # distinguish between lag p != 0 and p == 0 + # if p == 0 a seasonal EMOS model without an AR(p) and GARCH(1,1) model is estimated + if (p != 0) { + + # estimates AR-parameters based on a one step ahead prediction for all forecast steps n_ahead + # i.e. no in-between step prediction of r-values, which is however needed in practice for n_ahead > 0 + # i.e. one assumes that the observed r-values are already the predicted values + # however for model prediction, in-between step prediction of r-values needs to be carried out for n_ahead > 0 + + optim_fun1 <- function(pars, obs, m, s, doys, p) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + n <- length(r_c) + z <- tail(r, n = n) - r_c + + # initial values + sig_c <- sqrt(mean(z^2)) + sig_s <- tail(SIGMA, n = n) + + for (k in 1:(n-1)) { + sig_c <- c(sig_c, sqrt(sig_s[k+1]^2 + pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + + # adapt length of parameters based on lag p + OBS <- obs[-c(1:p)] + MU <- MU[-c(1:p)] + + # correct MU and SIGMA + MU <- r_c + MU + SIGMA <- sig_c + # calculate CRPS + z <- (OBS - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(mu_model$coefficients, sigma_model$coefficients, coef_arm, coef_garch)), + fn = optim_fun1, + obs = obs, + m = m, + s = s, + doys = doys, + p = p, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameters + pars <- res$par + + # get initial values for sig_c and z for the last iteration in the optimization + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + n_r_c <- length(r_c) + z <- tail(r, n = n_r_c) - r_c + + # predict z-value for correction + sig_c <- sqrt(mean(z^2)) + sig_s <- tail(SIGMA, n = n_r_c) + + for (k in 1:(n_r_c-1)) { + sig_c <- c(sig_c, sqrt(sig_s[k+1]^2 + pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + + # initial sig_c and z + sig_c <- tail(sig_c, n = 1) + z <- tail(z, n = 1) + + # get necessary test data + doy <- c(doy[(n-p+1-n_ahead):n], test[, doy_col]) + obs <- c(obs[(n-p+1-n_ahead):n], test[, obs_col]) + m <- c(m[(n-p+1-n_ahead):n], test[, mean_col]) + s <- c(s[(n-p+1-n_ahead):n], test[, sd_col]) + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # get updated initial values for sig_c and z for the last iteration in the optimization + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = n_ahead) + n_r_c <- length(r_c) + z <- c(z, # initial z value from above + tail(r, n = n_r_c) - r_c) + + # predict z-value for correction + sig_s <- tail(SIGMA, n = n_r_c) + + for (k in 1:n_r_c) { + sig_c <- c(sig_c, sqrt(sig_s[k]^2 + pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + sig_c <- sig_c[-1] + + # predicted/correct parameters + MU <- r_c + MU[-c(1:(p+n_ahead))] + SIGMA <- sig_c + + } else { + + optim_fun2 <- function(pars, obs, m, s, doys) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + + z <- (obs - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(mu_model$coefficients, rep(0, 5), 1, rep(0, 4))), + fn = optim_fun2, + obs = obs, + m = m, + s = s, + doys = doys, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- test[, doy_col] + obs <- test[, obs_col] + m <- test[, mean_col] + s <- test[, sd_col] + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- as.vector(doys %*% pars[1:5] + doys %*% pars[6:10]*m) + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + + } + + # create output + output <- data.frame(location = MU, scale = SIGMA) + + # output + return(output) + +} diff --git a/R/dargarchmult_semos.R b/R/dargarchmult_semos.R new file mode 100644 index 0000000..57c83fe --- /dev/null +++ b/R/dargarchmult_semos.R @@ -0,0 +1,352 @@ +#' Multiplicative Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive Conditional Heteroscedasticity (DAR-GARCH-SEMOS (*)) +#' +#' Multiplicative Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive +#' Conditional Heteroscedasticity (DAR-GARCH-SEMOS (*)) as described by Jobst, Möller and Groß (2024). +#' +#' @param train data frame containing the training data. +#' @param test data frame containing the testing data. +#' @param doy_col column of the variable day of the year. +#' @param obs_col column of the observation variable. +#' @param mean_col column of the ensemble mean forecast variable. +#' @param sd_col column of the ensemble standard deviation variable. +#' @param w integer; window size for the calculation of the empirical standard deviation. +#' Default: \code{w = 1}. +#' @param n_ahead integer corresponding to the forecast ahead time +#' (0 for ahead times not greater than 24 hours, +#' 1 for ahead times greater than 24 hours and not greater than 48 hours, and so on). +#' @param aic logical; if \code{TRUE} (default), then the Akaike Information Criterion +#' is used to choose the order of the autoregressive model. +#' If \code{FALSE}, the model of order \code{order.max} is fitted. +#' @param order.max maximum order (or order) of model to fit. +#' @param ... unused +#' +#' @return A data frame containing the distribution (location and scale) parameters. +#' +#' @references +#' +#' Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +#' +#' @examples +#' # load data for station Hannover +#' data(station) +#' +#' # select data for lead time 24 hours +#' data <- station[station$lt == 24, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dargarchmult_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 0) +#' +#' # distribution parameters +#' head(fit) +#' +#' # select data for lead time 48 hours +#' data <- station[station$lt == 48, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- dargarchmult_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 1) +#' +#' # distribution parameters +#' head(fit) +#' +#' @importFrom stats ar dnorm pnorm embed lm na.omit optim predict residuals +#' @importFrom utils tail +#' @importFrom imputeTS na_ma +#' @importFrom stats4 coef +#' @importFrom rugarch ugarchspec ugarchfit +#' +#' @export +dargarchmult_semos <- function(train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ...) { + + # get necessary training data + n <- nrow(train) + doy <- train[, doy_col] + # replace values which can not be used for n_ahead by NA + obs <- c(train[1:(n-n_ahead), obs_col], rep(NA, n_ahead)) + # impute missing values to be able to calculate approximate residuals of residuals + obs <- na_ma(obs) + m <- train[, mean_col] + s <- train[, sd_col] + + if(! all((1:365 %in% unique(doy))) ) { + stop("Each day of the year needs to be at least once in doy_col!") + } + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # data frame for seasonal linear model for mu + df_mu <- data.frame(obs, m, s, sin1, sin2, cos1, cos2) + + # fit seasonal linear model to have initial values for mu + mu_model <- lm(obs ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*m, data = df_mu) + r <- mu_model$residuals + + # calculate observed empirical standard deviation of observation for each doy + sd.r <- function(r) { + n <- length(r) + sqrt(1/(n-1)*sum(r^2)) + } + # create data.frame with residuals + df_r <- data.frame(id = seq_along(doy), doy = doy, r = r) + + # extend data.frame with empirical standard deviation of observation for each doy by symmetric window size + # enables estimation if only one year of data is available + s_obs <- c() + for (k in sort(unique(df_r$doy))) { + days <- (k + -w:w) %% 365 + days[days == 0] <- 365 + s_obs <- c(s_obs, sd.r(df_r[days, "r"])) + } + df_s_obs <- data.frame(doy = sort(unique(df_r$doy)), s_obs = s_obs) + + # combine both dataframe's by doy + df_s_obs <- merge(df_r, df_s_obs, by = "doy") + # get correct order of s_obs depending on doy + df_s_obs <- df_s_obs[order(df_s_obs$id), ] + + # data.frame for seasonal linear model for sigma + df_sigma <- data.frame(df_mu, s_obs = df_s_obs$s_obs) + # fit seasonal linear model to have initial values for sigma + sigma_model <- lm(log(s_obs) ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*s, data = df_sigma) + # predict the observed standard deviation based on the harmonic model and use link function exp for back-transformation + s_pred <- exp(predict(sigma_model)) + + # fit AR(p)-process on non-standardized residuals + arm <- ar(r, aic = aic, order.max = order.max) + + # get parameters of AR(p)-process + a <- as.numeric(arm$ar) + mu <- as.numeric(arm$x.mean) + p <- length(a) + coef_arm <- c(arm$x.mean, arm$ar) + + # calculate residuals of autoregressive process + r_arm <- residuals(arm) + # calculate deseasonalized residuals + z <- as.numeric(na.omit(r_arm/s_pred)) + + # define GARCH(1,1) model + spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,1)), + mean.model = (list(armaOrder = c(0,0), include.mean = FALSE)), + distribution.model = "norm") + + # fit GARCH(1,1) model + fit_garch <- ugarchfit(spec, data = z, solver = "hybrid") + + # receive coefficients of GARCH(1,1) model + omega0 <- as.numeric(coef(fit_garch)[1]) + omega1 <- as.numeric(coef(fit_garch)[3]) + omega2 <- as.numeric(coef(fit_garch)[2]) + coef_garch <- c(omega0, omega1, omega2) + + # prediction function for the AR(p)-process with n_ahead forecast step + predict_r <- function(r, mu, a, p, n_ahead) { + + # fill matrix with lags + r_mat <- na.omit(embed(c(rep(NA, p), r), p)) + # adapt matrix row number based on n_ahead + r_mat <- matrix(r_mat[-c(nrow(r_mat):(nrow(r_mat)-n_ahead)), ], ncol = p) + # extend r_mat for prediction values base on n_ahead + 1 + r_mat <- cbind(matrix(NA, ncol = n_ahead + 1, nrow = nrow(r_mat)), r_mat) + + # calculate r-values for correction + for (k in (n_ahead+1):1) { + r_mat[, k] <- as.vector(mu + (matrix(r_mat[, (k+1):(k+p)], ncol = p) - mu) %*% a) + } + + return(r_mat[, 1]) + + } + + # distinguish between lag p != 0 and p == 0 + # if p == 0 a seasonal EMOS model without an AR(p) and GARCH(1,1) model is estimated + if (p != 0) { + + # estimates AR-parameters based on a one step ahead prediction for all forecast steps n_ahead + # i.e. no in-between step prediction of r-values, which is however needed in practice for n_ahead > 0 + # i.e. one assumes that the observed r-values are already the predicted values + # however for model prediction, in-between step prediction of r-values needs to be carried out for n_ahead > 0 + + optim_fun1 <- function(pars, obs, m, s, doys, p) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + r <- as.vector((obs-MU)) + + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + n <- length(r_c) + z <- (tail(r, n = n) - r_c)/tail(SIGMA, n = n) + + # predict z-value for correction + sig_c <- sqrt(mean(z^2)) + for (k in 1:(n-1)) { + sig_c <- c(sig_c, sqrt(pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + + # adapt length of parameters based on lag p + OBS <- obs[-c(1:p)] + MU <- MU[-c(1:p)] + SIGMA <- SIGMA[-c(1:p)] + + # correct MU and SIGMA + MU <- r_c + MU + SIGMA <- sig_c * SIGMA + # calculate CRPS + z <- (OBS - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(mu_model$coefficients, sigma_model$coefficients, coef_arm, coef_garch)), + fn = optim_fun1, + obs = obs, + m = m, + s = s, + doys = doys, + p = p, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameters + pars <- res$par + + # get initial values for sig_c and z from the last iteration in the above optimization + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + r <- as.vector((obs-MU)) + + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + n_r_c <- length(r_c) + z <- (tail(r, n = n_r_c) - r_c)/tail(SIGMA, n = n_r_c) + + sig_c <- sqrt(mean(z^2)) + # predict sig_c + for (k in 1:(n_r_c-1)) { + sig_c <- c(sig_c, sqrt(pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + + # initial sig_c and z + sig_c <- tail(sig_c, n = 1) + z <- tail(z, n = 1) + + # get necessary test data + doy <- c(doy[(n-p+1-n_ahead):n], test[, doy_col]) + obs <- c(obs[(n-p+1-n_ahead):n], test[, obs_col]) + m <- c(m[(n-p+1-n_ahead):n], test[, mean_col]) + s <- c(s[(n-p+1-n_ahead):n], test[, sd_col]) + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + r <- as.vector((obs-MU)) + # predict r-values for correction + r_c <- predict_r(r = r, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = n_ahead) + n_r_c <- length(r_c) + z <- c(z, # initial z from above + (tail(r, n = n_r_c) - r_c)/tail(SIGMA, n = n_r_c)) + + # predict sig_c + for (k in 1:n_r_c) { + sig_c <- c(sig_c, sqrt(pars[22+p]^2 + pars[23+p]^2 * sig_c[k]^2 + pars[24+p]^2 * z[k]^2)) + } + # remove initial sig_c + sig_c <- sig_c[-1] + + # predicted/correct parameters + MU <- r_c + MU[-c(1:(p+n_ahead))] + SIGMA <- sig_c * SIGMA[-c(1:(p+n_ahead))] + + } else { + + optim_fun2 <- function(pars, obs, m, s, doys) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + + z <- (obs - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(mu_model$coefficients, rep(0, 5), 1, rep(0, 4))), + fn = optim_fun2, + obs = obs, + m = m, + s = s, + doys = doys, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- test[, doy_col] + obs <- test[, obs_col] + m <- test[, mean_col] + s <- test[, sd_col] + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- as.vector(doys %*% pars[1:5] + doys %*% pars[6:10]*m) + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + + } + + output <- data.frame(location = MU, scale = SIGMA) + + # output + return(output) + +} diff --git a/R/sar_semos.R b/R/sar_semos.R new file mode 100644 index 0000000..078cc54 --- /dev/null +++ b/R/sar_semos.R @@ -0,0 +1,299 @@ +#' Standardized Autoregressive smooth EMOS (SAR-SEMOS) +#' +#' Standardized autoregressive smooth EMOS (SAR-SEMOS) as described by Jobst, Möller and Groß (2024). +#' +#' @param train data frame containing the training data. +#' @param test data frame containing the testing data. +#' @param doy_col column of the variable day of the year. +#' @param obs_col column of the observation variable. +#' @param mean_col column of the ensemble mean forecast variable. +#' @param sd_col column of the ensemble standard deviation variable. +#' @param w integer; window size for the calculation of the empirical standard deviation. +#' Default: \code{w = 1}. +#' @param n_ahead integer corresponding to the forecast ahead time +#' (0 for ahead times not greater than 24 hours, +#' 1 for ahead times greater than 24 hours and not greater than 48 hours, and so on). +#' @param aic logical; if \code{TRUE} (default), then the Akaike Information Criterion +#' is used to choose the order of the autoregressive model. +#' If \code{FALSE}, the model of order \code{order.max} is fitted. +#' @param order.max maximum order (or order) of model to fit. +#' @param ... unused +#' +#' @return A data frame containing the distribution (location and scale) parameters. +#' +#' @references +#' +#' Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +#' +#' @examples +#' # load data for station Hannover +#' data(station) +#' +#' # select data for lead time 24 hours +#' data <- station[station$lt == 24, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- sar_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 0) +#' +#' # distribution parameters +#' head(fit) +#' +#' # select data for lead time 48 hours +#' data <- station[station$lt == 48, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- sar_semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11, +#' n_ahead = 1) +#' +#' # distribution parameters +#' head(fit) +#' +#' @importFrom stats ar dnorm pnorm embed lm na.omit optim coef predict +#' @importFrom imputeTS na_ma +#' @export +sar_semos <- function(train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ...) { + + + + # get necessary training data + n <- nrow(train) + doy <- train[, doy_col] + # replace values which can not be used for n_ahead by NA + obs <- c(train[1:(n-n_ahead), obs_col], rep(NA, n_ahead)) + # impute missing values due to leadtime to be able to calculate approximate residuals + obs <- na_ma(obs) + m <- train[, mean_col] + s <- train[, sd_col] + + if(! all((1:365 %in% unique(doy))) ) { + stop("Each day of the year needs to be at least once in doy!") + } + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # data frame for seasonal linear model for mu + df_mu <- data.frame(obs, m, s, sin1, sin2, cos1, cos2) + + # fit seasonal linear model to have initial values for mu + mu_model <- lm(obs ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*m, data = df_mu) + + # calculate observed empirical standard deviation of observation for each doy + sd.r <- function(r) { + n <- length(r) + sqrt(1/(n-1)*sum(r^2)) + } + # create datafame with residuals + df_r <- data.frame(id = seq_along(doy), doy = doy, r = mu_model$residuals) + + # extend data.frame with empirical standard deviation of observation for each doy by symmetric window size w + # enables estimation if only one year of data is available + s_obs <- c() + for (k in sort(unique(df_r$doy))) { + days <- (k + -w:w) %% 365 + days[days == 0] <- 365 + s_obs <- c(s_obs, sd.r(df_r[days, "r"])) + } + df_s_obs <- data.frame(doy = sort(unique(df_r$doy)), s_obs = s_obs) + + # combine both data.frame's by doy + df_s_obs <- merge(df_r, df_s_obs, by = "doy") + # get correct order of s_obs depending on doy + df_s_obs <- df_s_obs[order(df_s_obs$id), ] + + # dataframe for seasonal linear model for sigma + df_sigma <- data.frame(df_mu, s_obs = df_s_obs$s_obs) + # fit seasonal linear model to have initial values for sigma + sigma_model <- lm(log(s_obs) ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*s, data = df_sigma) + # predict the observed standard deviation based on the harmonic model and use link function exp for back-transformation + s_pred <- exp(predict(sigma_model)) + + # get coefficients of linear models mu_model and sigma_model + coef_lm <- as.numeric(c(coef(mu_model), coef(sigma_model))) + + # in-sample standardized z-residuals + z <- as.numeric(mu_model$residuals)/s_pred + + # fit AR(p)-process on z-residuals + arm <- ar(z, aic = aic, order.max = order.max) + + # get parameters of AR(p)-process + a <- as.numeric(arm$ar) + mu <- as.numeric(arm$x.mean) + p <- length(a) + coef_arm <- as.numeric(c(arm$x.mean, arm$ar)) + + # prediction function for the AR(p)-process with n_ahead forecast step + predict_z <- function(z, mu, a, p, n_ahead) { + + # fill matrix with lags + z_mat <- na.omit(embed(c(rep(NA, p), z), p)) + # adapt matrix row number based on n_ahead + z_mat <- matrix(z_mat[-c(nrow(z_mat):(nrow(z_mat)-n_ahead)), ], ncol = p) + # extend z_mat for prediction values base on n_ahead + 1 + z_mat <- cbind(matrix(NA, ncol = n_ahead + 1, nrow = nrow(z_mat)), z_mat) + + # calculate z-values for correction + for (k in (n_ahead+1):1) { + z_mat[, k] <- as.vector(mu + (matrix(z_mat[, (k+1):(k+p)], ncol = p) - mu) %*% a) + } + + return(z_mat[, 1]) + + } + + # distinguish between lag p != 0 and p == 0 + # if p == 0 a seasonal EMOS model without an autoregressive correction is estimated + if (p != 0) { + + # estimates AR-parameters based on a one step ahead prediction for all forecast steps n_ahead + # i.e. no in-between step prediction of z-values, which is however needed in practice for n_ahead > 0 + # i.e. one assumes that the observed z-values are already the predicted z-values + # however for model prediction, in-between step prediction of z-values needs to be carried out for n_ahead > 0 + + optim_fun1 <- function(pars, obs, m, s, doys, p) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + z <- as.vector((obs-MU)/SIGMA) + + # predict z-values for correction + z_c <- predict_z(z = z, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = 0) + + # adapt length of parameters based on lag p + OBS <- obs[-c(1:p)] + MU <- MU[-c(1:p)] + SIGMA <- SIGMA[-c(1:p)] + + # correct MU + MU <- z_c*SIGMA + MU + # calculate CRPS + z <- (OBS - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = c(coef_lm, coef_arm), + fn = optim_fun1, + obs = obs, + m = m, + s = s, + doys = doys, + p = p, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- c(doy[(n-p+1-n_ahead):n], test[, doy_col]) + obs <- c(obs[(n-p+1-n_ahead):n], test[, obs_col]) + m <- c(m[(n-p+1-n_ahead):n], test[, mean_col]) + s <- c(s[(n-p+1-n_ahead):n], test[, sd_col]) + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + z <- as.vector((obs-MU)/SIGMA) + + # predict z-values for correction + z_c <- predict_z(z = z, mu = pars[21], a = pars[22:(21+p)], p = p, n_ahead = n_ahead) + + # predicted/correct parameters + MU <- z_c*SIGMA[-c(1:(p+n_ahead))] + MU[-c(1:(p+n_ahead))] + SIGMA <- SIGMA[-c(1:(p+n_ahead))] + + } else { + + optim_fun2 <- function(pars, obs, m, s, doys) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + + z <- (obs - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = coef_lm, + fn = optim_fun2, + obs = obs, + m = m, + s = s, + doys = doys, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- test[, doy_col] + obs <- test[, obs_col] + m <- test[, mean_col] + s <- test[, sd_col] + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- as.vector(doys %*% pars[1:5] + doys %*% pars[6:10]*m) + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + + } + + # create output + output <- data.frame(location = MU, scale = SIGMA) + + # output + return(output) + +} diff --git a/R/semos.R b/R/semos.R new file mode 100644 index 0000000..92fc06c --- /dev/null +++ b/R/semos.R @@ -0,0 +1,142 @@ +#' Smooth EMOS (SEMOS) +#' +#' Smooth EMOS (SEMOS) as described by Jobst, Möller and Groß (2024). +#' +#' @param train data frame containing the training data. +#' @param test data frame containing the testing data. +#' @param doy_col column of the variable day of the year. +#' @param obs_col column of the observation variable. +#' @param mean_col column of the ensemble mean forecast variable. +#' @param sd_col column of the ensemble standard deviation variable. +#' @param ... unused +#' +#' @return A data frame containing the distribution (location and scale) parameters. +#' +#' @references +#' +#' Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +#' +#' @examples +#' # load data for station Hannover +#' data(station) +#' +#' # select data for lead time 24 hours +#' data <- station[station$lt == 24, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11) +#' +#' # distribution parameters +#' head(fit) +#' +#' # select data for lead time 48 hours +#' data <- station[station$lt == 48, ] +#' +#' # split data in training and test data +#' train <- data[data$date <= as.Date("2019-12-31"), ] +#' test <- data[data$date > as.Date("2019-12-31"), ] +#' +#' # estimate model +#' fit <- semos(train = train, +#' test = test, +#' doy_col = 3, +#' obs_col = 9, +#' mean_col = 10, +#' sd_col = 11) +#' +#' # distribution parameters +#' head(fit) +#' +#' @importFrom stats ar dnorm pnorm embed lm na.omit optim +#' @importFrom imputeTS na_ma +#' @export +semos <- function(train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + ...) { + + # get necessary training data + n <- nrow(train) + doy <- train[, doy_col] + obs <- train[, obs_col] + # impute missing values due to leadtime to be able to calculate approximate residuals + obs <- na_ma(obs) + m <- train[, mean_col] + s <- train[, sd_col] + + if(! all((1:365 %in% unique(doy))) ) { + stop("Each day of the year needs to be at least once in doy!") + } + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + # data frame for seasonal linear model + df <- data.frame(obs, m, sin1, sin2, cos1, cos2) + + # fit seasonal linear model + slm <- lm(obs ~ sin1 + sin2 + cos1 + cos2 + (1 + sin1 + sin2 + cos1 + cos2)*m, data = df) + + optim_fun <- function(pars, obs, m, s, doys) { + + MU <- doys %*% pars[1:5] + doys %*% pars[6:10]*m + SIGMA <- exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s) + + z <- (obs - MU)/SIGMA + crps <- SIGMA * (z * (2 * pnorm(z) - 1) + 2 * dnorm(z) - 1/sqrt(pi)) + sum(crps) + + } + res <- optim(par = as.numeric(c(slm$coefficients, rep(0, 5), 1, rep(0, 4))), + fn = optim_fun, + obs = obs, + m = m, + s = s, + doys = doys, + method = "BFGS") + + ############################## + # START PREDICTION + ############################## + + # get parameter estimates + pars <- res$par + + # get necessary test data + doy <- test[, doy_col] + obs <- test[, obs_col] + m <- test[, mean_col] + s <- test[, sd_col] + + sin1 <- sin(2*pi*doy/365.25) + sin2 <- sin(4*pi*doy/365.25) + cos1 <- cos(2*pi*doy/365.25) + cos2 <- cos(4*pi*doy/365.25) + doys <- cbind(1, sin1, sin2, cos1, cos2) + + # predict values + MU <- as.vector(doys %*% pars[1:5] + doys %*% pars[6:10]*m) + SIGMA <- as.vector(exp(doys %*% pars[11:15] + doys %*% pars[16:20]*s)) + + + # create output + output <- data.frame(location = MU, scale = SIGMA) + + # output + return(output) + +} diff --git a/R/station.R b/R/station.R new file mode 100644 index 0000000..87faaaa --- /dev/null +++ b/R/station.R @@ -0,0 +1,25 @@ +#' Data set of 2m surface temperature observations and forecasts for station Hannover +#' +#' Data set of the observations, the ensemble mean (mean) and standard +#' deviation (sd) of the weather quantity 2m surface temperature for the station +#' Hannover between 2015-2020. It contains the same variables as the data set +#' in the references. +#' +#' @source +#' Ensemble Forecasts from ECMWF: https://www.ecmwf.int +#' +#' Observations from DWD: www.dwd.de +#' +#' @references +#' Jobst, David, Möller, Annette, & Groß, Jürgen. (2023). +#' Data set for the ensemble postprocessing of 2m surface temperature forecasts +#' in Germany for five different lead times (0.1.0) +#' [Data set]. Zenodo. https://doi.org/10.5281/zenodo.8193645 +#' +#' @docType data +#' +#' @usage data(station) +#' +#' @examples +#' data(station) +"station" diff --git a/README.Rmd b/README.Rmd new file mode 100644 index 0000000..73fcf15 --- /dev/null +++ b/README.Rmd @@ -0,0 +1,131 @@ +--- +output: github_document +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + fig.path = "man/figures/README-", + out.width = "100%" +) +``` +# tsEMOS: Time Series based Ensemble Model Output Statistics + + +[![CRAN status](https://www.r-pkg.org/badges/version/tsEMOS)](https://CRAN.R-project.org/package=tsEMOS) +[![R-CMD-check](https://github.com/jobstdavid/tsEMOS/workflows/R-CMD-check/badge.svg)](https://github.com/jobstdavid/tsEMOS/actions) +[![version](https://img.shields.io/badge/version-0.1.0-green.svg?style=flat)](https://github.com/jobstdavid/tsEMOS) + + +An R package for time series based extensions of Ensemble Model Output Statistics (EMOS) as described in the references. + +It depends on the R-packages: + +- [imputeTS](https://cran.r-project.org/web/packages/imputeTS/index.html): Time series missing value imputation. +- [rugarch](https://cran.r-project.org/web/packages/rugarch/index.html): Univariate GARCH models. + + +## Installation + +You can install the development version from GitHub with: + +``` r +# install.packages("remotes") +remotes::install_github("jobstdavid/tsEMOS") +``` + + +## Package overview + +Below is an overview of all functions contained in the R-package for model estimation and prediction: + +- ``semos``: smooth EMOS (SEMOS). +- ``dar_semos``: deseasonalized autoregressive smooth EMOS (DAR-SEMOS). +- ``dargarchmult_semos``: multiplicative deseasonalized autoregressive smooth EMOS with generalized autoregressive conditional heteroscedasticity (DAR-GARCH-SEMOS ($\cdot$)). +- ``dargarchadd_semos``: additive deseasonalized autoregressive smooth EMOS with generalized autoregressive conditional heteroscedasticity (DAR-GARCH-SEMOS (+)). +- ``sar_semos``: standardized autoregressive smooth EMOS (SAR-SEMOS). + +## Example +### Load R-package and data +```{r example1} +# load package +library(tsEMOS) + +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] +``` + +### SEMOS + +```{r example2} +fit <- semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11) +``` + + +### DAR-SEMOS + +```{r example3} +fit <- dar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### DAR-GARCH-SEMOS ($\cdot$) + +```{r example4} +fit <- dargarchmult_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### DAR-GARCH-SEMOS (+) + +```{r example5} +fit <- dargarchadd_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### SAR-SEMOS + +```{r example6} +fit <- sar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + + +## Contact +Feel free to contact [jobstd@uni-hildesheim.de](mailto:jobstd@uni-hildesheim.de) if you have any questions or suggestions. + +## References +Jobst, D., Möller, A., and Groß, J. (2023). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bac517a --- /dev/null +++ b/README.md @@ -0,0 +1,135 @@ + +# tsEMOS: Time Series based Ensemble Model Output Statistics + + + +[![CRAN +status](https://www.r-pkg.org/badges/version/tsEMOS)](https://CRAN.R-project.org/package=tsEMOS) +[![R-CMD-check](https://github.com/jobstdavid/tsEMOS/workflows/R-CMD-check/badge.svg)](https://github.com/jobstdavid/tsEMOS/actions) +[![version](https://img.shields.io/badge/version-0.1.0-green.svg?style=flat)](https://github.com/jobstdavid/tsEMOS) + + +An R package for time series based extensions of Ensemble Model Output +Statistics (EMOS) as described in the references. + +It depends on the R-packages: + +- [imputeTS](https://cran.r-project.org/web/packages/imputeTS/index.html): + Time series missing value imputation. +- [rugarch](https://cran.r-project.org/web/packages/rugarch/index.html): + Univariate GARCH models. + +## Installation + +You can install the development version from GitHub with: + +``` r +# install.packages("remotes") +remotes::install_github("jobstdavid/tsEMOS") +``` + +## Package overview + +Below is an overview of all functions contained in the R-package for +model estimation and prediction: + +- `semos`: smooth EMOS (SEMOS). +- `dar_semos`: deseasonalized autoregressive smooth EMOS (DAR-SEMOS). +- `dargarchmult_semos`: multiplicative deseasonalized autoregressive + smooth EMOS with generalized autoregressive conditional + heteroscedasticity (DAR-GARCH-SEMOS ($\cdot$)). +- `dargarchadd_semos`: additive deseasonalized autoregressive smooth + EMOS with generalized autoregressive conditional heteroscedasticity + (DAR-GARCH-SEMOS (+)). +- `sar_semos`: standardized autoregressive smooth EMOS (SAR-SEMOS). + +## Example + +### Load R-package and data + +``` r +# load package +library(tsEMOS) +#> Registered S3 method overwritten by 'quantmod': +#> method from +#> as.zoo.data.frame zoo + +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] +``` + +### SEMOS + +``` r +fit <- semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11) +``` + +### DAR-SEMOS + +``` r +fit <- dar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### DAR-GARCH-SEMOS ($\cdot$) + +``` r +fit <- dargarchmult_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### DAR-GARCH-SEMOS (+) + +``` r +fit <- dargarchadd_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +### SAR-SEMOS + +``` r +fit <- sar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) +``` + +## Contact + +Feel free to contact if you have any +questions or suggestions. + +## References + +Jobst, D., Möller, A., and Groß, J. (2023). Time Series based Ensemble +Model Output Statistics for Temperature Forecasts Postprocessing. diff --git a/data/station.RData b/data/station.RData new file mode 100644 index 0000000000000000000000000000000000000000..fc58ecb93b153855d34b4ce13c24a82b1c058ab6 GIT binary patch literal 213465 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�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 as.Date("2019-12-31"), ] + +# estimate model +fit <- dar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) + +# distribution parameters +head(fit) + +# select data for lead time 48 hours +data <- station[station$lt == 48, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- dar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 1) + +# distribution parameters +head(fit) + +} +\references{ +Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +} diff --git a/man/dargarchadd_semos.Rd b/man/dargarchadd_semos.Rd new file mode 100644 index 0000000..75d72bb --- /dev/null +++ b/man/dargarchadd_semos.Rd @@ -0,0 +1,101 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/dargarchadd_semos.R +\name{dargarchadd_semos} +\alias{dargarchadd_semos} +\title{Additive Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive Conditional Heteroscedasticity (DAR-GARCH-SEMOS (+))} +\usage{ +dargarchadd_semos( + train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ... +) +} +\arguments{ +\item{train}{data frame containing the training data.} + +\item{test}{data frame containing the testing data.} + +\item{doy_col}{column of the variable day of the year.} + +\item{obs_col}{column of the observation variable.} + +\item{mean_col}{column of the ensemble mean forecast variable.} + +\item{sd_col}{column of the ensemble standard deviation variable.} + +\item{w}{integer; window size for the calculation of the empirical standard deviation. +Default: \code{w = 1}.} + +\item{n_ahead}{integer corresponding to the forecast ahead time +(0 for ahead times not greater than 24 hours, +1 for ahead times greater than 24 hours and not greater than 48 hours, and so on).} + +\item{aic}{logical; if \code{TRUE} (default), then the Akaike Information Criterion +is used to choose the order of the autoregressive model. +If \code{FALSE}, the model of order \code{order.max} is fitted.} + +\item{order.max}{maximum order (or order) of model to fit.} + +\item{...}{unused} +} +\value{ +A data frame containing the distribution (location and scale) parameters. +} +\description{ +Additive Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive +Conditional Heteroscedasticity (DAR-GARCH-SEMOS (+)) as described by Jobst, Möller and Groß (2024). +} +\examples{ +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- dargarchadd_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) + +# distribution parameters +head(fit) + +# select data for lead time 48 hours +data <- station[station$lt == 48, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- dargarchadd_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 1) + +# distribution parameters +head(fit) + +} +\references{ +Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +} diff --git a/man/dargarchmult_semos.Rd b/man/dargarchmult_semos.Rd new file mode 100644 index 0000000..c15ad55 --- /dev/null +++ b/man/dargarchmult_semos.Rd @@ -0,0 +1,101 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/dargarchmult_semos.R +\name{dargarchmult_semos} +\alias{dargarchmult_semos} +\title{Multiplicative Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive Conditional Heteroscedasticity (DAR-GARCH-SEMOS (*))} +\usage{ +dargarchmult_semos( + train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ... +) +} +\arguments{ +\item{train}{data frame containing the training data.} + +\item{test}{data frame containing the testing data.} + +\item{doy_col}{column of the variable day of the year.} + +\item{obs_col}{column of the observation variable.} + +\item{mean_col}{column of the ensemble mean forecast variable.} + +\item{sd_col}{column of the ensemble standard deviation variable.} + +\item{w}{integer; window size for the calculation of the empirical standard deviation. +Default: \code{w = 1}.} + +\item{n_ahead}{integer corresponding to the forecast ahead time +(0 for ahead times not greater than 24 hours, +1 for ahead times greater than 24 hours and not greater than 48 hours, and so on).} + +\item{aic}{logical; if \code{TRUE} (default), then the Akaike Information Criterion +is used to choose the order of the autoregressive model. +If \code{FALSE}, the model of order \code{order.max} is fitted.} + +\item{order.max}{maximum order (or order) of model to fit.} + +\item{...}{unused} +} +\value{ +A data frame containing the distribution (location and scale) parameters. +} +\description{ +Multiplicative Deseasonalized Autoregressive smooth EMOS with Generalized Autoregressive +Conditional Heteroscedasticity (DAR-GARCH-SEMOS (*)) as described by Jobst, Möller and Groß (2024). +} +\examples{ +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- dargarchmult_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) + +# distribution parameters +head(fit) + +# select data for lead time 48 hours +data <- station[station$lt == 48, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- dargarchmult_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 1) + +# distribution parameters +head(fit) + +} +\references{ +Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +} diff --git a/man/sar_semos.Rd b/man/sar_semos.Rd new file mode 100644 index 0000000..282b8b0 --- /dev/null +++ b/man/sar_semos.Rd @@ -0,0 +1,100 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/sar_semos.R +\name{sar_semos} +\alias{sar_semos} +\title{Standardized Autoregressive smooth EMOS (SAR-SEMOS)} +\usage{ +sar_semos( + train, + test, + doy_col, + obs_col, + mean_col, + sd_col, + w = 1, + n_ahead = 0, + aic = TRUE, + order.max = NULL, + ... +) +} +\arguments{ +\item{train}{data frame containing the training data.} + +\item{test}{data frame containing the testing data.} + +\item{doy_col}{column of the variable day of the year.} + +\item{obs_col}{column of the observation variable.} + +\item{mean_col}{column of the ensemble mean forecast variable.} + +\item{sd_col}{column of the ensemble standard deviation variable.} + +\item{w}{integer; window size for the calculation of the empirical standard deviation. +Default: \code{w = 1}.} + +\item{n_ahead}{integer corresponding to the forecast ahead time +(0 for ahead times not greater than 24 hours, +1 for ahead times greater than 24 hours and not greater than 48 hours, and so on).} + +\item{aic}{logical; if \code{TRUE} (default), then the Akaike Information Criterion +is used to choose the order of the autoregressive model. +If \code{FALSE}, the model of order \code{order.max} is fitted.} + +\item{order.max}{maximum order (or order) of model to fit.} + +\item{...}{unused} +} +\value{ +A data frame containing the distribution (location and scale) parameters. +} +\description{ +Standardized autoregressive smooth EMOS (SAR-SEMOS) as described by Jobst, Möller and Groß (2024). +} +\examples{ +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- sar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 0) + +# distribution parameters +head(fit) + +# select data for lead time 48 hours +data <- station[station$lt == 48, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- sar_semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11, + n_ahead = 1) + +# distribution parameters +head(fit) + +} +\references{ +Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +} diff --git a/man/semos.Rd b/man/semos.Rd new file mode 100644 index 0000000..c45d25f --- /dev/null +++ b/man/semos.Rd @@ -0,0 +1,73 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/semos.R +\name{semos} +\alias{semos} +\title{Smooth EMOS (SEMOS)} +\usage{ +semos(train, test, doy_col, obs_col, mean_col, sd_col, ...) +} +\arguments{ +\item{train}{data frame containing the training data.} + +\item{test}{data frame containing the testing data.} + +\item{doy_col}{column of the variable day of the year.} + +\item{obs_col}{column of the observation variable.} + +\item{mean_col}{column of the ensemble mean forecast variable.} + +\item{sd_col}{column of the ensemble standard deviation variable.} + +\item{...}{unused} +} +\value{ +A data frame containing the distribution (location and scale) parameters. +} +\description{ +Smooth EMOS (SEMOS) as described by Jobst, Möller and Groß (2024). +} +\examples{ +# load data for station Hannover +data(station) + +# select data for lead time 24 hours +data <- station[station$lt == 24, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11) + +# distribution parameters +head(fit) + +# select data for lead time 48 hours +data <- station[station$lt == 48, ] + +# split data in training and test data +train <- data[data$date <= as.Date("2019-12-31"), ] +test <- data[data$date > as.Date("2019-12-31"), ] + +# estimate model +fit <- semos(train = train, + test = test, + doy_col = 3, + obs_col = 9, + mean_col = 10, + sd_col = 11) + +# distribution parameters +head(fit) + +} +\references{ +Jobst, D., Möller, A., and Groß, J. (2024). Time Series based Ensemble Model Output Statistics for Temperature Forecasts Postprocessing. +} diff --git a/man/station.Rd b/man/station.Rd new file mode 100644 index 0000000..622c979 --- /dev/null +++ b/man/station.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/station.R +\docType{data} +\name{station} +\alias{station} +\title{Data set of 2m surface temperature observations and forecasts for station Hannover} +\format{ +An object of class \code{data.frame} with 10945 rows and 11 columns. +} +\source{ +Ensemble Forecasts from ECMWF: https://www.ecmwf.int + +Observations from DWD: www.dwd.de +} +\usage{ +data(station) +} +\description{ +Data set of the observations, the ensemble mean (mean) and standard +deviation (sd) of the weather quantity 2m surface temperature for the station +Hannover between 2015-2020. It contains the same variables as the data set +in the references. +} +\examples{ +data(station) +} +\references{ +Jobst, David, Möller, Annette, & Groß, Jürgen. (2023). +Data set for the ensemble postprocessing of 2m surface temperature forecasts +in Germany for five different lead times (0.1.0) +[Data set]. Zenodo. https://doi.org/10.5281/zenodo.8193645 +} +\keyword{datasets} diff --git a/tsEMOS.Rproj b/tsEMOS.Rproj new file mode 100644 index 0000000..270314b --- /dev/null +++ b/tsEMOS.Rproj @@ -0,0 +1,21 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace