random initial values for rotation matrix in GPA rotations
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 45/100
Research direction
Start in factor_analyzer/rotator.py at Rotator._oblique, Rotator._orthogonal, and Rotator._varimax, then check the other rotation methods for the same initialization. Verify the current identity-matrix behavior, define how random_state controls orthogonal initialization, and confirm that the default remains unchanged.
Written by the indexing model from the issue text.
Description
Hi all. First, thanks so much to the devs of factor_analyzer. It's a fantastic and much needed package!
Is your feature request related to a problem? Please describe.
As has been pointed out, the GPA rotation methods often converge to local minima (Browne, 2001; Bernaards & Jennrich, 2005; Nguyen & Waller, 2022). As such, it's been recommended researchers initialize the GPA from many starting values when searching for a global minimum. I'm wondering if the Rotator class could be amended in order to allow initializing the GPA from different starting values.
Describe the solution you'd like
One simple solution would be for the Rotator class to accept a new argument, random_state, which defaults to None. When random_state = None, the rotation matrix is initialized with np.eye(n_cols) as is currently implemented (L326, L416, L493). When a user specifies a seed, however, the rotation matrix is initialized as a random orthogonal matrix from scipy.stats.ortho_group. That is,:
# initialize the rotation matrix
_, n_cols = loadings.shape
if self.random_state == None:
rotation_matrix = np.eye(n_cols)
else:
rotation_matrix = sp.stats.ortho_group(dim=n_cols, seed=self.random_state).rvs()
A solution like the above could be added to the Rotator._oblique, Rotator._orthogonal, Rotator._varimax methods (and any others that I missed).
Apologies in advance if the above is already possible and I've simply missed how. If the above sounds like it may be useful, I'd be happy to attempt a PR.
All the best,
Sam (@szorowi1)
- Dominant language
- Python
- Stars
- 6
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EducationalTestingService/factor_analyzer
-
Difficulty 1/5 Under an hour Newbie friendliness 55/100
EducationalTestingService/factor_analyzer#148 · 4 comments ·
-
Difficulty 1/5 Under an hour Newbie friendliness 55/100
EducationalTestingService/factor_analyzer#147 · 1 reaction ·
-
Order of variables when DF is fed to fit with CFA: either document or actually use the column names? Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
EducationalTestingService/factor_analyzer#146 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
EducationalTestingService/factor_analyzer#145 · 3 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 55/100
All issues in EducationalTestingService/factor_analyzer
Similar issues
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
canonical/paas-charm#368 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
tech debt
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
StevenBlack/hosts#3256 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
qualcomm/qai-appbuilder#275 ·