FAPA implements a metric inferential framework for pattern detection and person-level reconstruction in multivariate profile data. After removing overall profile elevation via row-centering (ipsatization), FAPA applies singular value decomposition (SVD) to recover shared core profiles and individual pattern weights, and provides a unified three-stage bootstrap verification framework.
Many existing approaches to profile analysis — including PCA applied
to ipsatized data — lack an integrated, workflow-level treatment of
dimensionality selection, subspace stability, and profile replicability.
FAPA addresses this by combining well-validated tools (Horn’s parallel
analysis, Procrustes principal angles, Tucker’s congruence coefficients,
BCa bootstrap CIs via the boot package) into a coherent,
reproducible pipeline designed specifically around the ipsatized
structure of the data.
| Stage | Method | Criterion |
|---|---|---|
| 1 | Horn’s parallel analysis (variance-matched) | Retain components where σ²_k exceeds the (1−α) quantile of a variance-matched null |
| 2 | Procrustes / principal angles | All K principal angles < 30° across bootstrap resamples |
| 3 | Tucker’s congruence coefficients | Mean CC ≥ 0.85 (fair) or ≥ 0.95 (high) per Lorenzo-Seva & ten Berge (2006) |
# Install from GitHub (development version):
# install.packages("remotes")
remotes::install_github("sekangakim/FAPA")library(FAPA)
# 1. Load and ipsatize
dat <- load_and_ipsatize("Calibration.csv", col_labels = paste0("V", 1:22))
Xtilde <- dat$ipsatized
# 2. Stage 1: parallel analysis
pa <- fapa_pa(Xtilde, B = 2000, seed = 1)
print_pa(pa)
K <- pa$n_retain
# 3. Core solution
fit <- fapa_core(Xtilde, K = K)
# 4. Stages 2 & 3: stability and replicability
pr <- fapa_procrustes(Xtilde, K = K + 3, B = 2000, seed = 1)
tc <- fapa_tucker(Xtilde, K = K + 3, B = 2000, seed = 1)
print_procrustes(pr, K_pa = K)
print_tucker(tc, cc_thresh = 0.85, K_pa = K)
# 5. BCa confidence intervals
bca <- fapa_bca(Xtilde, K = K, B = 2000, seed = 1)
plot_fapa_core(bca, i = 1, split_at = 11)
# 6. Person-level reconstruction
prs <- fapa_person(Xtilde, fit, participants = 1:5, seed = 1)
cat(sprintf("Mean R² = %.4f\n", prs$R2_mean))See vignette("fapa_example", package = "FAPA") for a
fully documented walkthrough using EDI-2 eating-disorder symptom
data.
| Function | Description |
|---|---|
load_and_ipsatize() |
Load CSV and row-centre |
fapa_core() |
SVD-based core profile estimation |
fapa_pa() |
Stage 1: variance-matched parallel analysis |
fapa_procrustes() |
Stage 2: subspace stability via principal angles |
fapa_tucker() |
Stage 3: Tucker’s congruence coefficients |
fapa_bca() |
BCa bootstrap CIs for core profiles |
fapa_person() |
Person-level reconstruction and weights |
print_pa/procrustes/tucker() |
Formatted console summaries |
plot_fapa_core() |
Core profile with BCa CI bands |
plot_pa_scree() |
PA scree plot |
plot_principal_angles() |
Stage 2 angle distributions |
plot_tucker_cc() |
Stage 3 CC distributions |
write_fapa_results() |
Write core-profile CSVs |
write_verification() |
Write three-stage verification CSVs |
If you use FAPA in your research, please cite the accompanying manuscript:
Kim, S.-K. (in preparation). Factor Analytic Profile Analysis of Ipsatized Data (FAPA): An inferential framework for pattern detection and person reconstruction.
and the software:
Kim, S.-K. (2026). FAPA: Factor Analytic Profile Analysis of Ipsatized Data. R package version 0.1.0. https://github.com/sekangakim/FAPA
MIT © Se-Kang Kim