Stata中主成分分析的varimax旋转的奇怪结果:旋转的成分都是零和一

机器算法验证 主成分分析 状态 因子轮换
2022-04-13 13:37:09

这是我Principal Component Analysis (PCA)使用 Stata 和相关矩阵的初始输出(因为输入的比例和测量单位不同):

Principal components/correlation                 Number of obs    =        350
                                                 Number of comp.  =          5
                                                 Trace            =          5
    Rotation: (unrotated = principal)            Rho              =     1.0000

    --------------------------------------------------------------------------
       Component |   Eigenvalue   Difference         Proportion   Cumulative
    -------------+------------------------------------------------------------
           Comp1 |      2.80769      1.79023             0.5615       0.5615
           Comp2 |      1.01746      .281177             0.2035       0.7650
           Comp3 |      .736282      .413602             0.1473       0.9123
           Comp4 |      .322679      .206788             0.0645       0.9768
           Comp5 |      .115892            .             0.0232       1.0000
    --------------------------------------------------------------------------

Principal components (eigenvectors) 

    ------------------------------------------------------------------------------
        Variable |    Comp1     Comp2     Comp3     Comp4     Comp5 | Unexplained 
    -------------+--------------------------------------------------+-------------
               A |   0.5627    0.0500   -0.1329   -0.2992   -0.7574 |           0 
               B |  -0.0466    0.9662   -0.2391    0.0725    0.0425 |           0 
               C |   0.5490   -0.0071   -0.1761   -0.5088    0.6393 |           0 
               D |   0.5036   -0.1168   -0.3114    0.7899    0.1091 |           0 
               E |   0.3552    0.2241    0.8928    0.1500    0.0628 |           0 
    ------------------------------------------------------------------------------

在正交旋转(Varimax)之后,我有这些输出:

Principal components/correlation                 Number of obs    =        350
                                                 Number of comp.  =          5
                                                 Trace            =          5
    Rotation: orthogonal varimax (Kaiser off)    Rho              =     1.0000

    --------------------------------------------------------------------------
       Component |     Variance   Difference         Proportion   Cumulative
    -------------+------------------------------------------------------------
           Comp1 |      1.00001  2.59031e-06             0.2000       0.2000
           Comp2 |            1  2.53877e-06             0.2000       0.4000
           Comp3 |            1  2.40356e-06             0.2000       0.6000
           Comp4 |      .999997  2.28153e-06             0.2000       0.8000
           Comp5 |      .999995            .             0.2000       1.0000
    --------------------------------------------------------------------------

Rotated components 

    ------------------------------------------------------------------------------
        Variable |    Comp1     Comp2     Comp3     Comp4     Comp5 | Unexplained 
    -------------+--------------------------------------------------+-------------
               A |   1.0000    0.0000   -0.0000    0.0000   -0.0000 |           0 
               B |   0.0000    0.0000    1.0000   -0.0000    0.0000 |           0 
               C |   0.0000    0.0000   -0.0000   -0.0000    1.0000 |           0 
               D |  -0.0000    0.0000    0.0000    1.0000    0.0000 |           0 
               E |  -0.0000    1.0000   -0.0000   -0.0000   -0.0000 |           0 
    ------------------------------------------------------------------------------

Component rotation matrix

    ----------------------------------------------------------------
                 |    Comp1     Comp2     Comp3     Comp4     Comp5 
    -------------+--------------------------------------------------
           Comp1 |   0.5627    0.3552   -0.0466    0.5036    0.5490 
           Comp2 |   0.0500    0.2241    0.9662   -0.1168   -0.0071 
           Comp3 |  -0.1329    0.8928   -0.2391   -0.3114   -0.1761 
           Comp4 |  -0.2992    0.1500    0.0725    0.7899   -0.5088 
           Comp5 |  -0.7574    0.0628    0.0425    0.1091    0.6393 
    ----------------------------------------------------------------

以下是几行数据集:

在此处输入图像描述

所有选项都是 Stata 默认选项,我们可以在这里看到:

在此处输入图像描述

为什么旋转后我们有奇怪的输出(特别是比例和累积方差和旋转分量)?如何在OrthogonalOblique旋转和旋转方法(VarimaxQuantimax)之间进行选择?有什么测试可以帮助选择方法吗?结果的问题是什么?

PS 1。

将最大组件数设置为 3 后,我得到以下结果:

Principal components/correlation                 Number of obs    =        350
                                                 Number of comp.  =          3
                                                 Trace            =          5
    Rotation: orthogonal varimax (Kaiser off)    Rho              =     0.9123

    --------------------------------------------------------------------------
       Component |     Variance   Difference         Proportion   Cumulative
    -------------+------------------------------------------------------------
           Comp1 |      2.53555      1.51519             0.5071       0.5071
           Comp2 |      1.02036     .0148549             0.2041       0.7112
           Comp3 |      1.00551            .             0.2011       0.9123
    --------------------------------------------------------------------------

Rotated components 

    ----------------------------------------------------------
        Variable |    Comp1     Comp2     Comp3 | Unexplained 
    -------------+------------------------------+-------------
               A |   0.5700    0.0944    0.0550 |      .09537 
               B |  -0.0005   -0.0067    0.9964 |     .001904 
               C |   0.5753    0.0370    0.0102 |       .1309 
               D |   0.5866   -0.1272   -0.0627 |       .2027 
               E |  -0.0005    0.9867   -0.0070 |     .007721 
    ----------------------------------------------------------

Component rotation matrix

    --------------------------------------------
                 |    Comp1     Comp2     Comp3 
    -------------+------------------------------
           Comp1 |   0.9319    0.3602   -0.0440 
           Comp2 |  -0.0446    0.2340    0.9712 
           Comp3 |  -0.3601    0.9031   -0.2341 

PS2:

我将 MATLAB 输出与上述结果与 MATLAB 中的代码进行了比较:

[coeff ,score, latent, tsquared, explained, mu] = pca(data,'Centered','on','VariableWeights','variance');
[L,T] = rotatefactors(coeff);

结果:

out1 =

   -0.0000   -0.0000   -0.0000    0.0000   -0.0473
    0.0000    0.5293   -0.0000   -0.0000   -0.0000
    0.0634   -0.0000   -0.0000   -0.0000   -0.0000
    0.0000    0.0000   -0.0000    0.1088    0.0000
   -0.0000   -0.0000   -0.1285   -0.0000    0.0000

>> out2

out2 =

    0.5490   -0.0466   -0.3552    0.5036   -0.5627
   -0.0071    0.9662   -0.2241   -0.1168   -0.0500
    0.1761    0.2391    0.8928    0.3114   -0.1329
   -0.5088    0.0725   -0.1500    0.7899    0.2992
    0.6393    0.0425   -0.0628    0.1091    0.7574

与Stata相比,我们有不同的旋转输出!

数据:LINK(在使用样本值作为其他样本的分母进行归一化后,因为一些理论概念 - 我在 MATLAB 中使用mapstd和,但行为是相同的 + 我根据该数据集中mapminmax大于 2 个标准偏差删除了异常值。(abs(X-mean(x))>=2*SD)

2个回答

我在 SPSS 中重新运行了您的分析(我没有 Stata,这次我没有在 Matlab 中重新运行它)。

您错误分析的甜蜜果肉是您以某种方式设法旋转了特征向量,而旋转通常是由加载完成的。请阅读我最近关于eigenvectors/loadings和关于rotations的回答

您的第一个分析提取了所有 5 个组件。我可以确认(在 SPSS 中)您显示的特征值和 eivenvectors。然后人们会期望您请求加载(这是放大到相应特征值的特征向量),它们是:

      Component
       1       2       3       4       5
V1   .943    .050   -.114   -.170   -.258
V2  -.078    .975   -.205    .041    .014
V3   .920   -.007   -.151   -.289    .218
V4   .844   -.118   -.267    .449    .037
V5   .595    .226    .766    .085    .021

那么这个 varimax 旋转后的矩阵将是:

      Component             
       1       2       3       4       5
V1   .831    .247    .371    .012    .334
V2  -.014    .014   -.044    .999    .002
V3   .924    .188    .300   -.032   -.142
V4   .442    .124    .886   -.063    .027
V5   .215    .970    .107    .015    .021
 Rotation Method: Varimax without Kaiser Normalization. 

使用旋转变换矩阵:

       1       2       3       4       5
1    .760    .387    .513   -.050    .078
2    .018    .225   -.105    .968    .021
3   -.251    .884   -.317   -.235   -.011
4   -.595    .132    .790    .066   -.005
5    .066    .025    .038    .019   -.997

您旋转了特征向量矩阵,而不是载荷。我们知道PCA中的特征向量矩阵本身就是正交旋转矩阵的一个特例。它的列平方和为 1,行平方和为 1,列的叉积为 0。这样的矩阵,当它被正交旋转到“简单结构”时 - 例如通过 varimax 方法 -将不可避免地变成一个非常简单的视图,就像你在rotated componentstable 中得到的那样,只有0and1值。每列只包含一个1,每一行只包含一个1,但是您可以打乱 s 的确切位置1,这个简单的结构等效地持续存在。例如 SPSS varimax rotation 在你的位置给了我这个:

      Component             
       1       2       3       4       5
V1   .000    .000    .000   1.000    .000
V2   .000   1.000    .000    .000    .000
V3   .000    .000   1.000    .000    .000
V4  1.000    .000    .000    .000    .000
V5   .000    .000    .000    .000   1.000
 Rotation Method: Varimax without Kaiser Normalization.

在您的第二次分析中,您保留并旋转了总共 5 个组件中的 3 个。由于您丢弃了特征向量矩阵中的最后两列,因此行 SS 不再是 1,因此 varimax 为您提供了简单的结构,该结构由小数值组成,而不是01但是甜果肉仍然存在:您再次旋转了错误的矩阵。你应该有旋转的加载矩阵,而不是特征向量矩阵。

此外,在大多数情况下,最好不要在进行负载轮换时关闭 Kaiser 归一化。


PS Stata文档清楚地表明该pca函数仅计算和旋转特征向量。不过,它确实在一个特殊的后置函数中计算和旋转载荷:

备注:将主成分与因子分析相结合的文献和软件倾向于显示对相关特征值进行归一化而不是对 1 进行归一化的主成分。这种归一化可在后估计命令estat loadings中使用;参见 [MV] pca 后估计

PCA 和 CFA 是高度主观的技术,具有许多启发式方法、选项和经验法则。例如,没有在倾斜和正交旋转之间进行选择的测试。这只是分析师偏好的问题,可能会根据所做的选择对下游产生重大影响。另一方面,一个常用的经验法则是分量特征值的最小值应为 1.0,其逻辑是任何保留的分量对整体方差的贡献至少应与单个变量一样多。对于您的数据,这只会给出两个组件,而不是三个。

接下来是 OLS PCA 不是尺度不变的。您声明您“标准化”了您的数据,包括删除一些异常值。这里的术语可能存在问题,但对我来说,“归一化”是指仅在“标准化”是指将数据转换为以标准差为中心的标准差为中心的标准正交基函数的情况下才平均居中。如果您只意味着将数据居中,那么您的结果在 OLS PCA 中将是错误的。

另一件事是删除异常值总是一个坏主意。这些异常值中的信息太多,无法删除它们。更不用说删除第一轮异常值通常会创建新一轮的异常值,依此类推,产生无意义的、毫无意义的无限系列异常值删除。20 世纪的统计技术,例如 Winsorizing、修剪以及涉及将数据修饰为更“正常”的 PDF 的所有技术,真的很愚蠢。改用稳健的技术。