0

(至少)有两种不同的方法可以对 R 中的载荷矩阵进行 varimax-rotateGPArotation::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 是一个定义明确的自动旋转,应该产生完全相同的结果。

这些差异是预期的行为吗?

如何解释它们?

请注意,normalize = TRUE两者设置,因此(不存在)Kaiser 规范化考虑差异(认为它解释了来自内部psych::principal的差异)。

4

0 回答 0