您可能会在 CLR 坐标上遇到一些香草 PCA 问题。成分数据存在两个主要问题:
各种组合变换解决了这些问题中的一个或两个。特别是,CLR 通过获取观察频率之间的比率的对数来转换您的数据X及其几何平均值G ( x ), IE
X^= {日志(X1G ( x )) ,...,日志(XnG ( x )) }= {日志(X1) -日志( G ( x ) ) , ... ,对数(Xn) -日志( G ( x ) ) }
现在,考虑一下
log(G(x))=log(exp[1n∑i=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 建议添加更多参考):
- 反对将 CLR 用于 PCA 的论点
- 反对将 CLR 用于基于相关的方法的论点
- ILR 简介