---
title: "Getting Started with spfcICOMP"
author: "Kabir O. Olorede"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Getting Started with spfcICOMP}
  %\VignetteEngine{knitr::rmarkdown}
  \usepackage[utf8]{inputenc}
---

# Introduction

The `spfcICOMP` package implements Shrinkage Principal Fitted Components
(SPFC) methodology for sufficient dimension reduction under
high-dimensional settings.

The package combines

- shrinkage covariance estimation,
- principal fitted components,
- information-complexity model selection,
- adaptive feature screening, and
- downstream predictive modelling

within a unified framework.

# Load package

```{r}
library(spfcICOMP)
```

# Simulate data

```{r}
set.seed(123)

sim <- simulate_spfc_continuous(
  n = 100,
  p = 50,
  d = 1,
  s = 5,
  rho_x = 0.5,
  snr = 2
)

X <- sim$X
y <- sim$y
```

# Fit SPFC

```{r}
fit <- spfc_fit(
  X = X,
  y = y,
  d = 1,
  ytype = "continuous",
  cov_method = "mec",
  nslices = 5,
  poly_degree = 2
)

fit
summary(fit)
```

# Extract estimated directions

```{r}
coef(fit)
```

# Obtain reduced scores

```{r}
scores <- fitted(fit)

head(scores)
```

# Predict new observations

```{r}
predict(
  fit,
  newdata = X[1:5, ]
)
```

# Structural dimension selection

```{r}
dsel <- spfc_select_dimension(
  X = X,
  y = y,
  d_grid = 1:3,
  cov_method = "mec",
  ytype = "continuous"
)

dsel$criteria
dsel$selected
```

# Feature screening

The default C1F-calibrated feature-screening rule uses the covariance of the fitted downstream reduced model. The reduced-space model is therefore fitted before C1F-based screening is applied.

```{r}
reduced_model <- fit_reduced_model(
  Z = scores,
  y = y,
  ytype = "continuous"
)

vsel <- spfc_select_variables(
  fit = fit,
  method = "adaptive_weighted_l1",
  selection_rule = "c1f",
  reduced_model = reduced_model
)

head(vsel)
```

# Benchmark covariance estimators

```{r}
bench <- benchmark_spfc(
  X = X,
  y = y,
  d = 1,
  methods = c(
    "mec",
    "oas",
    "sre",
    "sde",
    "cse"
  ),
  verbose = FALSE
)

bench
summary(bench)
```

# Simulation study

```{r}
results <- run_spfc_simulation(
  response_type = "continuous",
  nrep = 5,
  n = 100,
  p = 50,
  d = 1,
  s = 5,
  rho_x = 0.5,
  snr = 2,
  cov_methods = c(
    "mec",
    "oas"
  )
)

summary_results <-
  summarise_spfc_simulation(
    results
  )

summary_results
```

# Plotting

```{r}
plot_rmse_by_covariance(results)

plot_runtime_by_covariance(results)

plot_subspace_distance_by_covariance(results)
```

# References

Cook, R. D. and Forzani, L. (2008). Principal Fitted Components for dimension reduction in regression. *Statistical Science*, 23(4), 485--501. doi:10.1214/08-STS275.

Chen, Y., Wiesel, A., Eldar, Y. C. and Hero, A. O. (2010). Shrinkage algorithms for MMSE covariance estimation. *IEEE Transactions on Signal Processing*, 58(10), 5016--5029. doi:10.1109/TSP.2010.2053029.

Bozdogan, H. (2000). Akaike's Information Criterion and recent developments in information complexity. *Journal of Mathematical Psychology*, 44(1), 62--91. doi:10.1006/jmps.1999.1277.

Olorede, K. O. and Yahya, W. B. (2019). A new covariance estimator for sufficient dimension reduction in high-dimensional and undersized sample problems. *arXiv*. doi:10.48550/arXiv.1909.13017.
