Nothing
#' @title Predict method for PTSR
#'
#' @description Predicted values based on ptsr object.
#'
#' @param object Object of class inheriting from \code{"ptsr"}
#' @param newdata A matrix with new values for the regressors. If omitted
#' and \code{"xreg"} is present in the model, the fitted values are returned.
#' If the model does not include regressors, the functions will use
#' the value of \code{nnew}.
#' @param nnew number of out-of-sample forecasts required. If \code{newdata} is
#' provided, \code{nnew} is ignored.
#' @param ... further arguments passed to or from other methods.
#'
#' @details
#' \code{predict.ptsr} produces predicted values, obtained by evaluating
#' the regression function in the frame \code{newdata}.
#'
#' If \code{newdata} is omitted the predictions are based on the data
#' used for the fit.
#'
#' For now, prediction intervals are not provided.
#'
#' @return A list with the following arguments
#'
#' \item{series}{The original time series yt.}
#'
#' \item{xreg}{The original regressors (if any).}
#'
#' \item{fitted.values}{The in-sample forecast given by \eqn{\mu_t}.}
#'
#' \item{etat}{In-sample values of \eqn{g(\mu[t])}.}
#'
#' \item{error}{The error term}
#'
#' \item{residuals}{The (in-sample) residuals, that is, the observed minus the
#' predicted values.}
#'
#' \item{forecast}{The predicted values for yt.}
#'
##' @export
predict.ptsr <-
function(object, newdata, nnew = 0, ...) {
out <- list()
nms.out <- c("series", "xreg", "fitted.values", "residuals")
if (missing(newdata)) newdata <- NULL
if (is.null(newdata) & nnew <= 0) {
#------------------------------------------------------
# New data was not provided.
# Extracting existing components and returning
#------------------------------------------------------
out[nms.out] <- object[nms.out]
} else {
if (is.null(newdata) & object$model$b > 0) {
stop("Please, provide the new values for the regressors")
}
#------------------------------------------------------
# New data was provided.
# Making the necessary calculations
#------------------------------------------------------
xnew <- NULL
if (!is.null(newdata)) {
xnew <- as.matrix(newdata)
nnew <- nrow(xnew)
}
temp <- .ptsr.predict(
par = object$coefficients,
h = nnew, xreg = object$xreg,
xnew = xnew, yt = object$series,
mut = object$fitted.values,
epst = object$residuals,
model = object$model
)
out[nms.out] <- object[nms.out]
out$forecast <- temp
out$xnew <- NULL
if (object$model$b > 0) out$xnew <- xnew
}
out
}
# Internal function.
# Calculates out-of-sample predicted values
.ptsr.predict <- function(par, h, xreg, xnew, yt, mut, epst, model) {
n <- length(yt)
mut <- c(mut, numeric(h))
epst <- c(epst, numeric(h))
p <- model$p
q <- model$q
a <- model$a
b <- model$b
arlag <- model$arlag
malag <- model$malag
g1 <- model$g1
g1.inv <- model$g1.inv
g2 <- model$g2
g2y <- c(g2(yt), numeric(h))
yt <- c(yt, numeric(h))
alpha <- 0
beta <- 0
l <- 0
if (a == 1) {
alpha <- par[1]
l <- l + 1
}
if (b > 0) {
beta <- par[(l + 1):(l + b)]
l <- l + b
}
if (p > 0) {
if (is.null(arlag)) {
phi <- par[(l + 1):(l + p)]
l <- l + p
} else {
phi <- numeric(p)
phi[arlag] <- par[(l + 1):(l + length(arlag))]
l <- l + length(arlag)
}
}
if (q > 0) {
if (is.null(arlag)) {
theta <- par[(l + 1):(l + q)]
l <- l + q
} else {
theta <- numeric(q)
theta[malag] <- par[(l + 1):(l + length(malag))]
l <- l + length(malag)
}
}
XB <- numeric(n + h)
if (!is.null(xnew)) {
xtemp <- rbind(as.matrix(xreg), as.matrix(xnew))
XB <- xtemp %*% beta
}
for (t in 1:h) {
ls <- alpha + XB[n + t]
if (p > 0) {
xr <- 0
if (model$xregar) xr <- XB[(n + t) - c(1:p)]
temp <- sum(phi * (g2y[(n + t) - c(1:p)] - xr))
ls <- ls + temp
}
if (q > 0) ls <- ls + sum(theta * epst[(n + t) - (1:q)])
mut[n + t] <- g1.inv(ls)
yt[n + t] <- mut[n + t]
g2y[n + t] <- g2(mut[n + t])
}
ynew <- yt[(n + 1):(n + h)]
invisible(ynew)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.