PCA Questions on the principal() function of psych package I recently learned PCA and have the following questions on the use of principal() function of psych package:
From 20 variables I decided to keep 4 components / factors.


*

*I used principal() function with rotation="oblimin". Since the factors could be related, I wanted to see the correlations between factors. So should I use r.scores or Phi on my pc object? What's the difference between them? At least on my current pc object they both give the same output. I don't see the principal() function's documentation mentions about r.scores.

*When I don't extract any components, i.e., I specify nfactors = number of variables, and perform varimax roation and oblimin rotation I naturally get different factor loadings.
a) In both case, the sum of eigenvalues (SS loadings) is equal to the number of variables. What's the reason for having sum of eigenvalues equal to the number of variables?
b) For oblimin rotation, all 20 loadings for each factor as well as each variable are all zeros except one loading each which is 1. Basically each variable loads only on one factor. What's the rationale behind this?

*When I use the oblimin rotation and then print the pc object, the factor loading matrix is the pattern matrix. How can I get or compute the structure matrix? I read that I should compare these two matrices if I have used an oblique rotation method. What should I look for in these matrices?
 A: I realize this is quite old, but I thought I'd post in case someone else has this question. I noticed Question #4 hidden in your comments, and I have a solution, as I was running into this problem as well. After some playing around with the data, one possible issue is if you run your model on the correlation matrix instead of the raw data, that will produce the r.scores without a corresponding scores.
Take this as an example, using the bfi data from the psych package, which contains scores from a Big 5 personality measure:
library(tidyverse)
library(psych)

data(bfi)

#Clean the data by removing irrelevant data and lines missing data

bfi_trim = bfi %>% select(matches('^A[1-5]|^N'))
bfi_trim<-na.omit(bfi_trim)


raw.model<-principal(bfi_trim, nfactors = 5)

raw.model$scores

bfimatrix<-cor(bfi_trim)

matrix.model<-principal(bfimatrix, nfactors=5)

matrix.model$scores

I expect you will find for raw.model, you can obtain scores, and for the matrix.model you can only get r.scores, scores will come back NULL. Because you didn't include code I am not sure if this was the problem, but fixing this solved the issue for me!
