Nothing
bfastpp <- function(data, order = 3,
lag = NULL, slag = NULL, na.action = na.omit,
stl = c("none", "trend", "seasonal", "both"))
{
## double check what happens with 29-02 if that happens...
## we should keep it simple an remove the datum if that happens
if(!is.ts(data)) data <- as.ts(data)
## STL pre-processing to try to adjust for trend or season
stl <- match.arg(stl)
if(stl != "none") {
stl_adjust <- function(x) {
x_stl <- stats::stl(x, s.window = "periodic")$time.series
switch(stl,
"trend" = x - x_stl[, "trend"],
"seasonal" = x - x_stl[, "seasonal"],
"both" = x - x_stl[, "trend"] - x_stl[, "seasonal"])
}
if(NCOL(data) > 1L) {
for(i in 1:NCOL(data)) data[,i] <- stl_adjust(data[,i])
} else {
data <- stl_adjust(data)
}
}
## check for covariates
if(NCOL(data) > 1L) {
x <- coredata(data)[, -1L]
y <- data[, 1L]
} else {
x <- NULL
y <- data
}
## data with trend and season factor
rval <- data.frame(
time = as.numeric(time(y)),
response = y,
trend = 1:NROW(y),
season = factor(cycle(y))
)
## set up harmonic trend matrix as well
freq <- frequency(y)
order <- min(freq, order)
harmon <- outer(2 * pi * as.vector(time(y)), 1:order)
harmon <- cbind(apply(harmon, 2, cos), apply(harmon, 2, sin))
colnames(harmon) <- if(order == 1) {
c("cos", "sin")
} else {
c(paste("cos", 1:order, sep = ""), paste("sin", 1:order, sep = ""))
}
if((2 * order) == freq) harmon <- harmon[, -(2 * order)]
rval$harmon <- harmon
## add lags
nalag <- function(x, k) c(rep(NA, k), head(x, -k))
if(!is.null(lag)) {
rval$lag <- sapply(lag, function(k) nalag(as.vector(y), k))
colnames(rval$lag) <- lag
}
if(!is.null(slag)) {
rval$slag <- sapply(slag * freq, function(k) nalag(as.vector(y), k))
colnames(rval$slag) <- slag
}
## add regressors
rval$xreg <- x
## omit missing values
rval <- na.action(rval)
## return everything
return(rval)
}
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.