#' Estimated bandwidth for CVE. #' #' Estimates a propper bandwidth \code{h} according #' \deqn{% #' h = \chi_{p-q}^{-1}\left(\frac{nObs - 1}{n-1}\right)\frac{2 tr(\Sigma)}{p}}{% #' h = qchisq( (nObs - 1)/(n - 1), p - q ) 2 tr(Sigma) / p} #' #' @param X data matrix of dimension (n x p) with n data points X_i of dimension #' q. Therefor each row represents a datapoint of dimension p. #' @param k Guess for rank(B). #' @param nObs Ether numeric of a function. If specified as numeric value #' its used in the computation of the bandwidth directly. If its a function #' `nObs` is evaluated as \code{nObs(nrow(x))}. The default behaviou if not #' supplied at all is to use \code{nObs <- nrow(x)^0.5}. #' #' @seealso [\code{\link{qchisq}}] #' @export estimate.bandwidth <- function(X, k, nObs) { n <- nrow(X) p <- ncol(X) X_centered <- scale(X, center=TRUE, scale=FALSE) Sigma <- (1 / n) * t(X_centered) %*% X_centered quantil <- qchisq((nObs - 1) / (n - 1), k) return(2 * quantil * sum(diag(Sigma)) / p) }