选择分隔组的 PCA 组件

机器算法验证 主成分分析 线性模型 r平方 判别分析
2022-03-02 07:26:46

我经常使用 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 的答案是肯定的,您的解决方案相当于数据挖掘。您的问题 #2 的答案是肯定的,文献中有更好的方法。

您的方法的核心问题是您没有解决高维数据问题,即当时出现的问题。您的解决方案非常武断,缺乏任何理论依据:我将为您指出一些可以帮助您在下面找到适当方法的文献。n<<p

您正在运行类似于主成分回归的分析,只是您交换了自变量和因变量,从而产生了大型多元(而不是多重)回归分析。多元回归要求您的样本量大于因变量的数量,您在示例中完全违反了这一要求。

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

然而,尽管您提出了一些令人费解的评论,但您目前所呈现的分析中的所有内容都表明您的最终目标是确定大量连续变量(metabo[,-1])和单个分类变量(metabo[ ,1])。PCA 是一种糟糕的方法来实现这一点。在高维情况下,这个问题有两类一般的解决方案:第一,假设稀疏的解决方案,以及假设因子结构的解决方案。

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

请注意,我不一定推荐我为您的数据提到的任何方法;在选择合适的方法时,您必须仔细考虑您的目标和问题的先验知识。

[1] Rothman, Levina, Zhu (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。

@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

是不可行的但是 PLS-LDA 是一种可行的处理方法,例如参见Barker, M. & Rayens, W.: Partial least squares for discriction, J Chemom, 17, 166-173 (2003)。DOI:10.1002/cem.785(本文还讨论了PLS和LDA之间的关系)。np

PLS 可以看作是像 LASSO 一样的正则化,并且稀疏 PLS 也是可用的(虽然我没有使用它:我的数据更适合普通 PLS,它不假设稀疏)。有关不同正则化方法的精彩讨论,请参阅例如Elements of Statistical Learning

进行 PLS-LDA 的一个很好的特性是,如果您注意在两个步骤中使用相同的中心,您可以以双线性形式编写最终模型。这允许以与解释 LDA 模型相同的方式解释模型,如果您有更多案例和则可以计算。(如果您被迫进行 PCA,这也适用于 PCA-LDA)。np

比如说,PLS 得分数据矩阵 PLS 权重并且 对于通常的 LDA,得分数据矩阵 LDA 系数T=X×W
L=X×B

然后在 PLS (X-)score 空间中做 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 界限),以避免为优化超参数而对训练数据进行第二次内部拆分。