R中Equamax旋转的SPSS PCA复制结果

时间:2019-02-18 21:15:40

标签: r pca spss

已经使用SPSS多年了,现在我想切换到R。为了保持发现的一致性,我想在R中复制以前的SPSS结果。我不是统计学家,而且我在学习R方面是个新手。在SPSS和R中使用Equamax旋转可以获得与PCA相同的结果。所需的输出应包括:

  1. 一个“不错”的旋转分量矩阵(对角线没有得分)

  2. 每个观察的
  3. 得分。

为了重新创建示例,我做了以下操作:

#Open the Chatterjee-Price Attitude Data
df <- attitude[,-1]
df <- as.data.frame(scale(df))

#Write to SPSS file
library(haven)   
write_sav(df, "Attitude scaled.sav")

#Run SPSS syntax
#* Encoding: UTF-8.
#FACTOR
#  /VARIABLES 
# complaints privileges learning raises critical advance
#  /MISSING
#  LISTWISE /ANALYSIS 
# complaints privileges learning raises critical advance
#  /PRINT ROTATION
#  /FORMAT SORT BLANK(.40)
#  /CRITERIA FACTORS(6) ITERATE(1000)
#  /EXTRACTION PC
#  /CRITERIA ITERATE(1000)
#  /ROTATION EQUAMAX
#  /SAVE REG(ALL)
# /METHOD=CORRELATION .

这将在SPSS中产生所需的旋转分量矩阵和因子得分。 不幸的是,我不允许发布图像,但是对角线显示为:

advance 0.926
privileges 0.931
critical 0.981
complaints 0.873
learning 0.869
raises 0.819

第一次观察的六个分数是:

FAC1_1  0.55904
FAC2_1  -1.81149
FAC3_1  1.86281
FAC4_1  -0.54449
FAC5_1  -1.26223
FAC6_1 -0.09140

感谢this的发布,我已经能够在R中获得非常相似的结果:

library(psych)
library(GPArotation)
PCA0 <- principal(df, rotate='none', nfactors=6) #PCA by psych
PCA.EQ <- cfT(PCA0$loadings, kappa=0.5, normalize=TRUE)
rotmatrix_cft <- PCA.EQ$loadings
rotmatrix_cft[abs(rotmatrix_cft)<0.4] <- "" #Supressing low values for clarity
rotmatrix_cft <- dfOrder(rotmatrix_cft, -(1:6)) #Sorting the diagonal

我可以理解为什么SPSS和R之间PC的顺序不同,因为SPSS在处理过程中使用所有分数进行排序,而在RI中,之后仅使用对角线进行排序(当然,建议更改方式) 。 我不清楚两件事:

  1. 为什么对角线“前进”在SPSS中不在时会产生负向载荷?

  2. 由于PCA0 $得分与SPSS中的FAC得分不对应,如何像SPSS中那样获得每个观测值的个体回归得分?

0 个答案:

没有答案