哪些变量解释了哪些 PCA 组件,反之亦然?

机器算法验证 r 主成分分析 降维 回归策略
2022-01-23 00:49:32

使用这些数据:

head(USArrests)
nrow(USArrests)

我可以这样做一个PCA:

plot(USArrests)
otherPCA <- princomp(USArrests)

我可以得到新的组件

otherPCA$scores

和分量解释的方差比例

summary(otherPCA)

但是,如果我想知道哪些变量主要由哪些主成分解释呢?反之亦然:例如 PC1 或 PC2 主要由murder我怎样才能做到这一点?

例如,我可以说 PC1 80% 由murderor解释assault吗?

我认为负载在这里对我有帮助,但是它们显示了方向性,而不是我所理解的解释的方差,例如

otherPCA$loadings

Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4
Murder                         0.995
Assault  -0.995                     
UrbanPop        -0.977 -0.201       
Rape            -0.201  0.974   
4个回答

你是对的,负载可以在这里帮助你。它们可用于计算变量和主成分之间的相关性。此外,一个变量在所有主成分上的平方载荷之和等于 1。因此,平方载荷告诉您一个变量由一个主成分解释的方差比例。

princomp 的问题是,它只显示“非常高”的负载。但由于载荷只是协方差矩阵的特征向量,因此可以使用eigenR 中的命令获取所有载荷:

 loadings <- eigen(cov(USArrests))$vectors
 explvar <- loadings^2

现在,您在矩阵中获得了所需的信息explvar

我认为接受的答案可能具有危险的误导性(-1)。 OP 中至少有四个不同的问题混合在一起。我会一个接一个地考虑。


  • Q1。给定的原始变量解释了给定 PC 的多少方差?给定的 PC 解释了给定原始变量的多少方差?

这两个问题是等价的,答案由变量和PC之间的相关系数如果对相关性进行 PCA,则相关系数由载荷的相应元素给出(参见此处) 。PC与相关矩阵的特征向量和相应的特征值相关联。载荷向量它的元素是这个 PC 与各自原始变量的相关性。r2riVisiLiLi=(si)1/2Vi

请注意,特征向量和载荷是两个不同的东西!在 R 中,特征向量被混淆地称为“载荷”;应该小心:它们的元素不是所需的相关性。[此线程中当前接受的答案使两者混淆。]ViLi

此外,如果 PCA 是对协方差(而不是相关性)进行的,那么载荷也会给你协方差,而不是相关性。为了获得相关性,需要按照 PCA 手动计算它们。[目前接受的答案尚不清楚。]

  • Q2。给定原始变量的多少方差可以由给定的 PC 子集解释?如何选择这个子集来解释例如的方差?80%

因为 PC 是正交的(即不相关),所以可以简单地将各个值相加(参见 Q1)以获得全局值。r2R2

要选择一个子集,可以将具有最高相关性 ( ) 的 PC 与给定的原始变量相加,直到达到所需的解释方差量 ( )。r2R2

  • Q3。给定 PC 的多少方差由给定的原始变量子集解释?如何选择这个子集来解释例如的方差?80%

PCA 不会自动给出这个问题的答案!例如,如果所有原始变量都与成对的密切相关,那么第一台 PC 和所有变量之间的相关性将在左右。人们无法将这些数字相加来计算这台 PC 的方差比例,例如,由五个原始变量解释(这将导致无意义的结果)。相反,需要对这些变量进行回归这台 PC 并获得多个值。r=0.9r=0.9r2R2=0.90.95>1R2

@FrankHarrell (+1) 建议如何选择解释给定方差量的子集。

您可以进行向后或向前逐步变量选择,根据其组成变量预测一个组件或组件的线性组合。如果您使用向后步进,将在第一步为 1.0。时逐步回归几乎是一场灾难,但当预测是机械的时,它可以很好地工作,就像这里的情况一样。您可以添加或删除变量,直到您解释 0.8 或 0.9(例如)主成分中的信息。R2Y

与 R 捆绑在一起的美国逮捕数据在这里只是一个例子,但我注意到问题中的载荷计算来自协方差矩阵的 PCA 。这介于任意和荒谬之间,因为变量是在不同的尺度上测量的。

城市人口看起来像一个百分比。加利福尼亚是 91% 和最高的。

三个犯罪变量似乎是相对于人口规模(大概在一段时间内)表示的犯罪被捕人数。大概它记录在某处,无论是每 1000 人或 10000 人或其他人的逮捕人数。

给定单位中攻击变量的平均值约为 171,平均谋杀值约为 8。因此,您对负载的解释是,该模式在很大程度上是人工制品:它取决于变量的非常不同的可变性。

因此,尽管数据中的意义在于,因袭击而被捕的人数比因谋杀等原因被捕的人数多得多,但已知(或不足为奇)的事实在分析中占主导地位。

这表明,与统计中的其他任何地方一样,您必须考虑您在 PCA 中所做的事情。

如果你更进一步:

  1. 我认为最好将城市百分比排除在分析之外。在城市生活不是犯罪;它当然可以作为影响犯罪的变量的代理。

  2. 在我看来,基于相关矩阵的 PCA 会更有意义。另一种可能性是使用逮捕率的对数,而不是逮捕率(所有值都是正数;见下文)。

注意:@random_guy 的回答故意使用协方差矩阵。

以下是一些汇总统计数据。我使用了Stata,但这并不重要。

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
   urban_pop |        50       65.54    14.47476         32         91
      murder |        50       7.788     4.35551         .8       17.4
        rape |        50      21.232    9.366384        7.3         46
     assault |        50      170.76    83.33766         45        337