## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(flexIC)
library(mvtnorm)
library(microbenchmark)
set.seed(123)

## -----------------------------------------------------------------------------
n <- 200; k <- 5
Sigma <- matrix(0.6, k, k); diag(Sigma) <- 1
X0  <- mvtnorm::rmvnorm(n, sigma = Sigma)      # raw data
R_star <- cor(X0, method = "spearman")         # target rank‑R

## -----------------------------------------------------------------------------
## 2  IC (m = 1) vs flexIC (m = 20)

out_ic   <- flexIC(X0, R_star, m = 1 ,  eps = 0   )   # classic IC
out_flex <- flexIC(X0, R_star, m = 20, eps = 0.02)   # flexIC

X_ic   <- out_ic[[1]]
X_flex <- out_flex[[1]]



if (is.null(dim(X_ic)))   X_ic   <- matrix(X_ic  , nrow = n, ncol = k)
if (is.null(dim(X_flex))) X_flex <- matrix(X_flex, nrow = n, ncol = k)

## -----------------------------------------------------------------------------
err_ic   <- max(abs(cor(X_ic  , method = "spearman") - R_star))
err_flex <- max(abs(cor(X_flex, method = "spearman") - R_star))

data.frame(
  method         = c("IC (m = 1)", "flexIC (m = 50)"),
  max_rank_error = c(err_ic, err_flex)
)

## -----------------------------------------------------------------------------
microbenchmark(
  IC     = flexIC(X0, R_star, m = 1 ,  eps = 0   ),
  flex50 = flexIC(X0, R_star, m = 50, eps = 0.02),
  times  = 100L
)

## -----------------------------------------------------------------------------
sessionInfo()