From b9b4a8b780a6b76b6c3c3228735b25c3dfe0dc79 Mon Sep 17 00:00:00 2001 From: Peder <pbac@dtu.dk> Date: Fri, 10 Jul 2020 09:14:49 +0200 Subject: [PATCH] Small misc --- DESCRIPTION | 4 +- R/AR.R | 2 +- R/bspline.R | 2 +- R/data.list.R | 2 +- R/forecastmodel.R | 208 +++++++++++++++--------------- R/forecastmodel.R-documentation.R | 8 +- R/lm_fit.R | 4 +- R/lm_optim.R | 5 +- R/lm_predict.R | 2 +- R/ones.R | 2 +- R/operator_multiply.R | 2 +- R/rls_fit.R | 4 +- R/rls_optim.R | 4 +- R/rls_predict.R | 6 +- R/rls_prm.R | 4 +- R/rls_update.R | 2 +- make.R | 7 +- vignettes/.gitignore | 2 + vignettes/forecast-evaluation.Rmd | 2 +- 19 files changed, 138 insertions(+), 134 deletions(-) create mode 100644 vignettes/.gitignore diff --git a/DESCRIPTION b/DESCRIPTION index 487cc79..f08a8da 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,9 +23,7 @@ Suggests: testthat (>= 2.1.0), data.table, plotly -VignetteBuilder: - knitr, - R.rsp +VignetteBuilder:knitr RoxygenNote: 7.1.0 URL: http://onlineforecasting.org BugReports: https://lab.compute.dtu.dk/packages/onlineforecast/-/issues diff --git a/R/AR.R b/R/AR.R index d34dfa6..0738f07 100644 --- a/R/AR.R +++ b/R/AR.R @@ -54,7 +54,7 @@ #' # Plot for a short period with peaks #' plot_ts(fit, xlim=c("2011-01-05","2011-01-07")) #' -#' # For online updating, see ??ref{vignette}: +#' # For online updating, see ??ref{vignette, not yet available}: #' # the needed lagged output values are stored in the model for next time new data is available #' model$yAR #' # The maximum lag needed is also kept diff --git a/R/bspline.R b/R/bspline.R index f049409..56eeb30 100644 --- a/R/bspline.R +++ b/R/bspline.R @@ -11,7 +11,7 @@ #' #' See the help for all arguments with \code{?splines::bs}. NOTE that two arguments have different default values. #' -#' For more examples of use see ??ref(solar forecast vignette). +#' See the example \url{https://onlineforecasting/examples/solar-power-forecasting.html} where the function is used in a model. #' #' @family Transform stage functions #' diff --git a/R/data.list.R b/R/data.list.R index daeea20..4d6a6dc 100644 --- a/R/data.list.R +++ b/R/data.list.R @@ -9,7 +9,7 @@ #' Make a data.list of the vectors and data.frames given. #' -#' See the vignette ??{setup-data} on how a data.list must be setup. +#' See the vignette 'setup-data' on how a data.list must be setup. #' #' It's simply a list of class \code{data.list} holding: #' - vector \code{t} diff --git a/R/forecastmodel.R b/R/forecastmodel.R index 02283bc..e33b37e 100644 --- a/R/forecastmodel.R +++ b/R/forecastmodel.R @@ -1,68 +1,68 @@ #' @export forecastmodel <- R6::R6Class("forecastmodel", public = list( - ##---------------------------------------------------------------- - ## Fields used for setting up the model - ## - ## The expression (as character) used for generating the regprm + #---------------------------------------------------------------- + # Fields used for setting up the model + # + # The expression (as character) used for generating the regprm regprmexpr = NA, - ## Regression parameters for the function used for fitting (rls, ls, etc.) + # Regression parameters for the function used for fitting (rls, ls, etc.) regprm = list(), - ## The off-line parameters + # The off-line parameters prmbounds = as.matrix(data.frame(lower=NA, init=NA, upper=NA)), - ## List of inputs (which are R6 objects) (note the "cloning of list of reference objects" issue below in deep_clone function) + # List of inputs (which are R6 objects) (note the "cloning of list of reference objects" issue below in deep_clone function) inputs = list(), - ## Name of the output + # Name of the output output = "y", - ## The range of the output to be used for cropping the output + # The range of the output to be used for cropping the output outputrange = NA, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Fields to be used when the model is fitted - ## - ## The horizons to fit for + #---------------------------------------------------------------- + # Fields to be used when the model is fitted + # + # The horizons to fit for kseq = NA, - ## The (transformation stage) parameters used for the fit + # The (transformation stage) parameters used for the fit prm = NA, - ## Stores the maximum lag for AR terms + # Stores the maximum lag for AR terms maxlagAR = NA, - ## Stores the maxlagAR past values of y for the update when new obs becomes available + # Stores the maxlagAR past values of y for the update when new obs becomes available yAR = NA, - ## The fits, one for each k in kseq (simply a list with the latest fit) + # The fits, one for each k in kseq (simply a list with the latest fit) Lfits = list(), - ## Transformed input data (data.list with all inputs; or local fitted models: ??data.frame with all data??) + # Transformed input data (data.list with all inputs for regression) datatr = NA, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Contructor function + #---------------------------------------------------------------- + # Contructor function initialize = function(){}, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Add inputs to the model + #---------------------------------------------------------------- + # Add inputs to the model add_inputs = function(...){ dots <- list(...) for (i in 1:length(dots)){ self$inputs[[ nams(dots)[i] ]] <- input_class$new(dots[[i]], model=self) } }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Add the expression (as character) which generates the regression parameters + #---------------------------------------------------------------- + # Add the expression (as character) which generates the regression parameters add_regprm = function(regprmexpr){ self$regprmexpr <- regprmexpr self$regprm <- eval(parse(text = self$regprmexpr)) }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Add the transformation parameters and bounds for optimization + #---------------------------------------------------------------- + # Add the transformation parameters and bounds for optimization add_prmbounds = function(...) { dots <- list(...) for (i in 1:length(dots)) { @@ -79,11 +79,11 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( } } }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Get the transformation parameters + #---------------------------------------------------------------- + # Get the transformation parameters get_prmbounds = function(nm){ if(nm == "init"){ if(is.null(dim(self$prmbounds))){ @@ -118,40 +118,40 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( names(val) <- row.names(self$prmbounds) return(val) }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Insert the transformation parameters prm in the input expressions and regression expressions, and keep them (simply string manipulation) + #---------------------------------------------------------------- + # Insert the transformation parameters prm in the input expressions and regression expressions, and keep them (simply string manipulation) insert_prm = function(prm){ # If just NA or NULL given, then don't do anything if(is.null(prm) | (is.na(prm)[1] & length(prm) == 1)){ return(NULL) } - ## MUST INCLUDE SOME checks here and print useful messages if something is not right + # MUST INCLUDE SOME checks here and print useful messages if something is not right if(any(is.na(prm))){ stop(pst("None of the parameters (in prm) must be NA: prm=",prm)) } - ## Keep the prm + # Keep the prm self$prm <- prm - ## Find if any opt parameters, first the ones with "__" hence for the inputs + # Find if any opt parameters, first the ones with "__" hence for the inputs pinputs <- prm[grep("__",nams(prm))] - ## If none found for inputs, then the rest must be for regression + # If none found for inputs, then the rest must be for regression if (length(pinputs) == 0 & length(prm) > 0) { preg <- prm } else { preg <- prm[-grep("__",nams(prm))] } - ## ################################ - ## For the inputs, insert from prm if any found + # ################ + # For the inputs, insert from prm if any found if (length(pinputs)) { pnms <- unlist(getse(strsplit(nams(pinputs),"__"), 1)) pprm <- unlist(getse(strsplit(nams(pinputs),"__"), 2)) - ## + # for(i in 1:length(self$inputs)){ for(ii in 1:length(pnms)){ - ## Find if the input i have prefix match with the opt. parameter ii + # Find if the input i have prefix match with the opt. parameter ii if(pnms[ii]==nams(self$inputs)[i]){ - ## if the opt. parameter is in the expr, then replace + # if the opt. parameter is in the expr, then replace self$inputs[[i]]$expr <- private$replace_value(name = pprm[ii], value = pinputs[ii], expr = self$inputs[[i]]$expr) @@ -159,12 +159,12 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( } } } - ## ################################ - ## For the fit parameters, insert from prm if any found + # ################ + # For the fit parameters, insert from prm if any found if (length(preg) & any(!is.na(self$regprmexpr))) { nams(preg) for(i in 1:length(preg)){ - ## if the opt. parameter is in the expr, then replace + # if the opt. parameter is in the expr, then replace self$regprmexpr <- private$replace_value(name = nams(preg)[i], value = preg[i], expr = self$regprmexpr) @@ -172,52 +172,52 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( } self$regprm <- eval(parse(text = self$regprmexpr)) }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Function for transforming the input data to the regression data + #---------------------------------------------------------------- + # Function for transforming the input data to the regression data transform_data = function(data){ - ## Evaluate for each input the expresssion to generate the model input data + # Evaluate for each input the expresssion to generate the model input data L <- lapply(self$inputs, function(input){ - ## Evaluate the expression (input$expr) + # Evaluate the expression (input$expr) L <- input$evaluate(data) - ## Must return a list + # Must return a list if(class(L)=="matrix"){ return(list(as.data.frame(L))) } if(class(L)=="data.frame"){ return(list(L)) } if(class(L)!="list"){ stop(pst("The value returned from evaluating: ",input$expr,", was not a matrix, data.frame or a list of them."))} if(class(L[[1]])=="matrix"){ return(lapply(L, function(mat){ return(as.data.frame(mat)) })) } return(L) }) - ## Put together in one data.list + # Put together in one data.list L <- structure(do.call(c, L), class="data.list") - ## + # return(L) }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Resets the input states + #---------------------------------------------------------------- + # Resets the input states reset_state = function(){ - ## Reset the inputs state + # Reset the inputs state lapply(self$inputs, function(input){ input$state_reset() }) - ## Reset stored data + # Reset stored data self$datatr <- NA self$yAR <- NA }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Check if the model and data is setup correctly + #---------------------------------------------------------------- + # Check if the model and data is setup correctly check = function(data = NA){ - ## some checks are done here, maybe more should be added (??also when transforming inputs, if something goes wrong its caught and message is printed) - ## - ## ################################################################ - ## First check if the output is set correctly + # some checks are done here, maybe more should be added (??also when transforming inputs, if something goes wrong its caught and message is printed) + # + # ################################ + # First check if the output is set correctly if( is.na(self$output) ){ stop("Model output is NA, it must be set to the name of a variable in the data.list used.") } @@ -230,29 +230,29 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( if( length(data[[self$output]]) != length(data$t) ){ stop("The length of the model output '",self$output,"' is ",length(data[[self$output]]),", which is not equal to the length of the time vector (t), which is ",length(data$t)) } - ## ################################################################ - ## Check that the kseq is set in the model + # ################################ + # Check that the kseq is set in the model if( !is.numeric(self$kseq) ){ stop("'model$kseq' is not set. Must be an integer (or numeric) vector.") } - ## ################################################################ - ## Check all input variables are correctly set data + # ################################ + # Check all input variables are correctly set data for(i in 1:length(self$inputs)){ - ## Find all the variables in the expression + # Find all the variables in the expression nms <- all.vars(parse(text=self$inputs[[i]]$expr[[1]])) for(nm in nms){ if(class(data[[nm]]) %in% c("data.frame","matrix")){ - ## It's a forecast input, hence must have the k columns in kseq + # It's a forecast input, hence must have the k columns in kseq if(!all(self$kseq %in% as.integer(gsub("k","",names(data[[nm]]))))){ missingk <- which(!self$kseq %in% as.integer(gsub("k","",names(data[[nm]])))) stop("The input variable '",nm,"' doesn't have all needed horizons.\nIt has ",pst(names(data[[nm]]),collapse=","),"\nIt is missing ",pst("k",self$kseq[missingk],collapse=",")) } - ## Check if the number of observations match + # Check if the number of observations match if( nrow(data[[nm]]) != length(data$t) ){ stop(pst("The input variable '",nm,"' doesn't have the same number of observations as time vector 't' in the data. It has ",nrow(data[[nm]]),", but 't' has ",length(data$t))) } }else if(class(data[[nm]]) == "numeric"){ - ## Observation input, check the length + # Observation input, check the length if( length(data[[nm]]) != length(data$t) ){ stop("The input variable '",nm,"' doesn't have the same number of observations as time vector 't' in the data. It has ",length(data[[nm]]),", but 't' has ",length(data$t)) } @@ -263,11 +263,11 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( } }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- clone_deep = function(){ - ## First clone with deep=TRUE. Now also the inputes get cloned. + # First clone with deep=TRUE. Now also the inputes get cloned. newmodel <- self$clone(deep=TRUE) - ## The inputs are cloned now, however the model fields in the inputs have not been updated, so do that + # The inputs are cloned now, however the model fields in the inputs have not been updated, so do that if(length(newmodel$inputs) > 0){ for(i in 1:length(newmodel$inputs)){ newmodel$inputs[[i]]$model <- newmodel @@ -275,57 +275,57 @@ forecastmodel <- R6::R6Class("forecastmodel", public = list( } return(newmodel) } - ##---------------------------------------------------------------- + #---------------------------------------------------------------- ), - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Private functions + #---------------------------------------------------------------- + # Private functions private = list( - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## Replace the value in "name=value" in expr + #---------------------------------------------------------------- + # Replace the value in "name=value" in expr replace_value = function(name, value, expr){ - ## First make regex + # First make regex pattern <- gsub("\\.", ".*", name) - ## Try to find it in the input + # Try to find it in the input pos <- regexpr(pattern, expr) - ## Only replace if prm was found + # Only replace if prm was found if(pos>0){ pos <- c(pos+attr(pos,"match.length")) - ## Find the substr to replace with the prm value + # Find the substr to replace with the prm value (tmp <- substr(expr, pos, nchar(expr))) pos2 <- regexpr(",|)", tmp) - ## Insert the prm value and return + # Insert the prm value and return expr <- pst(substr(expr,1,pos-1), "=", value, substr(expr,pos+pos2-1,nchar(expr))) # Print? Not used now #if(printout){ cat(names(value),"=",value,", ",sep="")} } return(expr) }, - ##---------------------------------------------------------------- + #---------------------------------------------------------------- - ##---------------------------------------------------------------- - ## For deep cloning, in order to get the inputs list of R6 objects copied + #---------------------------------------------------------------- + # For deep cloning, in order to get the inputs list of R6 objects copied deep_clone = function(name, value) { - ## With x$clone(deep=TRUE) is called, the deep_clone gets invoked once for - ## each field, with the name and value. + # With x$clone(deep=TRUE) is called, the deep_clone gets invoked once for + # each field, with the name and value. if (name == "inputs") { - ## Don't clone the inputs deep, since they have the model as a field and then it gets in an infinitie loop! - ## But have to update the model references, so therefore the function above "clone_deep" must be used + # Don't clone the inputs deep, since they have the model as a field and then it gets in an infinitie loop! + # But have to update the model references, so therefore the function above "clone_deep" must be used return(lapply(value, function(x){ x$clone(deep=FALSE) })) - ## ## `a` is an environment, so use this quick way of copying - ## list2env(as.list.environment(value, all.names = TRUE), - ## parent = emptyenv()) + # # `a` is an environment, so use this quick way of copying + # list2env(as.list.environment(value, all.names = TRUE), + # parent = emptyenv()) } - ## For all other fields, just return the value + # For all other fields, just return the value return(value) } - ##---------------------------------------------------------------- + #---------------------------------------------------------------- ) ) diff --git a/R/forecastmodel.R-documentation.R b/R/forecastmodel.R-documentation.R index c043918..cca2110 100644 --- a/R/forecastmodel.R-documentation.R +++ b/R/forecastmodel.R-documentation.R @@ -26,7 +26,7 @@ #' - It can be manimulated directly in functions (without return). The code is written such that no external functions manipulate the model object, except for online updating. #' #' For online updating (i.e. receiving new data and updating the fit), then the model definition and the data becomes entangled, since transformation functions like low-pass filtering with \code{\link{lp}()} requires past values. -#' See the vignette ??(ref to online vignette) and note that \code{\link{rls_fit}()} resets the state, which is also done in all \code{xxx_fit} functions (e.g. \code{\link{rls_fit}}. +#' See the vignette ??(ref to online vignette, not yet available) and note that \code{\link{rls_fit}()} resets the state, which is also done in all \code{xxx_fit} functions (e.g. \code{\link{rls_fit}}. #' #' #' @section Public fields used for setting up the model: @@ -52,7 +52,7 @@ #' #' - Lfits = list(): The regression fits, one for each k in kseq (simply a list with the latest fit). #' -#' - datatr = NA: Transformed input data (data.list with all inputs; or local fitted models: ??data.frame with all data??) +#' - datatr = NA: Transformed input data (data.list with all inputs for regression) #' #' #---------------------------------------------------------------- @@ -151,13 +151,13 @@ #---------------------------------------------------------------- #' @section \code{$transform_data(data)}: -#' Function for transforming the input data to the regression stage input data (see ??(ref to setup data and online updating vignette). +#' Function for transforming the input data to the regression stage input data (see \code{vignette("setup-data", package = "onlineforecast")}). #' #---------------------------------------------------------------- #---------------------------------------------------------------- #' @section \code{$reset_state()}: -#' Resets the input states and stored data for iterative fitting (datatr rows and yAR) (see ??(ref to online updating vignette). +#' Resets the input states and stored data for iterative fitting (datatr rows and yAR) (see ??(ref to online updating vignette, not yet available). #' #---------------------------------------------------------------- diff --git a/R/lm_fit.R b/R/lm_fit.R index 0604f5d..5996426 100644 --- a/R/lm_fit.R +++ b/R/lm_fit.R @@ -31,10 +31,10 @@ #' #' @examples #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$output <- "y" #' model$add_inputs(Ta = "Ta", diff --git a/R/lm_optim.R b/R/lm_optim.R index dac473d..2b7486a 100644 --- a/R/lm_optim.R +++ b/R/lm_optim.R @@ -22,10 +22,10 @@ #' @seealso \code{link{optim}} for how to control the optimization and \code{\link{rls_optim}} which works very similarly. #' @examples #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$add_inputs(Ta = "lp(Ta, a1=0.9)", #' mu = "ones()") @@ -33,6 +33,7 @@ #' D$scoreperiod <- in_range("2010-12-20", D$t) #' # And the sequence of horizons to fit for #' model$kseq <- 1:6 +#' #' # Now we can fit the model and get the score, as it is #' lm_fit(model=model, data=D, scorefun=rmse, returnanalysis=FALSE) #' # Or we can change the low-pass filter coefficient diff --git a/R/lm_predict.R b/R/lm_predict.R index 26da13e..8e5531c 100644 --- a/R/lm_predict.R +++ b/R/lm_predict.R @@ -1,6 +1,6 @@ #' Use a fitted forecast model to predict its output variable with transformed data. #' -#' See the ??ref(recursive updating vignette). +#' See the ??ref(recursive updating vignette, not yet available). #' #' @title Prediction with an lm forecast model. #' @param model Onlineforecast model object which has been fitted. diff --git a/R/ones.R b/R/ones.R index e2d3237..e079be5 100644 --- a/R/ones.R +++ b/R/ones.R @@ -8,7 +8,7 @@ #' #' The function returns ones which can be used to generate ones, e.g. to be used as a intercept for a model. #' -#' See ??(ref to mkodel vignette) +#' See vignettes 'setup-data' and 'setup-and-use-model'. #' #' @title Create ones for model input intercept #' @return A data.frame of ones diff --git a/R/operator_multiply.R b/R/operator_multiply.R index d82c420..843d10b 100644 --- a/R/operator_multiply.R +++ b/R/operator_multiply.R @@ -17,7 +17,7 @@ #' and y, then only the columns with same names are used, hence the resulting matrices can be #' of lower dimensions. #' -#' See the ??(solar forecast vignette) for example of use +#' See the example \url{https://onlineforecasting/examples/solar-power-forecasting.html} where the operator is used. #' #' @title Multiplication of list with y, elementwise #' @param x a list of matrices, data.frames, etc. diff --git a/R/rls_fit.R b/R/rls_fit.R index 99a405d..79805ed 100644 --- a/R/rls_fit.R +++ b/R/rls_fit.R @@ -47,10 +47,10 @@ #' @examples #' #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$output <- "y" #' model$add_inputs(Ta = "Ta", diff --git a/R/rls_optim.R b/R/rls_optim.R index 62ec127..09f2cec 100644 --- a/R/rls_optim.R +++ b/R/rls_optim.R @@ -22,10 +22,10 @@ #' @seealso \code{link{optim}} for how to control the optimization. #' @examples #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$add_inputs(Ta = "Ta", mu = "ones()") #' model$add_regprm("rls_prm(lambda=0.99)") diff --git a/R/rls_predict.R b/R/rls_predict.R index 3dbf5de..4f3855d 100644 --- a/R/rls_predict.R +++ b/R/rls_predict.R @@ -1,6 +1,6 @@ #' Use a fitted forecast model to predict its output variable with transformed data. #' -#' See the ??ref(recursive updating vignette). +#' See the ??ref(recursive updating vignette, not yet available). #' #' @title Prediction with an rls model. #' @param model Onlineforecast model object which has been fitted. @@ -8,10 +8,10 @@ #' @return The Yhat forecast matrix with a forecast for each model$kseq and for each time point in \code{datatr$t}. #' @examples #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$add_inputs(Ta = "Ta", mu = "ones()") #' model$add_regprm("rls_prm(lambda=0.99)") diff --git a/R/rls_prm.R b/R/rls_prm.R index ddec089..389c58e 100644 --- a/R/rls_prm.R +++ b/R/rls_prm.R @@ -12,11 +12,11 @@ #' @return A list of the parameters #' @examples #' -#' # Take data (See vignette ??(ref) for better model and more details) +#' # Take data #' D <- subset(Dbuilding, c("2010-12-15", "2011-01-01")) #' D$y <- D$heatload #' D$scoreperiod <- in_range("2010-12-20", D$t) -#' # Define a model +#' # Define a simple model #' model <- forecastmodel$new() #' model$add_inputs(Ta = "Ta", mu = "ones()") #' model$kseq <- 1:6 diff --git a/R/rls_update.R b/R/rls_update.R index 269f5d0..6b1124f 100644 --- a/R/rls_update.R +++ b/R/rls_update.R @@ -5,7 +5,7 @@ #' Calculates the RLS update of the model coefficients with the provived data. #' -#' See vignette ??ref(recursive updating) on how to use the function. +#' See vignette ??ref(recursive updating, not yet finished) on how to use the function. #' #' @title Updates the model fits #' @param model A model object diff --git a/make.R b/make.R index 62a0b2c..bbe31bb 100644 --- a/make.R +++ b/make.R @@ -52,19 +52,22 @@ library(roxygen2) # load_all(as.package("../onlineforecast")) # test_file("tests/testthat/test-rls-heat-load.R") +# Add new vignette +#usethis::use_vignette("setup-data") +#usethis::use_vignette("setup-and-use-model") +#usethis::use_vignette("forecast-evaluation") # ---------------------------------------------------------------- # Build the package (remember to rebuild vignettes for release) document() build(".", vignettes=TRUE) + # Install it install.packages("../onlineforecast_1.0.0.tar.gz") library(onlineforecast) -# # Add new vignette -#usethis::use_vignette("test") # # ---------------------------------------------------------------- # # Load the current version directly from the folder diff --git a/vignettes/.gitignore b/vignettes/.gitignore new file mode 100644 index 0000000..097b241 --- /dev/null +++ b/vignettes/.gitignore @@ -0,0 +1,2 @@ +*.html +*.R diff --git a/vignettes/forecast-evaluation.Rmd b/vignettes/forecast-evaluation.Rmd index f35a598..f1e2ab0 100644 --- a/vignettes/forecast-evaluation.Rmd +++ b/vignettes/forecast-evaluation.Rmd @@ -237,7 +237,7 @@ model. This is however not at all trivial, since the suitable reference model depends on the particular case of forecasting, e.g. the suitable reference model for wind power forecasting is not the same as for solar power forecasting - even within the same application the suitable reference model can be different -depending on particular conditions etc. <!-- ??(referencer) --> +depending on particular conditions etc. In general the fundamental reference model should be the simplest reasonable model not relying on any inputs, hence either a model based on a mean -- GitLab