在R,GPArotation::Varimax
和stats::varimax
中,有(至少)两种不同的方式来旋转加载矩阵。
奇怪的是,即使两者都启用了Kaiser-Normalization,它们也会产生微妙的结果。
这对测试来说有点痛苦。
library(GPArotation)
library(psych)
data("Thurstone")
principal.unrotated <- principal(r = Thurstone, nfactors = 4, rotate = "none") # find unrotated PCs first
loa <- unclass(principal.unrotated$loadings)
varimax.stats <- stats::varimax(x = loa, normalize = TRUE)
varimax.GPA <- GPArotation::Varimax(L = loa, normalize = TRUE)
unclass(varimax.stats$loadings) - unclass(varimax.GPA$loadings) # small differences
#> PC1 PC2 PC3 PC4
#> Sentences -6.158219e-05 1.978395e-05 2.507685e-04 -1.901896e-06
#> Vocabulary -5.381439e-05 2.066220e-05 2.507735e-04 8.781259e-06
#> Sent.Completion -5.209981e-05 2.127085e-05 2.469213e-04 4.052756e-06
#> First.Letters -1.096117e-04 -1.206990e-06 1.043846e-04 3.892283e-05
#> 4.Letter.Words -1.272682e-04 -6.622974e-06 9.323033e-05 2.852347e-05
#> Suffixes -3.135108e-05 -7.443932e-06 1.258813e-04 6.922436e-05
#> Letter.Series -1.960431e-04 -5.694846e-05 1.031590e-04 -5.951437e-05
#> Pedigrees -8.587490e-05 -6.325140e-05 1.779604e-04 -1.750454e-05
#> Letter.Group -2.335317e-04 -3.802961e-05 6.190849e-05 -6.346030e-05
varimax.stats$rotmat - varimax.GPA$Th # small differences
#> [,1] [,2] [,3] [,4]
#> [1,] -1.380279e-04 -1.380042e-05 2.214319e-04 2.279170e-06
#> [2,] -9.631517e-05 -2.391296e-05 -1.531723e-04 3.371868e-05
#> [3,] -1.758299e-04 -7.917460e-05 -6.788867e-05 -1.099072e-04
#> [4,] 9.548010e-05 -6.500162e-05 1.679753e-05 5.213475e-05
当然,这些差异并不大 - 但它们似乎太大而不仅仅是浮点人工制品。
我认为varimax是一个明确定义的自动旋转,应该能够产生精确相同的结果。
这些差异是否符合预期行为?
如何解释?
请注意,为{em>两者设置了normalize = TRUE
,因此(缺席)Kaiser规范化不会解释差异(认为它考虑了{ {3}})。