Package: ackwards 0.2.0.9000

ackwards: Bass-Ackwards Hierarchical Structural Analysis

Implements Goldberg's (2006) <doi:10.1016/j.jrp.2006.01.001> bass-ackwards method and modern descendants for hierarchical structural analysis. Extracts solutions from 1 to k factors using principal component analysis (PCA), exploratory factor analysis (EFA), or exploratory structural equation modeling (ESEM) engines. It then describes the hierarchy through the correlations between the factor scores of different levels. It computes them with linear algebra from the scoring weights and the correlation matrix the fit uses, so they are exact for that matrix. Waller (2007) <doi:10.1016/j.jrp.2006.08.005> showed, for principal components, that these correlations follow from the correlation matrix alone. Includes the Forbes (2023) <doi:10.1037/met0000546> extension for redundancy pruning and all-levels cross-correlations.

Authors:Jeffrey M. Girard [aut, cre], Miriam K. Forbes [cph]

ackwards_0.2.0.9000.tar.gz
ackwards_0.2.0.9000.zip(r-4.7-any)ackwards_0.2.0.9000.zip(r-4.6-any)ackwards_0.2.0.9000.zip(r-4.5-any)
ackwards_0.2.0.9000.tgz(r-4.6-any)ackwards_0.2.0.9000.tgz(r-4.5-any)
ackwards_0.2.0.9000.tar.gz(r-4.7-any)ackwards_0.2.0.9000.tar.gz(r-4.6-any)
ackwards_0.2.0.9000.tgz(r-4.6-emscripten)
manual.pdf |manual.html✨
DESCRIPTION |NEWS
card.svg |card.png
ackwards/json (API)

# Install 'ackwards' in R:
install.packages('ackwards', repos = c('https://jmgirard.r-universe.dev', 'https://cloud.r-project.org'))

Bug tracker:https://github.com/jmgirard/ackwards/issues

Pkgdown/docs site:https://jmgirard.github.io

Datasets:
  • bfi25 - Big Five Inventory: 25-item IPIP example dataset
  • forbes2023 - Assessing Mental Health symptom correlation matrix
  • sim16 - Simulated continuous bass-ackwards teaching example

On CRAN:

Conda:

6.96 score 8 stars 23 scripts 489 downloads 16 exports 8 dependencies

Last updated from:51368d3c5a. Checks:9 OK. Indexed: yes.

TargetResultTimeFilesSyslog
linux-develOK274
source / vignettesOK244
linux-releaseOK348
macos-releaseOK288
macos-oldrelOK167
windows-develOK348
windows-releaseOK258
windows-oldrelOK322
wasm-releaseOK111

Exports:ackwardsaugmentautoplotba_layoutboot_edgescheck_itemscomparabilityfactor_labelsfactorabilityglancelabel_templatepruneset_factor_labelssuggest_ktidytop_items

Dependencies:cligenericsGPArotationlatticemnormtnlmepsychrlang

Choosing an Engine: PCA, EFA, and ESEM
The three engines at a glance | Setup | PCA: components from total variance | EFA: factors from common variance | How close are EFA and PCA loadings? | ESEM: EFA with full model diagnostics | Loading standard errors and confidence intervals | Per-level fit: what it tells you (and what it does not) | The key distinction | Reporting fit with tidy() and autoplot() | Should you care about fit in a bass-ackwards workflow? | How much do the edges differ? | Choosing an engine | Orthogonal or oblique rotation | Varimax and oblimin on the same data | How to decide | Missing data | FIML for continuous PCA/EFA | Which option to use? | Correlation-matrix input | Constraints | suggest_k() with a correlation matrix | Performance with many items (ESEM) | References

Last update: 2026-10-02
Started: 2026-06-27

Introduction to Bass-Ackwards Analysis
The problem: which solution is right? | Data | Step 1: How many factors? suggest_k() | Step 2: Fit the hierarchy ackwards() | Step 3: Summarize the result | High-level summary | Step 4: Visualize the hierarchy autoplot() | Adjusting the diagram | Step 5: Dig into the factors tidy() | Reading each factor with top_items() | Factor loadings (tidy) | Between-level edges | Variance explained | Step 6: Score observations augment() | Using scores for downstream analysis | Scoring new data (train/test) | Summary: the basic toolkit | Next steps | References

Last update: 2026-10-01
Started: 2026-06-27

Ordinal Data: Polychoric Correlations and WLSMV
Why Pearson underestimates for ordinal items | The polychoric solution | Automatic detection | Seeing the difference | Correlation matrices | Loadings | Between-level edges | WLSMV for ESEM with ordinal items | Practical guidance: when to use polychoric | References

Last update: 2026-10-01
Started: 2026-06-27

Replicability-Gated Hierarchies: A Recommended Workflow
The problem: depth is where bass-ackwards analyses go wrong | Three verbs, three different questions | Setup | Step 1: Screen the plausible depth range with suggest_k() | Step 2: Gate the depth on replicability with comparability() | Step 3: Fit the hierarchy to the gated depth | Step 4: Find what perpetuates without differentiating, with prune() | How sure are we about these edges? boot_edges() | Step 5: Interpret with the built-in guardrails | Step 6: Validate downstream, out of sample | Common mistakes this workflow prevents | Summary: the workflow in six calls | References

Last update: 2026-10-01
Started: 2026-07-02

The Forbes Extension: Skip-Level Connections and Pruning
The limitation of adjacent-only edges | Setup | Computing every between-level correlation with pairs = "all" | Reading the skip-level edge table | Reading the strongest edge with care | Pruning: identifying redundant factors | Chains of near-identical factors with prune(x, "redundant") | The pruned-factor diagram | Inspecting structural similarity with prune(x, "artifact") | The near-redundant band | Structural artifact signals | Tuning the thresholds | Practical interpretation | References

Last update: 2026-10-01
Started: 2026-06-27

Choosing k: How Many Factors?
k is a decision, not an output | The five criteria | PA-PC: parallel analysis on the PC basis | PA-FA: parallel analysis on the FA basis | MAP: minimum average partial | VSS-1 and VSS-2: very simple structure | CD: comparison data | Summary table | Running suggest_k() | The diagnostic plot | Matching the criterion to your engine | The arguments | criteria: which criteria to compute | cor: correlation basis | n_iter: Monte Carlo iterations | seed: reproducibility | k_max: ceiling for the search | When the criteria agree, and when they do not | A worked recommendation for the BFI | References

Last update: 2026-09-16
Started: 2026-06-28

Customizing the Hierarchy Diagram
Setup | Encoding sign and magnitude | sign_by: how direction is shown | magnitude_by: how |r| is shown | Filtering edges | cut_show: minimum |r| to display | Edge colors | color_pos / color_neg: custom direction colors | Monochrome mode | mono = TRUE: a black-and-white convenience wrapper | Correlation labels | show_r / r_digits: annotate edges with r values | Node labels | node_labels: rename individual factors | node_width / node_height: size individual boxes to fit a label | label_template(): generate the scaffold | Item content | show_items: list the items under the deepest-level factors | Structural simplifications | primary_only = TRUE: show only primary-parent edges | order: arrange the deepest level by hand | drop_pruned + show_secondary: the pruned view and its hidden correlations | Level labels | show_level_labels / level_label_size | Arrowheads | show_arrows = FALSE: plain line ends | Edge width | edge_linewidth: uniform vs. |r|-scaled width | Layout orientation | direction = "horizontal": left-to-right layout | Legend | legend = FALSE: suppress all guides | Worked example: publication-ready figure | Saving plots | Diagnostic scree / criteria plot: autoplot.suggest_k() | References

Last update: 2026-09-16
Started: 2026-06-28

Reproducing Forbes (2023): The AMH Applied Example
The data | Fitting the 10-level hierarchy | Skip-level structure | The redundancy chase | A chain, worked | Why the direct criterion matters here | The pruned-factor diagram | Fidelity | References

Last update: 2026-09-16
Started: 2026-07-16

Interpreting and Labeling Factors
Reading a factor with top_items() | Cross-loadings are signal | Showing item wording instead of codes | The sign convention: negative does not mean "low" | Naming in a hierarchy | Borrowing names for the upper levels | Applying your names | Making the names stick with set_factor_labels() | The Forbes letter convention | Starting from a blank slate | References

Last update: 2026-09-16
Started: 2026-06-29

Readme and manuals

Help Manual

Help pageTopics
Bass-ackwards hierarchical structural analysisackwards
Augment data with factor scores from an ackwards objectaugment.ackwards
autoplot genericautoplot
Plot a bass-ackwards diagram or per-level fit index chartautoplot.ackwards plot.ackwards
Plot a comparability diagnosticautoplot.comparability
Plot a suggest_k diagnosticautoplot.suggest_k
Compute a layered layout for a bass-ackwards diagramba_layout
Big Five Inventory: 25-item IPIP example datasetbfi25
Bootstrap confidence intervals for between-level edgesboot_edges boot_edges.ackwards
Screen items for problems before factor analysischeck_items
Split-half factor comparabilitycomparability
Read the factor labels stored on an ackwards objectfactor_labels
Screen a dataset for factorability and sampling adequacyfactorability
Assessing Mental Health symptom correlation matrix (Forbes 2023 applied example)forbes2023
Glance at an ackwards objectglance.ackwards
Generate a node-label scaffold for autoplotlabel_template print.ackwards_labels
Score new observations with a fitted ackwards modelpredict.ackwards
Print an ackwards objectprint.ackwards
Print an item quality checkprint.check_items
Print a comparability objectprint.comparability
Print a factorability screenprint.factorability
Print a suggest_k objectprint.suggest_k
Print a summary_ackwards objectprint.summary_ackwards
Print a top_items objectprint.top_items
Flag redundant or artifactual factors (Forbes 2023 extension)prune prune.ackwards
Attach persistent factor labels to an ackwards objectset_factor_labels
Simulated continuous bass-ackwards teaching example (16 items, known hierarchy)sim16
Suggest a maximum number of factors for bass-ackwards analysissuggest_k
Summarise an ackwards objectsummary.ackwards
Tidy an ackwards object into a long data frametidy.ackwards
Display the salient items for each factortop_items