4

让我们x成为一个示例数据框。

set.seed(0)
x <- replicate(4, rnorm(10))

principal使用包中的函数的 PCApsych将产生:

> principal(x, nf=4, rotate="none")
...
                       PC1  PC2  PC3  PC4
SS loadings           1.91 1.09 0.68 0.31
Proportion Var        0.48 0.27 0.17 0.08
Cumulative Var        0.48 0.75 0.92 1.00
Proportion Explained  0.48 0.27 0.17 0.08
Cumulative Proportion 0.48 0.75 0.92 1.00

使用该标准旋转 PCA 解决方案会varimax产生新的组件,现在命名RCi以指示 PC 已旋转(因此,它们不再是 PC)。

> principal(x, nf=4, rotate="varimax")
...
                       RC4  RC3  RC2  RC1
SS loadings           1.03 1.02 1.00 0.95
Proportion Var        0.26 0.26 0.25 0.24
Cumulative Var        0.26 0.51 0.76 1.00
Proportion Explained  0.26 0.26 0.25 0.24
Cumulative Proportion 0.26 0.51 0.76 1.00

我的问题:为什么现在的顺序RC4RC1数字从 4 减少到 1。RC 仍然根据其在 SS 中的份额进行排序。由于旋转是正交的,我不明白这一点。RC 名称的顺序传达了哪些有用的额外信息?或者如果旋转是正交的,我是否错误地认为顺序是任意的?

谢谢!

4

2 回答 2

4

马克,逻辑是识别旋转的作用。这更多是出于教学原因而不是其他原因。我试图展示原始组件与旋转组件的关系。举个例子,看看负载,而不仅仅是考虑的差异。

unrotated:

    PC1   PC2   PC3   PC4 h2       u2
1 -0.77 -0.40  0.39  0.32  1 -6.7e-16
2  0.71 -0.28  0.63 -0.17  1  6.7e-16
3 -0.10  0.93  0.35  0.09  1  6.7e-16
4  0.90 -0.02 -0.13  0.42  1  2.2e-16

Rotated:
    RC4   RC3   RC2   RC1 h2       u2
1  0.95 -0.10 -0.08 -0.29  1 -6.7e-16
2 -0.10  0.97 -0.06  0.22  1  6.7e-16
3 -0.07 -0.06  0.99 -0.05  1  6.7e-16
4 -0.34  0.27 -0.07  0.90  1  2.2e-16

尤其是变量 3 和 4。在未旋转的解中,它们分别定义了 PC2 和 PC1。现在看看旋转的解决方案。这两个仍然标记 PC2 和 PC1(并标记为 RC2 和 RC1 以反映它们已旋转),但是当 PC4 旋转到 RC4 时,所考虑的差异已经改变,现在吸收了更多的差异。(PC3 和 PC4 也是如此,但不是很清楚。)

我想要做的是代表你旋转时发生的事情。PC1 旋转为更简单的结构,成为 RC1。

然后,因为许多人喜欢按方差顺序计算其分量,所以我按特征值排序(考虑和平方)。

我相信其他程序所做的是旋转和重新标记,以便组件始终称为 C1 ... Cn。我只是想看看组件是从哪里来的。

如果您认为它有用,我可以(最终)将此讨论添加到 principal 和 fa 的文档中。

账单

于 2013-06-09T16:12:40.297 回答
3

这是部分答案。我查看了函数背后的代码principal,可以清楚地看到重新排序发生的位置:

 if (nfactors > 1) {
    ev.rotated <- diag(t(loadings) %*% loadings)
    ev.order <- order(ev.rotated, decreasing = TRUE)
    loadings <- loadings[, ev.order]
  }

所以上面的代码是订单改变的原因,但它的目的是什么就不太清楚了。我没有足够的轮换经验来辨别包作者的意图。

于 2013-06-07T20:26:45.527 回答