## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")

## -----------------------------------------------------------------------------
library(risdr)

sim <- simulate_risdr_data(
  n = 100,
  p = 40,
  d = 2,
  rho = 0.9,
  seed = 7001
)

estimates <- list(
  sample = cov_sample(sim$X),
  ridge = cov_ridge(sim$X, lambda = 0.10),
  oas = cov_oas(sim$X),
  lw = cov_lw(sim$X),
  mec = cov_mec(sim$X, sim$y, nslices = 6)
)

diagnostics <- do.call(
  rbind,
  lapply(names(estimates), function(name) {
    value <- cov_diagnostics(estimates[[name]])
    data.frame(
      estimator = name,
      minimum_eigenvalue = value$min_eigenvalue,
      maximum_eigenvalue = value$max_eigenvalue,
      condition_number = value$condition_number,
      effective_rank = value$effective_rank
    )
  })
)

diagnostics

## -----------------------------------------------------------------------------
ridge_fit <- fit_risdr(
  sim$X,
  sim$y,
  sdr_method = "sir",
  cov_method = "ridge",
  d = 2,
  d_max = 5,
  cov_args = list(lambda = 0.15)
)

## -----------------------------------------------------------------------------
sample_covariance <- cov_sample(sim$X)

floor_covariance <- stabilize_cov(
  sample_covariance,
  method = "eigenfloor",
  eps = 1e-6
)

ridge_covariance <- stabilize_cov(
  sample_covariance,
  method = "ridge",
  lambda = 1e-4
)

nearest_covariance <- stabilize_cov(
  sample_covariance,
  method = "nearest_pd",
  keep_diag = TRUE
)

## -----------------------------------------------------------------------------
separated_controls <- fit_risdr(
  sim$X,
  sim$y,
  sdr_method = "dr",
  cov_method = "ridge",
  stabilization = "eigenfloor",
  d = 2,
  d_max = 5,
  cov_args = list(lambda = 0.10),
  stabilization_args = list(eps = 1e-7)
)

## -----------------------------------------------------------------------------
simulation_path <- system.file(
  "extdata",
  "simulation",
  "simulation_A_final_covariance_DR_summary_tidy.csv",
  package = "risdr"
)
simulation_a <- utils::read.csv(simulation_path)

aggregate(
  cbind(
    mean_subspace_distance,
    mean_RMSE,
    mean_condition_number,
    mean_runtime_seconds
  ) ~ cov_method,
  data = simulation_a,
  FUN = mean
)

