我可以使用 CLR(居中对数比率转换)为 PCA 准备数据吗?

机器算法验证 r 主成分分析 正常化 组成数据
2022-02-06 03:51:59

我正在使用脚本。它用于核心记录。我有一个数据框,它显示了在给定深度(在第一列中)的列中的不同元素组成。我想用它执行 PCA,但我对必须选择的标准化方法感到困惑。

你们有没有人用clr()为 准备数据prcomp()或者它是否掺杂了我的解决方案。除了clr(). _prcomp()prcomp()

data_f_clr<- clr(data_f)
data_pca <- prcomp(data_f, center = TRUE, scale. = TRUE)

https://stat.ethz.ch/R-manual/R-devel/library/stats/html/prcomp.html

scale 被描述为对数据进行缩放,因此它们具有单位方差。因为我的数据有一个非常不同的规模,这正是我想要的,我想。问题是,当我使用上面的代码或跳过clr()(这会产生更想要的结果)时,我会收到不同的解决方案。但我想知道为什么clr()在这种情况下令人不安?

2个回答

您可能会在 CLR 坐标上遇到一些香草 PCA 问题。成分数据存在两个主要问题:

  • 它们是严格非负的
  • 他们有一个总和约束

各种组合变换解决了这些问题中的一个或两个。特别是,CLR 通过获取观察频率之间的比率的对数来转换您的数据x及其几何平均值G(x), IE

x^={log(x1G(x)),,log(xnG(x))}={log(x1)log(G(x)),,log(xn)log(G(x))}

现在,考虑一下

log(G(x))=log(exp[1ni=1nlog(xi)])=E[log(x)]

这实际上意味着

x^=[log(x)E[log(x)]]=0

换句话说,CLR 消除了值范围限制(这对某些应用程序来说是好的),但没有消除总和约束,从而产生奇异的协方差矩阵,它有效地打破了 (M)ANOVA/线性回归/... 并使PCA 对异常值敏感(因为稳健的协方差估计需要全秩矩阵)。据我所知,在所有组合变换中,只有 ILR 解决了这两个问题,而没有任何主要的基本假设。不过,情况要复杂一些。CLR 坐标的 SVD 为您提供 ILR 空间中的正交基(ILR 坐标跨越 CLR 中的超平面),因此您的方差估计在 ILR 和 CLR 之间不会有所不同(这当然很明显,因为 ILR 和 CLR 在单纯形)。然而,有一些方法可以在 ILR 坐标上进行稳健的协方差估计 [2]。

更新一

只是为了说明 CLR 对相关性和位置相关方法无效。假设我们对一个由三个线性独立的正态分布分量组成的社区进行了 100 次抽样。为简单起见,让所有分量具有相同的期望 (100) 和方差 (100):

In [1]: import numpy as np

In [2]: from scipy.stats import linregress

In [3]: from scipy.stats.mstats import gmean

In [4]: def clr(x):
   ...:     return np.log(x) - np.log(gmean(x))
   ...: 

In [5]: nsamples = 100

In [6]: samples = np.random.multivariate_normal(
   ...:     mean=[100]*3, cov=np.eye(3)*100, size=nsamples
   ...: ).T

In [7]: transformed = clr(samples)

In [8]: np.corrcoef(transformed)
Out[8]: 
array([[ 1.        , -0.59365113, -0.49087714],
       [-0.59365113,  1.        , -0.40968767],
       [-0.49087714, -0.40968767,  1.        ]])

In [9]: linregress(transformed[0], transformed[1])
Out[9]: LinregressResult(
   ...:     slope=-0.5670, intercept=-0.0027, rvalue=-0.5936, 
   ...:     pvalue=7.5398e-11, stderr=0.0776
   ...: )

更新二

考虑到我收到的回复,我发现有必要指出,在我的回答中,我从未说过 PCA 不适用于 CLR 转换的数据。我已经说过,CLR 可以以微妙的方式破坏 PCA,这对于降维可能并不重要,但对于探索性数据分析很重要。@Archie 引用的论文涵盖了微生物生态学。在计算生物学领域,使用各种距离矩阵上的 PCA 或 PCoA 来探索数据变化的来源。我的回答只能在这种情况下考虑。此外,论文本身也强调了这一点:

... 组合双图[注意:指 PCA]与用于 β 多样性分析的主坐标 (PCoA) 图相比具有几个优点。当数据是子集时,获得的结果非常稳定(Bian et al., 2017),这意味着探索性分析不仅仅由数据中的存在缺失关系驱动,也不是由过度稀疏性驱动(Wong et al., 2016; Morton et al., 2017)等人,2017)。

格洛尔等人,2017

更新三

对已发表研究的其他参考(感谢@Nick Cox 建议添加更多参考):

  1. 反对将 CLR 用于 PCA 的论点
  2. 反对将 CLR 用于基于相关的方法的论点
  3. ILR 简介

是的,当您的数据是组合数据时,您可以,而且实际上您应该这样做。

可以在此处找到来自微生物学领域的评论,这促使使用 CLR 转换和 PCA 来分析微生物组数据集(根据定义组成):https ://www.frontiersin.org/articles/10.3389/fmicb .2017.02224/完整