为什么GPArotation :: Varimax和stats :: varimax之间存在差异?

时间:2015-09-02 10:36:49

标签: r rotation pca psych

在R,GPArotation::Varimaxstats::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}})。

0 个答案:

没有答案