R/foldFunctions.R
cvFrobeniusLoss.Rd
cvFrobeniusLoss()
evaluates the aggregated Frobenius loss
over a fold
object (from 'origami'
(Coyle and Hejazi 2018)
).
cvFrobeniusLoss(fold, dat, estimator_funs, estimator_params = NULL)
A fold
object (from make_folds()
)
over which the estimation procedure is to be performed.
A data.frame
containing the full (non-sample-split) data,
on which the cross-validated procedure is performed.
An expression
corresponding to a vector of
covariance matrix estimator functions to be applied to the training data.
A named list
of arguments corresponding to
the hyperparameters of covariance matrix estimators, estimator_funs
.
The name of each list element should be the name of an estimator passed to
estimator_funs
. Each element of the estimator_params
is
itself a named list
, with names corresponding to an estimators'
hyperparameter(s). These hyperparameters may be in the form of a single
numeric
or a numeric
vector. If no hyperparameter is needed
for a given estimator, then the estimator need not be listed.
A tibble
providing information on estimators,
their hyperparameters (if any), and their scaled Frobenius loss evaluated
on a given fold
.
Coyle J, Hejazi N (2018). “origami: A Generalized Framework for Cross-Validation in R.” Journal of Open Source Software, 3(21), 512. doi: 10.21105/joss.00512 .
library(MASS)
#> Warning: package ‘MASS’ was built under R version 4.1.2
library(origami)
#> origami v1.0.7: Generalized Framework for Cross-Validation
library(rlang)
#> Warning: package ‘rlang’ was built under R version 4.1.2
# generate 10x10 covariance matrix with unit variances and off-diagonal
# elements equal to 0.5
Sigma <- matrix(0.5, nrow = 10, ncol = 10) + diag(0.5, nrow = 10)
# sample 50 observations from multivariate normal with mean = 0, var = Sigma
dat <- mvrnorm(n = 50, mu = rep(0, 10), Sigma = Sigma)
# generate a single fold using MC-cv
resub <- make_folds(dat,
fold_fun = folds_vfold,
V = 2
)[[1]]
cvFrobeniusLoss(
fold = resub,
dat = dat,
estimator_funs = rlang::quo(c(
linearShrinkEst, thresholdingEst, sampleCovEst
)),
estimator_params = list(
linearShrinkEst = list(alpha = c(0, 1)),
thresholdingEst = list(gamma = c(0, 1))
)
)
#> [[1]]
#> # A tibble: 5 × 4
#> estimator hyperparameters loss fold
#> <chr> <chr> <dbl> <int>
#> 1 linearShrinkEst alpha = 0 106. 1
#> 2 linearShrinkEst alpha = 1 94.3 1
#> 3 thresholdingEst gamma = 0 94.3 1
#> 4 thresholdingEst gamma = 1 114. 1
#> 5 sampleCovEst hyperparameters = NA 94.3 1
#>