DEPRECATED!
The function `validateFDboost()`

is deprecated,
use `applyFolds`

and `bootstrapCI`

instead.

```
validateFDboost(
object,
response = NULL,
folds = cv(rep(1, length(unique(object$id))), type = "bootstrap"),
grid = 1:mstop(object),
fun = NULL,
getCoefCV = TRUE,
riskopt = c("mean", "median"),
mrdDelete = 0,
refitSmoothOffset = TRUE,
showProgress = TRUE,
...
)
```

object

fitted FDboost-object

response

optional, specify a response vector for the computation of the prediction errors.
Defaults to `NULL`

which means that the response of the fitted model is used.

folds

a weight matrix with number of rows equal to the number of observed trajectories.

grid

the grid over which the optimal number of boosting iterations (mstop) is searched.

fun

if `fun`

is `NULL`

, the out-of-bag risk is returned.
`fun`

, as a function of `object`

,
may extract any other characteristic of the cross-validated models. These are returned as is.

getCoefCV

logical, defaults to `TRUE`

. Should the coefficients and predictions
be computed for all the models on the sampled data?

riskopt

how is the optimal stopping iteration determined. Defaults to the mean, but median is possible as well.

mrdDelete

Delete values that are `mrdDelete`

percent smaller than the mean
of the response. Defaults to 0 which means that only response values being 0
are not used in the calculation of the MRD (= mean relative deviation).

refitSmoothOffset

logical, should the offset be refitted in each learning sample?
Defaults to `TRUE`

. In `cvrisk`

the offset of the original model fit in
`object`

is used in all folds.

showProgress

logical, defaults to `TRUE`

.

...

further arguments passed to `mclapply`

The function `validateFDboost`

returns a `validateFDboost`

-object,
which is a named list containing:

the response

the observation points of the response

the id variable of the response

folds that were used

grid of possible numbers of boosting iterations

if `getCoefCV`

is `TRUE`

the estimated coefficient functions in the folds

if `getCoefCV`

is `TRUE`

the out-of-bag predicted values of the response

if the type of folds is curves the out-of-bag predictions for each trajectory

the out-of-bag risk

the out-of-bag risk at the minimal mean risk

the out-of-bag mean squared error (MSE)

the out-of-bag relative mean squared error (relMSE)

the out-of-bag mean relative deviation (MRD)

the out-of-bag risk without consideration of integration weights

the out-of-bag mean squared error (MSE) without consideration of integration weights

the out-of-bag mean relative deviation (MRD) without consideration of integration weights

one of "FDboostLong" or "FDboost" depending on the class of the object

list of what fun returns if fun was specified

The number of boosting iterations is an important hyper-parameter of boosting
and can be chosen using the function `validateFDboost`

as they compute
honest, i.e., out-of-bag, estimates of the empirical risk for different numbers of boosting iterations.

The function `validateFDboost`

is especially suited to models with functional response.
Using the option `refitSmoothOffset`

the offset is refitted on each fold.
Note, that the function `validateFDboost`

expects folds that give weights
per curve without considering integration weights. The integration weights of
`object`

are used to compute the empirical risk as integral. The argument `response`

can be useful in simulation studies where the true value of the response is known but for
the model fit the response is used with noise.

# NOT RUN { if(require(fda)){ ## load the data data("CanadianWeather", package = "fda") ## use data on a daily basis canada <- with(CanadianWeather, list(temp = t(dailyAv[ , , "Temperature.C"]), l10precip = t(dailyAv[ , , "log10precip"]), l10precip_mean = log(colMeans(dailyAv[ , , "Precipitation.mm"]), base = 10), lat = coordinates[ , "N.latitude"], lon = coordinates[ , "W.longitude"], region = factor(region), place = factor(place), day = 1:365, ## corresponds to t: evaluation points of the fun. response day_s = 1:365)) ## corresponds to s: evaluation points of the fun. covariate ## center temperature curves per day canada$tempRaw <- canada$temp canada$temp <- scale(canada$temp, scale = FALSE) rownames(canada$temp) <- NULL ## delete row-names ## fit the model mod <- FDboost(l10precip ~ 1 + bolsc(region, df = 4) + bsignal(temp, s = day_s, cyclic = TRUE, boundary.knots = c(0.5, 365.5)), timeformula = ~ bbs(day, cyclic = TRUE, boundary.knots = c(0.5, 365.5)), data = canada) mod <- mod[75] #### create folds for 3-fold bootstrap: one weight for each curve set.seed(123) folds_bs <- cv(weights = rep(1, mod$ydim[1]), type = "bootstrap", B = 3) ## compute out-of-bag risk on the 3 folds for 1 to 75 boosting iterations cvr <- applyFolds(mod, folds = folds_bs, grid = 1:75) ## compute out-of-bag risk and coefficient estimates on folds cvr2 <- validateFDboost(mod, folds = folds_bs, grid = 1:75) ## weights per observation point folds_bs_long <- folds_bs[rep(1:nrow(folds_bs), times = mod$ydim[2]), ] attr(folds_bs_long, "type") <- "3-fold bootstrap" ## compute out-of-bag risk on the 3 folds for 1 to 75 boosting iterations cvr3 <- cvrisk(mod, folds = folds_bs_long, grid = 1:75) ## plot the out-of-bag risk par(mfrow = c(1,3)) plot(cvr); legend("topright", lty=2, paste(mstop(cvr))) plot(cvr2) plot(cvr3); legend("topright", lty=2, paste(mstop(cvr3))) ## plot the estimated coefficients per fold ## more meaningful for higher number of folds, e.g., B = 100 par(mfrow = c(2,2)) plotPredCoef(cvr2, terms = FALSE, which = 2) plotPredCoef(cvr2, terms = FALSE, which = 3) ## compute out-of-bag risk and predictions for leaving-one-curve-out cross-validation cvr_jackknife <- validateFDboost(mod, folds = cvLong(unique(mod$id), type = "curves"), grid = 1:75) plot(cvr_jackknife) ## plot oob predictions per fold for 3rd effect plotPredCoef(cvr_jackknife, which = 3) ## plot coefficients per fold for 2nd effect plotPredCoef(cvr_jackknife, which = 2, terms = FALSE) } # } # NOT RUN { # }