28 lines
1.0 KiB
R
28 lines
1.0 KiB
R
|
#' 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)
|
||
|
}
|