Package: ackwards 0.1.1

Jeffrey M. Girard

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, then characterizes the hierarchy via between-level factor-score correlations computed via exact linear algebra (Waller, 2007, <doi:10.1016/j.jrp.2006.08.005>) or materialized scores. 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.1.1.tar.gz
ackwards_0.1.1.zip(r-4.7-any)
ackwards_0.1.1.tar.gz(r-4.7-any)ackwards_0.1.1.tar.gz(r-4.6-any)
ackwards_0.1.1.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://cran.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:

3.65 score 16 exports 8 dependencies

Last updated from:65b3be1a25. Checks:5 OK. Indexed: yes.

TargetResultTimeFilesSyslog
linux-devel-x86_64OK274
source / vignettesOK284
linux-release-x86_64OK280
windows-devel-x86_64OK212
wasm-releaseOK124

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 doesn't) | 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 | 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-07-24
Started: 2026-07-24

Choosing k: How Many Factors?
k is a decision, not an output | The five criteria | PA-PC — Parallel Analysis (PC basis) | PA-FA — Parallel Analysis (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 don't | A worked recommendation for the BFI | References

Last update: 2026-07-24
Started: 2026-07-24

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 | label_template() — generate the scaffold | Structural simplifications | primary_only = TRUE — show only primary-parent edges | 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-07-24
Started: 2026-07-24

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-07-24
Started: 2026-07-24

Introduction to Bass-Ackwards Analysis
The problem: which factor 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 — 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-07-24
Started: 2026-07-24

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-07-24
Started: 2026-07-24

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 — 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-07-24
Started: 2026-07-24

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-07-24
Started: 2026-07-24

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") | Structural artifact signals | Tuning the thresholds | Practical interpretation | References

Last update: 2026-07-24
Started: 2026-07-24

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