The EFA-Boosting algorithm is an iterative optimization procedure designed to find the optimal item configuration for exploratory factor analysis models. It combines multiple fit indices into an adaptive composite score that adjusts based on model complexity and sample size.
The algorithm starts by fitting an initial EFA model with all items
using the package’s internal EFA engine, which fits the
efa() block syntax of lavaan with the requested estimator
and rotation.
At each iteration, the algorithm checks for:
Two search strategies are available:
Removes one problematic item at a time based on priority: 1. Heywood cases 2. Near-Heywood cases 3. Cross-loadings 4. Lowest adaptive fit contribution
Evaluates all possible combinations of removing 1 to
global_max_remove items simultaneously, selecting the
combination that produces the best adaptive composite fit.
The composite fit is calculated as:
Composite = (w_RMSEA × RMSEA_norm) + (w_SRMR × SRMR_norm) + (w_CFI × CFI_inv)
Where weights are adapted based on df × N following Kenny & McCoach (2003) and Shi et al. (2019).
The algorithm stops when: - All fit targets are met (RMSEA, SRMR, CFI) - Minimum items per factor constraint is reached - Maximum iterations exceeded - No improvement possible
result <- efa_boosting(
data = Data_Personality,
name_items = "item",
n_factors = 5,
rotation = "oblimin",
target_RMSEA = 0.05,
target_SRMR = 0.05,
target_CFI = 0.95,
min_loading = 0.40,
cross_loading_threshold = 0.32,
min_items_per_factor = 3,
global_search = TRUE,
global_max_remove = 3,
verbose = TRUE
)| Parameter | Default | Description |
|---|---|---|
data |
- | Data frame with items |
name_items |
- | Prefix of item columns |
n_factors |
- | Number of factors to extract |
rotation |
“oblimin” | Rotation method |
target_RMSEA |
0.06 | Target RMSEA value |
target_SRMR |
0.06 | Target SRMR value |
target_CFI |
0.95 | Target CFI value |
min_loading |
0.40 | Minimum acceptable loading |
cross_loading_threshold |
0.32 | Cross-loading threshold |
min_items_per_factor |
3 | Minimum items per factor |
global_search |
FALSE | Enable global search |
global_max_remove |
2 | Max items in global search |
use_gpt |
FALSE | Enable AI analysis |
verbose |
TRUE | Print progress |
The function returns a list containing:
final_structure: Final factor loadings matrixfit_indices: Final fit indicesremoved_items: List of removed items with reasonsiteration_history: Details of each iterationconceptual_analysis: AI analysis (if enabled)