2
0
Fork 0
CVE/CVarE/R/directions.R

48 lines
1.5 KiB
R

#' @export
directions <- function(object, k, ...) {
UseMethod("directions")
}
#' Computes projected training data \code{X} for given dimension `k`.
#'
#' Returns \eqn{B'X}. That is, it computes the projection of the \eqn{n x p}
#' design matrix \eqn{X} on the column space of \eqn{B} of dimension \eqn{k}.
#'
#' @param object an object of class \code{"cve"}, usually, a result of a call to
#' \code{\link{cve}} or \code{\link{cve.call}}.
#' @param k SDR dimension to use for projection.
#' @param ... ignored (no additional arguments).
#'
#' @return the \eqn{n\times k}{n x k} dimensional matrix \eqn{X B} where \eqn{B}
#' is the cve-estimate for dimension \eqn{k}.
#'
#' @examples
#' # create B for simulation (k = 1)
#' B <- rep(1, 5) / sqrt(5)
#' set.seed(21)
#' # creat predictor data x ~ N(0, I_p)
#' x <- matrix(rnorm(500), 100, 5)
#' # simulate response variable
#' # y = f(B'x) + err
#' # with f(x1) = x1 and err ~ N(0, 0.25^2)
#' y <- x %*% B + 0.25 * rnorm(100)
#' # calculate cve with method 'mean' for k = 1
#' set.seed(21)
#' cve.obj.mean <- cve(y ~ x, k = 1, method = 'mean')
#' # get projected data for k = 1
#' x.proj <- directions(cve.obj.mean, k = 1)
#' # plot y against projected data
#' plot(x.proj, y)
#'
#' @seealso \code{\link{cve}}
#'
#' @method directions cve
#' @aliases directions directions.cve
#' @export
directions.cve <- function(object, k, ...) {
if (!(k %in% names(object$res))) {
stop("SDR directions for requested dimension `k` not computed.")
}
return(object$X %*% object$res[[as.character(k)]]$B)
}