已经使用SPSS多年了,现在我想切换到R。为了保持发现的一致性,我想在R中复制以前的SPSS结果。我不是统计学家,而且我在学习R方面是个新手。在SPSS和R中使用Equamax旋转可以获得与PCA相同的结果。所需的输出应包括:
一个“不错”的旋转分量矩阵(对角线没有得分)
得分。
为了重新创建示例,我做了以下操作:
#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中,之后仅使用对角线进行排序(当然,建议更改方式) 。 我不清楚两件事:
为什么对角线“前进”在SPSS中不在时会产生负向载荷?
由于PCA0 $得分与SPSS中的FAC得分不对应,如何像SPSS中那样获得每个观测值的个体回归得分?