Skip to content

Correct communalities for oblique rotations - #150

Open
dnncha wants to merge 2 commits into
EducationalTestingService:mainfrom
dnncha:fix/oblique-communalities
Open

dnncha wants to merge 2 commits into
EducationalTestingService:mainfrom
dnncha:fix/oblique-communalities

Conversation

@dnncha

@dnncha dnncha commented Sep 27, 2026

Copy link
Copy Markdown

An oblique rotation should not change how much of each item the factor model explains. get_communalities() ignores factor correlations, so it can report impossible negative uniquenesses.

Example

On the bundled 2,571-row questionnaire, a 3-factor promax model reports communality 1.103082 for one item (uniqueness −0.103082). Using the model’s structure matrix gives 0.590760 (uniqueness 0.409240). The maximum item error is 0.512322.

Fix

For oblique rotations, compute row_sum(pattern * structure); retain squared loadings for orthogonal rotations. The regression checks that promax preserves the unrotated model-implied communalities.

The full 102-test suite passes. Corrected values match the repository’s R psych fixture within 2.2e-6.

Evidence and exact commands: https://cheerfulduck.com/research/audits/factor-analyzer-oblique-communalities

Limits

This changes communalities, uniquenesses, and reduced-matrix eigenvalues, not fitted loadings or scores. No changed published conclusion was identified. No exact prior report was found after bounded issue/PR searches.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant