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


13

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

你们中有没有人使用clr()来准备的数据prcomp()?还是将我的解决方案掺假了?除了在中使用属性scale之外,我还尝试clr()在使用prcomp()函数之前对数据使用on 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
对于非-R用户喜欢我,可能有助于阐明什么clr呢....
杜格尔

3
当然,CLR会更改解决方案-为什么还要使用此过程?也许您应该问如何确定哪种方法更好。在我们的网站上搜索CLR可以找到有用的帖子。在回答相关问题时,我提供了一些可能对您有所帮助的插图。
Whuber

1
快速的答案是,您可以在PCA之前对数据进行任何处理。没有法令,法律或食谱来管理。一些人主张PCA(无旋转)是尺度不变的,而另一些人主张PCA的结果对尺度高度敏感。但是,如果旋转PCA的结果,则经验法则要求在PCA之前进行规范化,例如CLR或标准化为mean = 0和SD = 1。Lee Cooper的书《市场份额分析》anderson.ucla.edu/faculty/lee.cooper/MCI_Book/BOOKI2010.pdf)将CLR与组件分析联系在一起,对CLR进行了很好的讨论。
Mike Hunter

2
@DJohnson我在pdf链接中搜索了CLR中各种单词,并以对数比转换为中心,但是什么也没找到。我做错了什么?该版本中没有索引,但各节的标题看起来并不乐观,参考文献中也没有包括John Aitchison提出的构成数据转换。页面引用以该名称或任何其他名称进行的讨论。
尼克·考克斯

1
如前所述,您链接到的版本中没有索引,请原谅我不要查阅它。感谢关键字“ log-centering”,从中可以找到关于另一只野兽的讨论,而不是该线程所针对的居中log-ratio转换。@whuber已经提供了指向此站点上讨论的链接。关键在于,对于比例加为1的成分数据,需要并具有将其集体转换到不同空间的范围。您错过了“比率”一词,因为它与您所知道的不同。
尼克·考克斯

Answers:


5

是的,您可以并且实际上应该在数据组成时使用。

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


不幸的是,考虑到两位合著者是成分数据分析的拥护者,该论文在许多情况下是完全错误的,这很遗憾。
Eli Korvigo

@EliKorvigo该评论可能有充分根据,但其本身没有帮助。如果您可以指出已发表的评论或至少公开的评论,那么这样的评论将改变现状。
尼克·考克斯

@NickCox当然,Filzmoser和Hron有一篇论文。这不是对上述论文的直接批评,但它反对使用CLR进行相关性分析,而上述论文则推荐了基于CLR的工具。
Eli Korvigo

@NickCox我想对我的深深敬意是Pawlowsky-Glahn博士和Egozcue博士,他们是Archie提到的论文的最后两位作者。实际上,他们引入了ILR来解决CLR的缺点(Egozcue和Pawlowsky-Glahn,2003年)。他们在引用 CLR时写道:“但是,该子空间中的正交引用不是以直接的方式获得的”
Eli Korvigo

Pawlowsky-Glahn和Egozcue状态在“成分数据及其分析:引言”(2006年)中,其clr系数“具有一定的优势:零件中的表达式是对称的,这些坐标将Aitchison距离的计算减少到普通距离。在双曲线计算中很有用(...)”
jO。

5

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

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

各种合成变换解决了这些问题中的一个或两个。特别是,CLR通过获取观察到的频率与它们的几何平均值之比的对数来转换数据,即xG(x)

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等人,2017),这意味着探索性分析不仅是由数据中的存在缺席关系或过度稀疏驱动的(Wong等人,2016; Morton等人)等人,2017)。

Gloor等人,2017年

更新三

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

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

2
对于pca,奇异协方差矩阵不是问题!
kjetil b halvorsen

@kjetilbhalvorsen确实,PCA本身不需要矩阵是完整的。从技术上讲,奇异协方差矩阵只会导致一个或多个零特征值。但是,人们通常使用PCA来探索方差的来源,这就是组成因素的所在。这就是为什么我对措辞非常谨慎的原因:“ ...在许多细微的方面有效地破坏了PCA / ... ”
Eli Korvigo

因此,您是说由于奇异性而无法计算每个组件所解释的方差量?除此之外,仍然可以执行PCA来执行降维。这如何影响方差分析/线性回归?
阿奇

1
+1是因为答案非常有趣。但是,这并非没有批评。您似乎(对我来说很愚蠢)没有确切解释为什么对合成或clr转换的数据进行PCA会“以微妙的方式”不正确(这是怎么回事?)。另外,您提供的是python代码,但没有给出结果。您可以显示和评论其结果吗?最后,您能否留下有关ILR transfotm的链接以进行阅读?
ttnphns

1
@ttnphns 1)正如我在评论中所写,CLR不能消除成分闭合带来的方差源失真,从而影响探索性数据分析:稳健的协方差估计需要一个完整秩矩阵;2)我不确定我是否遵循,为什么你说没有结果:那是一个具有输入和输出(即结果)的交互式Python会话;3)我为ILR添加了参考。
Eli Korvigo
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.