在进行PCA之前是否应该删除高度相关的变量?


111

我正在阅读一篇论文,作者在进行PCA之前由于与其他变量的高度相关性而丢弃了多个变量。变量总数约为20。

这有什么好处吗?对我来说,这似乎有些负担,因为PCA应该自动处理此问题。


26
只是一个提示。想想看,如果添加一个变量的越来越多的副本(或接近副本),PCA的结果将以何种方式改变。
ttnphns

@ type2您能说出您正在阅读的论文的名字吗?
Amatya

Answers:


123

这详细说明了@ttnphns在评论中提供的有见地的提示。

相邻的几乎相关的变量增加了它们共同的基本因素对PCA的贡献。 我们可以从几何上看到它。考虑在XY平面中的这些数据,显示为点云:

散点图

几乎没有相关性,协方差近似相等,并且数据居中:PCA(无论如何执行)将报告两个近似相等的分量。

现在让我们抛出等于的第三个变量加上少量的随机误差。的相关矩阵以较小的非对角线系数显示了这一点,除了第二行和第三行和列(和)之间:Y X Y Z Y ZZY(X,Y,Z)YZ

(1.0.03440180.0460760.03440181.0.9418290.0460760.9418291.)

在几何上,我们将所有原始点都几乎垂直地移动了,从而将上一张图片从页面平面中移出。该伪3D点云尝试使用侧面透视图(基于其他数据集,尽管以与以前相同的方式生成)来说明提升:

3D图

这些点最初位于蓝色平面中,并被提升到红色点。原始的轴指向右侧。所产生的倾斜也将这些点沿YZ方向拉伸,从而使它们对方差的贡献加倍。因此,这些新数据的PCA仍将标识两个主要主成分,但是现在其中一个的方差是另一个的两倍。Y

这种几何期望通过在Windows中的一些模拟得到证实R。为此,我通过第二次,第三次,第四次和第五次创建第二个变量的近似共线的副本,并将它们命名为到重复“提升”过程。这是一个散点图矩阵,显示了最后四个变量之间的相关性:X 5X2X5

散点图矩阵

PCA是使用相关性完成的(尽管对于这些数据并不重要),使用前两个变量,然后是三个,...,最后是五个。我使用主成分对总方差的贡献图来显示结果。

PCA结果

最初,使用两个几乎不相关的变量,贡献几乎相等(左上角)。在添加了一个与第二个变量相关的变量之后(确切地说,就像在几何图中所示),仍然只有两个主要部分,一个现在的大小是另一个大小的两倍。(第三个成分反映了缺乏完美的相关性;它测量了3D散点图中的薄煎饼状云的“厚度”。)在添加了另一个相关变量()之后,第一个成分现在占总数的四分之三; 在添加五分之一之后,第一部分几乎占总数的五分之四。在大多数情况下,大多数PCA诊断程序都认为第二种之后的所有四种成分都是无关紧要的;在最后一种情况下X4一个值得考虑的主要组成部分。

现在我们可以看到,丢弃被认为在衡量一组变量的相同基础(但“潜在”)方面的变量可能有好处,因为包括几乎多余的变量可能导致PCA过分强调它们的作用。从数学上讲,这种程序没有错(或错)。这是根据分析目标和数据知识做出的判断。但是,应该非常清楚地知道,搁置已知与其他变量紧密相关的变量可能会对PCA结果产生重大影响。


这是R代码。

n.cases <- 240               # Number of points.
n.vars <- 4                  # Number of mutually correlated variables.
set.seed(26)                 # Make these results reproducible.
eps <- rnorm(n.vars, 0, 1/4) # Make "1/4" smaller to *increase* the correlations.
x <- matrix(rnorm(n.cases * (n.vars+2)), nrow=n.cases)
beta <- rbind(c(1,rep(0, n.vars)), c(0,rep(1, n.vars)), cbind(rep(0,n.vars), diag(eps)))
y <- x%*%beta                # The variables.
cor(y)                       # Verify their correlations are as intended.
plot(data.frame(y))          # Show the scatterplot matrix.

# Perform PCA on the first 2, 3, 4, ..., n.vars+1 variables.
p <- lapply(2:dim(beta)[2], function(k) prcomp(y[, 1:k], scale=TRUE))

# Print summaries and display plots.
tmp <- lapply(p, summary)
par(mfrow=c(2,2))
tmp <- lapply(p, plot)

5
+1,美丽的人物。您在前2名中使用了什么?第一个看起来像是手绘的。
gung

14
@gung我在mathematica.stackexchange.com/questions/11350/xkcd-style-graphs中使用了代码的另一种形式。早就知道,在文本或图像上添加一些随机抖动可以使其看起来更温暖且更易于访问。(本身最初是在Metafont上构建的,Donald Knuth经过对字体的深入研究后设计出了该字体;他包括了这种内置变化。)对于某些图形,例如第二幅图中的伪3D散点图,抖动技术几乎没有增加或减少。分心,所以我没有在那里使用它。TEX
whuber

2
哇,这真是令人启发。我学到新东西。
Spacey

7
@whuber就像最时髦的统计学家-像专家一样使用XKCD绘图。
Cam.Davidson.Pilon

2
@logan换句话说。请允许我将您的注意力转移到本文后面的句子:“这种程序在数学上没有对(或错);这是基于分析目标和数据知识的判断。”
ub

42

我将进一步说明与@whuber相同的过程和想法,但是要说明加载图,因为加载是PCA结果的本质。

这是三个3个分析。在第一个中,我们有两个变量和(在此示例中,它们不相关)。在第二个步骤中,我们添加了,它几乎是的副本,因此与紧密相关。在第三个中,我们仍然类似地添加了另外两个“副本”:和。X 2 X 3 X 2 X 4 X 5X1X2X3X2X4X5

然后,前2个主成分的载荷图就会出现。曲线上的红色尖峰表明变量之间的相关性,因此在几束尖峰中可以找到一组紧密相关的变量。组件是灰线;组件的相对“强度”(其相对特征值大小)由线的权重给出。

在此处输入图片说明

可以看到添加“副本”的两种效果:

  1. 组件1变得越来越强大,而组件2变得越来越弱。
  2. X1X2X3X2

我不会恢复道德,因为@whuber已经做到了。


r=0r=0.62r=0.77

X1X2r=0 X1X2可以选择直线本身作为组件。]组件上的数据点(200个对象)的坐标是组件得分,其乘以200-1的平方和是组件的特征值

rX1X2(但是添加第3个变量可以使它偏转)。变量向量和分形线之间的夹角(余弦)是它们之间的相关性,并且由于向量是单位长度且分量是正交的,因此无非就是坐标,载荷。组件的平方加载总和是其特征值(组件只是将自身定向在此主题空间中,以使其最大化)

在此处输入图片说明


加法2。在上面的补充中,我说的是“变量空间”和“主题空间”,好像它们像水和油一样不兼容。我不得不重新考虑它,并且可能会说- 至少当我们谈论PCA时 -两个空间最终都是同构的,因此,我们可以正确地显示所有PCA详细信息-数据点,可变轴,组件轴,变量为点,-在单个未扭曲的Biplot上。

以下是散点图(变量空间)和加载图(组件空间,根据其遗传起源为对象空间)。可以在一个上显示的所有内容,也可以在另一个上显示。图片是相同的彼此之间仅旋转了45度(并且在这种情况下会反射)。这是变量v1和v2的PCA(已标准化,因此对r进行了分析)。图片上的黑线是作为轴的变量。绿/黄线是作为轴的分量;蓝点是数据云(主题);红点是显示为点(向量)的变量。

在此处输入图片说明


1
+1有趣的插图。顺便说一句,您的第二个观察结果是数据的伪像:方向发生了变化,因为在第一种情况下,相关性是完美的,从而给出了二维本征空间。(这在实际数据中极为罕见;它通常意味着发生了数据库错误,并且一个变量是另一个变量的线性重新表达。)该软件可以为该空间任意选择任何正交基础。只需最小的相关性就可以消除这种退化。因此,我认为您过度解释了这种重新定向现象。
ub

@whuber,也许我听不懂你的意思。什么是“完美”的关联?r bw X1和X2为.003;可能是任何一个,例如.503。那将是绘图上两个红色矢量的角度bs 的余弦。无论r为何,第一个PC始终是等分线,而仅分析两个变量。我想您的注释The software was free to choose any orthogonal basis for that space, arbitrarily适用于变量空间中的圆形云(即数据散点图,如您答案中的第一张图片),但是加载图是主题空间,其中变量(而不是案例)是点(向量)。
ttnphns

1
R5

我使用了相关性(注意矩阵和红色矢量的长度基本相同的事实)。是的,主题空间一个具有n轴(对象)和p点(变量)的tupsy-torvey散点图。当然,所有np维都是多余的,并且可以在p维主题空间中绘制任何p变量集,但这并不能将其转换为变量空间!我只会在答案中添加图片。
ttnphns

5
+1,感谢您的额外贡献@ttnphns。这从我最初认为的一个非常简单的问题变成了一个非常有用的信息。
gung

4

如果没有您的论文的详细信息,我可以推测这种高度相关的变量的丢弃仅仅是为了节省计算能力或工作量。我看不出PCA为什么会“破坏”高度相关变量的原因。将数据投影回PCA发现的基准上具有使数据变白(或使它们解相关)的作用。这就是PCA背后的全部要点。


4
您是否阅读过@ttnphns的提示?PCA不仅关注特征向量(您讨论过),而且还关注特征值(您忽略了)。这很关键,因为特征值用于确定要保留的成分和要丢弃的成分。
whuber

2
@whuber是的...是的,我想我现在明白了。因此,从本质上讲,更多相关的变量将过分强调特定的特征向量(方向),如果存在许多相关变量,那么将有更多的过分强调“伪”方向,从而淹没了“原始”特征向量/方向。否则很容易看到。我了解你说的对吗?
Spacey

2
差不多了,穆罕默德。现实情况是,一组相关变量可能会“加载”到几个主成分(特征向量)上,因此,从此类集合中包含许多变量将对多个特征向量进行加权加权,从而也改变了所有特征向量的方向。
Whuber

1

根据我的理解,相关变量是可以的,因为PCA输出正交的向量。


5
没错,但是您介意解释为什么正交性对是否提前丢弃变量有影响吗?
whuber

-1

好吧,这取决于您的算法。高度相关的变量可能意味着病态的矩阵。如果您使用对它敏感的算法,那可能是有道理的。但是我敢说,用于计算特征值和特征向量的大多数现代算法对此都是健壮的。尝试删除高度相关的变量。特征值和特征向量变化很大吗?如果他们这样做,那么病态可能是答案。由于高度相关的变量不会添加信息,因此PCA分解不应更改


4
不幸的是,PCA 确实发生了变化:几乎可以保证。
ub

1
@whuber哇,大量的回复,而且非常有用。对不起,我的评论是完全错误的。我的错。BTW非常有帮助的答案
Juancentro

4
我从完全错误的答案中学到了很多东西,尤安森特罗(Juancentro),尤其是我自己的答案,幸运的是,很少公开露面:-)。在@ttnphns发表评论之前,我曾有过与您相似的想法。
whuber

-1

取决于您使用哪种原理组件选择方法,不是吗?

我倾向于使用特征值> 1的任何主成分。因此不会影响我。

从上面的示例中,即使是卵石图方法也通常会选择正确的方法。如果在弯头之前保持所有状态。但是,如果您仅选择具有“主要”特征值的主成分,就会误入歧途。但这不是使用碎石图的正确方法!


5
欢迎来到站点,克里斯。不幸的是,这些临时程序都不是特别可辩护的。请注意,在第一种情况下,您根本无法更改数据的形状,只能从全部选择变为全部都不选择(只需将所有内容乘以常数即可)。
红衣主教2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.