psych :: principal - 对旋转(主要)组件的顺序和命名的解释

时间:2013-06-03 12:40:53

标签: r pca

x成为样本数据框。

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

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

> 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

使用varimax标准旋转te PCA解决方案会生成现在名为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.仍然按照SS的份额排序。由于旋转正交,我不明白这一点。 RC名称的顺序传达了哪些有用的额外信息?或者如果旋转是正交的,我认为顺序是任意的是错误的吗?

谢谢!

2 个答案:

答案 0 :(得分: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以反映它们被旋转),但是当旋转到RC4时,PC4的变化已经改变,现在吸收更多的方差。 (对于PC3和PC4也是如此,但不是很清楚。)

我要做的是表示旋转时会发生什么。 PC1旋转到更简单的结构,变成RC1。

然后,因为许多人喜欢按方差的顺序排列他们的组件,我按特征值排序(求和的平方和)。

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

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

比尔

答案 1 :(得分:3)

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

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

因此,上面的代码是订单更改的原因,但不太明确的是什么目的。我没有足够的旋转经验来辨别包装作者的意图。