0

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
kjetil b halvorsen
  • 63,378
  • 26
  • 142
  • 467
Dicky
  • 21
  • 1
  • 1
    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 https://stats.stackexchange.com/a/71303/919 for illustrations. – whuber May 05 '20 at 15:26
  • @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? – Dicky May 07 '20 at 18:12
  • 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. – whuber May 07 '20 at 18:15
  • @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? – Dicky May 07 '20 at 18:17

0 Answers0