0
$\begingroup$

I ran PCA with the principal() function of the psych package on some data with 2 variables and 15 observations . I ran PCA thrice, first with no rotation, then with the varimax rotation, and lastly with the oblimin rotation. I didn't eliminate any factor/component and kept both factors/components. However, in all 3 cases my output was exactly the same. Why are the varimax and oblimin rotations ignored? Is it because I have only 2 variables? Or because the data is highly correlated?

Here is the code:

library(psych)
library(GPArotation)
dummyData <- read.csv("DummyPCAData.csv", header = TRUE)
r <- cor(dummyData)
#         Method1   Method2
# Method1 1.0000000 0.8870806
# Method2 0.8870806 1.0000000

# Run PCA with no roation and with both factors
pca1 <- principal(r, nfactors=2, rotate="none",n.obs=nrow(dummyData))
# Standardized loadings (pattern matrix) based upon correlation matrix
#         PC1   PC2   h2  u2    com
# Method1 0.97 -0.24  1 2.2e-16 1.1
# Method2 0.97  0.24  1 2.2e-16 1.1
#                       PC1  PC2
# SS loadings           1.89 0.11
# Proportion Var        0.94 0.06
# Cumulative Var        0.94 1.00
# Proportion Explained  0.94 0.06
# Cumulative Proportion 0.94 1.00

# PCA with varimax rotation with both factors
pca2 <- principal(r, nfactors=2, rotate="varimax", n.obs=nrow(dummyData))
# Standardized loadings (pattern matrix) based upon correlation matrix
#         RC1   RC2   h2   u2   com
# Method1 0.97 -0.24  1 2.2e-16 1.1
# Method2 0.97  0.24  1 2.2e-16 1.1
#                        RC1  RC2
# SS loadings           1.89 0.11
# Proportion Var        0.94 0.06
# Cumulative Var        0.94 1.00
# Proportion Explained  0.94 0.06
# Cumulative Proportion 0.94 1.00

# PCA with oblimin rotation with both factors
pca3 <- principal(r, nfactors=2, rotate="oblimin", n.obs=nrow(dummyData))
# Standardized loadings (pattern matrix) based upon correlation matrix
#         TC1   TC2  h2   u2    com
# Method1 0.97 -0.24  1 2.2e-16 1.1
# Method2 0.97  0.24  1 2.2e-16 1.1
#                       TC1  TC2
# SS loadings           1.89 0.11
# Proportion Var        0.94 0.06
# Cumulative Var        0.94 1.00
# Proportion Explained  0.94 0.06
# Cumulative Proportion 0.94 1.00
# With component correlations of 
#      TC1 TC2
# TC1   1   0
# TC2   0   1
$\endgroup$
4
  • 1
    $\begingroup$ You only have two dimensions and you have standardized them: this forces the ellipsoid to be inscribed in the unit square, so its axes are always going to be the diagonals of the square. See stats.stackexchange.com/a/71303/919 for illustrations. $\endgroup$ – whuber May 5 '20 at 15:26
  • $\begingroup$ @whuber Thanks, I reviewed the article--and I didn't understood everything but still-- I didn't get how that is linked to my question. Do you mean that whenever PCA is performed on 2 standardized variables (i.e., on a correlation matrix) the rotation ('none', 'variamx', or 'oblimin') doesn't matter? $\endgroup$ – Dicky May 7 '20 at 18:12
  • $\begingroup$ When PCA is performed on two standardized variables the only result it will return is related to how skinny the ellipse is. The ellipse will always be inscribed in a standard square. Thus, there's never anything to rotate. Things get interesting only in 3 or more dimensions. $\endgroup$ – whuber May 7 '20 at 18:15
  • $\begingroup$ @whuber I think the principal() function takes a correlation matrix as input and so the variables will always be standardized. I am not sure if it's feasible to pass a covariance matrix or raw data to the principal() function--maybe with the 'covar' parameter--but even then principal() function will convert it to a correlation matrix. So is there a way I can test the effect of rotations on 2 variables using the principal() function? $\endgroup$ – Dicky May 7 '20 at 18:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.