选择将组分开的PCA组件


13

我经常使用PCA诊断我的多元数据(具有数十万个变量和数十个或数百个样本的组学数据)。数据通常来自具有定义某些组的几个类别自变量的实验,在找到能够显示感兴趣的组之间分离的组件之前,我经常必须经过几个组件。我想出了一种相当原始的方式来找到这种可区分的组件,我想知道

  1. 在何种程度上是合理/合理的,并且
  2. 是否有更好的方法可以达到相同目的。

请注意,这是探索性的。在说服别人之前,我想说服自己。如果我发现有一些组件可以清楚地区分感兴趣的组(例如,控制组与治疗组),即使它们是响应方差的一小部分,则我更相信它,而不是受监督机器的结果学习。

这是我的方法。我将使用R中pca3d的“ metabo”示例数据集。

这个想法是评估独立变量可以解释每个分量有多少差异。为此,我为每个组件计算一个简单模型,并使用作为度量标准,以将组件从“最有趣”到“最不有趣”进行排序。R2

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

这是结果。该图显示了中的自变量解释的每个成分的方差百分比metabo[,1]

在此处输入图片说明

我们可以通过对这些组件进行排序,以找出要显示的组件;前三个成分是2、1、7。r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

这是情节:

在此处输入图片说明

(红色和绿色类别是不是患者的两组受试者,可以预期无法区分它们。)

为了重新提出我的问题,

  1. 这种方法对您有意义吗?我的问题是,它看起来太像数据挖掘。另外,从直觉上讲,我认为也许我应该转过桌,问一下每个变量对自变量方差的哪一部分进行解释?最后,我(几乎)可以肯定,我是在彻底改变轮子,所以我的第二个问题是
  2. 有更好的吗?

请注意,在此阶段,我不想切换到局部最小二乘法或类似的方法。我只想根据我的分类诊断PCA。


2
关于您的有趣问题,我只想发表两条评论。1)用语言描述您的方法,除了显示其代码外(请记住,这里的人们使用各种软件,不一定是R)。2)散点图在没有峰值的情况下并不是很有说服力。另外,如果您对自己的方法有任何特定的疑问,请说出来以使问题更加突出。
ttnphns 2013年

1
编辑:为澄清起见,您是先进行PCA,然后尝试隔离某些变量可以最好地解释的主要成分?您是否正在使用scree图对它们进行交叉验证?可能是因为您从数据集中选取的一些x恰巧解释了主成分中的许多方差,但是如果方差在该主成分中非常低,我不确定这有什么意义。
shadowtalker 2013年

1
@ssdecontrol好吧,我正在做一个很差的勒芒随机检查,看看计算出的是否远高于背景噪声。至于它是否意味着任何东西-关键是实际上它通常是有意义的。由于无论如何我都会进行所有经典分析和/或监督机器学习,因此,每当我看到分类器在很大程度上解释了PCX时,我(i)会发现该分类器各组之间存在差异的几个变量,并且( ii)我可以成功地训练SML。R2
2013

2
to find out what share of the overall variance in the data matrix is explained by a given classification如果只想知道这一点,则不需要PCA。只需计算组间平方和与总平方和的比例即可:(SStotal-SSwithin)/SStotal其中SSwithin是池内组平方和。
ttnphns

1
我发现您使用PCA的方式没有任何问题,但是我不明白您为什么真正需要它。(仅仅是因为您可能喜欢?)因为我看不到您的确切目标,所以我什么也不能告诉您Is there anything better?
ttnphns

Answers:


8

问题1的答案是肯定的,您的解决方案相当于数据挖掘。问题2的答案是肯定的,文献中有许多比较好的方法。

方法的中心问题是您没有解决高维数据问题,即当时出现的问题。您的解决方案是任意的,缺乏任何理论上的证明:我将为您提供一些文献,以帮助您在下面找到合适的方法。n<<p

您正在运行的分析类似于主成分回归,除非你已经换你的自变量和因变量,产生了大量多元(而不是多个)回归分析。多变量回归要求您的样本量大于因变量的数量,这是您在示例中完全违反的要求。

如果您确实致力于对数据运行PCA,然后使用多元回归,则必须使用适当的方法。例如,研究MRCE和相关方法[1]。

但是,尽管您做出了一些令人费解的评论,但当前呈现的分析结果表明,您的最终目标是识别大量连续变量(metabo [,-1])和单个类别变量(metabo [ ,1])。PCA是实现此目的的糟糕方法。在高维情况下,此问题有两种通用的解决方案:第一,采用稀疏性的解决方案,以及采用因子结构的解决方案。

基于稀疏性的解决方案通常假定实际上只有很少一部分变量与感兴趣的分类变量相关,并试图找到这个小的子集。例如,请参见DALASS [2]。基于因子结构的方法假定您的鉴别变量是潜在隐变量的体现,这些隐变量与分类变量具有真正的关系。此类方法的一个示例是DLDA [3]。

请注意,我没有必要建议我已经提到了您的数据的方法; 选择适当的方法时,必须仔细考虑您的目标和对该问题的先验知识。

[1]罗斯曼,列维娜,朱(2010)。带有协方差估计的稀疏多元回归。计算与图形统计杂志,第19卷,第4期,第947-962页。

[2] Nickolay T. Trendafilov,Ian T. Jolliffe,DALASS:通过LASSO进行判别分析中的变量选择,《计算统计与数据分析》,第51卷,第8期,2007年5月1日,第3718-3736页。

[3]于洋(2001)。一种用于高维数据的直接LDA算法,并应用于人脸识别。模式识别34,2067-2070。


2
我已经开始提供新的赏金来奖励这个答案。
1

1
@Januaryary:这是一个很好的答案,但是我想指出的是,“直接LDA” 充其量是一个非常奇怪的算法,请参见Gao和Davis,2005,为什么直接LDA不等同于LDA:“我们证明了这一点。 .. D-LDA可能会在一般应用中施加明显的性能限制”,因此请小心使用。
变形虫说恢复莫妮卡

@amoeba感谢您的引用。我有一段时间对DLDA感到担忧,因为没有理由以这种特定方式选择组件。我认为这是一个非常针对特定问题的解决方案,尽管可以轻松地适用于任何问题,并且了解某些组件对歧视最有用,但它不一定能广泛适用于面部识别问题。每个采用假定因素结构实施高维判别的解决方案都存在问题...您是否找到了更好的方法?我对您的意见感兴趣。
ahfoss 2014年

@ahfoss:我不是专家,但是据我所知,“直接LDA”是在情况下应用LDA的尝试之一。一种更标准的方法是使用带有交叉验证的正则化LDA(rLDA)以找到最佳正则化参数。不过,我不知道它在人脸识别中的实际表现。nk
变形虫说恢复莫妮卡2014年

4

@ahfoss已经向您指出LDA作为PCA的分类类似物。实际上,这两种方法彼此相关,也与PLS相关:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

关系是在投影:PCA项目的数据,这样的分数方差-协方差矩阵将是。LDA做类似的突起,但代替的方差-协方差矩阵整个数据集,合并的类内方差-协方差矩阵变为。II

正如@ahfoss所说,通常的LDA对于是不可行的。但是PLS-LDA是解决该问题的可行方法,参见例如Barker,M。&Rayens,W .:偏最小二乘方差,J Chemom,17,166-173(2003)。DOI:10.1002 / cem.785(本文还讨论了PLS和LDA之间的关系)。np

PLS可以像LASSO一样被视为正则化,并且也可以使用稀疏的PLS(尽管我没有使用过:我的数据更适合于普通PLS,后者不假定稀疏性)。有关不同正则化方法的详细讨论,请参见《统计学习要素》

做PLS-LDA的一个不错的特性是,如果您注意两个步骤都使用相同的居中,则可以双线性形式编写最终模型。这允许您以与解释LDA模型相同的方式来解释模型,如果您有更多的案例并且,则可以像计算LDA模型那样来解释模型。(以防您被迫执行PCA,这也适用于PCA-LDA)。np

比方说,PLS得分数据矩阵 PLS权重和 用于通常的LDA,分数数据矩阵 LDA系数。T=X×W
L=X×B

然后在PLS(X-)分数空间中进行LDA,我们得到: 破折号表示这些LDA分数()可能与未经正则化的LDA分数略有不同,系数。与区别非常大,因为它们适用于PLS分数空间而不适用于原始数据空间。
L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

实用说明:如果您使用R,我正在开发一个软件包,其中提供PLS-LDA和PCA-LDA模型。让我知道您是否想尝试一下。


为了避免数据挖掘,您需要使用独立的数据来验证最终模型(=衡量其性能)。

这里的独立意味着该案例(患者?)对模型拟合没有任何帮助。尤其是,

  • 没有进入涉及多种情况的任何类型的预处理,例如居中或标准化
  • 没有输入PCA / PLS / ...计算。
  • 不用于超参数估计。

由于只有很少的情况,因此重采样策略是合适的。在这种情况下,最好是通过外部知识来修复任何超参数(例如PC或PLS潜在变量的数量,或LASSO绑定),以避免训练数据的第二次内部分裂,以优化超参数。


+1用于交叉验证模型。非常重要。但是,我想听听OP @January的话,他说他对歧视不感兴趣,尽管他/她的问题似乎非常适合歧视/分类分析。
ahfoss 2014年

我不同意您关于k-means / PCA / etc属于同一家族的说法。这意味着它们是相同模型或算法的特殊情况,这是不正确的。PCA算法是一种简单的矩阵计算,而k均值是一种已与EM算法进行比较的迭代算法(由于不存在似然函数,因此在技术上不正确,但在某些方面还是IMHO的有用比较)。
ahfoss 2014年

1
您是指plsgenomics :: pls.lda函数吗?如果不是,您的包裹有何不同/改进?我还将向感兴趣的读者指出,一般而言,PLS-LDA优于简单地运行带有伪编码结果变量的PLS的常用技术。尽管后一种方法不一定是错误的,但它绝对是多余的,尤其是因为您可以获得的预测概率小于零或大于一!
ahfoss 2014年

@ahfoss:我并不是说算法,因为相同的基础模型可以通过不同的算法来计算。例如,对于PCA,您可以使用迭代(NIPALS,POWER)或非迭代(EVD,SVD)算法。也许用一个更好的术语代替k均值是“将最小集内平方和求和的聚类分析,例如,k均值是一种启发式近似”。我现在没有时间,请稍后查看答案,或者我们可以在聊天室见面并找到更好的描述。
cbeleites对SX 2014年

1
...一个技术上的区别是我使用pls::plsrpls(允许从不同的算法中进行选择)。我有很多后处理功能,例如用于翻转和旋转模型,这有时对解释很有用。
cbeleites对SX 2014年
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.