在一个相关问题stats::varimax
中,我询问了为什么和之间存在差异GPArotation::Varimax
,这两个psych::principal
调用取决于为 设置的选项rotate =
。
这两者之间的差异(参见其他问题)解释了与psych::principal
. 似乎这些差异会以某种方式加剧。psych::principal
(我有一个简单的理论为什么,我想得到证实)。
library(GPArotation)
library(psych)
data("Thurstone")
principal.unrotated <- principal(r = Thurstone, nfactors = 4, rotate = "none") # find unrotated PCs first
loa <- unclass(principal.unrotated$loadings)
# just to compare that the rot.mat is correct
varimax.stats <- stats::varimax(x = loa, normalize = TRUE)
varimax.GPA <- GPArotation::Varimax(L = loa, normalize = TRUE)
# notice we're here NOT interested in the difference between stats and GPA, that's the other question
diff.from.rot.meth <- unclass(varimax.stats$loadings - varimax.GPA$loadings) # very small differences, see this question: https://stackoverflow.com/questions/32350891/why-are-there-differences-between-gparotationvarimax-and-statsvarimax
mean(abs(diff.from.rot.meth))
#> [1] 8.036863e-05
principal.varimax.stats <- principal(r = Thurstone, nfactors = 4, rotate = "varimax")
principal.Varimax.GPA <- principal(r = Thurstone, nfactors = 4, rotate = "Varimax")
diff.from.princ <- principal.Varimax.GPA$rot.mat - principal.varimax.stats$rot.mat # quite a substantial change, because Theta is NOT a rotmat, that makes sense
mean(abs(diff.from.princ))
#> [1] 0.021233
mean(abs(diff.from.rot.meth)) - mean(abs(diff.from.princ)) # principal has MUCH bigger differences
#> [1] -0.02115263
对于浮点伪像或其他东西来说,这似乎太大了。
我的假设是(额外的)差异源于默认为 (Kaiser) 的事实GPArotation::Varimax
,normalize == FALSE
而 **stats::varimax
默认为 (Kaiser)normalize == TRUE
,不能在 `principal::psych` 中进行不同的设置。
stats::varimax
手动的:
## varimax with normalize = TRUE is the default
GPArotation::Varimax
/GPArotation::GPForth
手册:
参数 normalize 指示是否以及如何在旋转之前进行任何规范化,然后在旋转后撤消。如果 normalize 为 FALSE(默认值),则不进行标准化。如果 normalize 为 TRUE,则完成 Kaiser 标准化。(所以归一化 A 的平方行条目总和为 1.0。这有时称为 Horst 归一化。)
此外,他们psych::Kaiser
手动警告:
GPARotation 包(默认情况下)不规范化,fa 函数也不规范化。然后,为了更容易混淆,stats 中的 varimax 确实如此,而 GPARotation 中的 Varimax 则没有。
任何人都可以确认差异实际上是由标准化选项解释的吗?