CLR (중앙 로그 비율 변환)을 사용하여 PCA에 대한 데이터를 준비 할 수 있습니까?


13

스크립트를 사용하고 있습니다. 핵심 레코드입니다. 주어진 깊이 (열의 첫 번째 열)에 대한 열의 다른 원소 구성을 보여주는 데이터 프레임이 있습니다. PCA를 수행하고 싶습니다. 선택해야하는 표준화 방법이 혼란 스럽습니다.

clr()귀하를 위해 데이터를 준비하기 위해 를 사용한 사람이 prcomp()있습니까? 아니면 내 솔루션을 방해합니까? 에서 scale 속성을 사용하는 것 외에도 함수를 clr()사용하기 전에 데이터 에서 on을 사용해 보았습니다 .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

스케일은 데이터를 스케일링하기 위해 설명되므로 단위 분산이 있습니다. 내 데이터의 스케일이 매우 다르기 때문에 생각합니다. 문제는 위의 코드를 사용하거나 건너 뛰면 다른 솔루션을 받는다는 것입니다 clr()(더 원하는 결과를 만듭니다). 그러나 clr()그 경우 왜 방해 가되는지 알고 싶습니다 .


2
나 같은 비 R 사용자의 경우, 무엇을 명확히하는 것이 도움이 될 수 있습니다 clr.... 않습니다
두글

3
물론 CLR은 솔루션을 바꿉니다. 왜이 절차를 사용 하시겠습니까? 아마도 어떤 접근법이 더 나은지를 결정하는 방법을 묻어 야 할 것입니다. CLR 사이트 검색하면 유용한 게시물을 찾을 수 있습니다 . 관련 질문에 대한 답변으로 도움이 될만한 몇 가지 예를 제시했습니다.
whuber

1
빠른 답변은 PCA 이전에 원하는 데이터로 무엇이든 할 수 있다는 것입니다. 이에 관한 칙령, 법률 또는 레시피는 없습니다. 일부는 PCA (회전 없음)의 규모가 변하지 않는다고 주장하는 반면 PCA의 결과는 규모에 매우 민감하다고 주장합니다. 그러나 PCA의 결과를 회전 시키면 경험적 규칙에 따라 CLR 과 같은 사전 PCA 정규화 또는 평균 = 0 및 SD = 1로 표준화됩니다. CLR에 대한 자세한 내용은 Lee Cooper의 책 Market Share Analysis ( anderson.ucla.edu/faculty/lee.cooper/MCI_Book/BOOKI2010.pdf )에서 구성 요소 분석과 관련이 있습니다.
Mike Hunter

2
@ DJohnson 나는 CLR 및 중심 로그 비율 변환의 다양한 단어에 대한 pdf 링크를 검색했지만 아무것도 찾을 수 없었습니다. 내가 뭘 잘못 했어? 해당 버전에는 색인이 없지만 섹션 제목은 유망하지 않으며 참조에는 구성 데이터에 대한 이러한 변환을 제안한 John Aitchison이 포함되어 있지 않습니다. 그 이름이나 다른 이름으로 토론에 대한 페이지 참조.
Nick Cox

1
이미 언급했듯이, 연결된 버전에 색인이 없으므로 참조하지 않기를 용서하십시오. 이 스레드에 관한 중심 로그 비율 변환 이 아닌 다른 짐승에 대한 토론을 찾은 키워드 "log-centering"에 감사드립니다 . @whuber는 이미이 사이트에 대한 토론 링크를 제공했습니다. 핵심은 비율이 1에 추가되는 구성 데이터의 경우 다른 공간으로의 집단 변환에 대한 범위가 필요하다는 것입니다. 알고있는 것과 다른 아이디어를 가리키는 것으로 "비율"이라는 단어를 놓쳤습니다.
닉 콕스

답변:


6

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 / linear regression / ...을 효과적으로 차단합니다. PCA는 특이 치에 민감합니다 (강력한 공분산 추정에는 풀 랭크 행렬이 필요하기 때문에). 내가 아는 한 모든 구성 변환 중 ILR 만 주요한 기본 가정없이 두 가지 문제를 모두 해결합니다. 그러나 상황은 조금 더 복잡합니다. CLR 좌표의 SVD는 ILR 공간에서 직교 기반을 제공하므로 (ILR 좌표는 CLR의 초평면에 걸쳐 있음) 분산 추정치가 ILR과 CLR간에 다르지 않습니다 (물론, ILR과 CLR은 모두 isometries이므로 심플 렉스). 그러나 ILR 좌표에 대한 강력한 공분산 추정 방법이 있습니다 [2].

업데이트 I

CLR이 상관 및 위치 의존적 방법에 유효하지 않다는 것을 설명하기 위해서입니다. 선형 적으로 독립적으로 분포 된 3 개의 구성 요소로 구성된 커뮤니티를 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
   ...: )

업데이트 II

내가받은 응답을 고려할 때 PCA가 CLR 변환 된 데이터에서 작동하지 않는다고 대답 한 시점이 없음을 지적해야합니다. 나는 CLR이 미묘한 방식으로 PCA를 깨뜨릴 수 있다고 말했는데 , 이는 차원 축소에는 중요하지 않지만 탐색 적 데이터 분석에는 중요합니다. @Archie이 인용 한 논문은 미생물 생태학을 다룹니다. 전산 생물학 분야에서 다양한 거리 행렬의 PCA 또는 PCoA는 데이터의 변동 원인을 탐색하는 데 사용됩니다. 내 대답은이 맥락에서만 고려해야합니다. 또한, 이것은 논문 자체에서 강조됩니다 :

... 구성 biplot [참고 : PCA 참조] 은 β- 다양성 분석을위한 주 좌표 (PCoA) 플롯에 비해 몇 가지 장점이 있습니다. 데이터가 부분 집합 일 때 얻은 결과는 매우 안정적이며 (Bian et al., 2017), 탐색 적 분석 은 단순히 데이터의 존재 부재 관계 나 과도한 희소성에 의해 주도되지 않습니다 (Wong et al., 2016; Morton et al. al., 2017).

Gloor et al., 2017

III 업데이트

발표 된 연구에 대한 추가 참고 자료 (참조를 추가 할 것을 권장하는 @Nick Cox에게 감사드립니다) :

  1. PCA에 CLR 사용에 대한 인수
  2. 상관 기반 방법에 CLR 사용에 대한 인수
  3. ILR 소개

2
단일 공분산 행렬은 pca에 문제가되지 않습니다!
kjetil b halvorsen

실제로 @kjetilbhalvorsen, PCA 자체는 매트릭스가 전체 순위 일 필요는 없다. 엄밀히 말하면, 단일 공분산 행렬은 하나 이상의 고유 값 만 발생합니다. 그러나 사람들은 일반적으로 PCA를 사용하여 구성 요소가 시작되는 분산 소스를 탐색합니다. 이것이 바로 "... 효과적으로 여러 가지 미묘한 방법으로 PCA / ...를 중단
시킵니다

따라서 특이점으로 인해 성분마다 설명되는 분산의 양을 계산할 수 없다는 것을 의미합니까? 그 외에는 여전히 차원 축소를 수행하기 위해 PCA를 수행 할 수 있습니다. 그러면 이것이 분산 분석 / 선형 회귀에 어떤 영향을 미칩니 까?
Archie

1
답변이 매우 흥미 롭기 때문에 +1입니다. 그러나 비판 없이는 가지 않습니다. 컴포지션 또는 clr 변환 된 데이터에서 PCA를 수행하는 것이 왜 "미묘한 방식으로"부적절했는지 (어떻게?) 정확히 설명하지 않은 것 같습니다. 또한 파이썬 코드를 제공하지만 결과는 제공하지 않습니다. 결과를 표시하고 주석을 달 수 있습니까? 마지막으로, ILR transfotm에 대한 링크를 남기고 읽을 수 있습니까?
ttnphns

1
@ttnphns 1) 의견에 언급 한 바와 같이 CLR은 컴포지션 클로저에 의해 도입 된 분산 소스의 왜곡을 제거하지 않고 탐색 적 데이터 분석에 영향을 미칩니다. 강력한 공분산 추정에는 풀 랭크 매트릭스가 필요합니다. 2) 내가 확실하지 않은 이유, 왜 당신이 결과가 없다고 말하는가 : 그것은 입력 및 출력 (즉 결과)을 가진 대화 형 파이썬 세션입니다. 3) ILR에 대한 참조를 추가했습니다.
Eli Korvigo

5

예, 데이터가 구성적일 때 가능하고 실제로해야합니다.

미생물학 분야의 리뷰는 여기에서 찾을 수 있습니다 .CLR 변환을 사용하고 PCA를 사용하여 마이크로 바이 옴 데이터 세트 (정의 구성에 따라)를 분석하도록 동기를 부여합니다. https://www.frontiersin.org/articles/10.3389/fmicb .2017.02224 / full .


불행히도, 그 논문은 많은 경우에 두 가지 공동 저자가 구성 데이터 분석의 챔피언이라는 점을 고려할 때 매우 잘못입니다.
Eli Korvigo

@EliKorvigo 그 의견은 근거가 있지만 그 자체로는 도움이되지 않습니다. 만약 당신이 출판 된 또는 적어도 공개적인 비평을 지적 할 수 있다면, 그러한 비판은 그림을 바꿀 것입니다.
Nick Cox

@NickCox는 Filzmoser와 Hron 의 논문이 있습니다. 앞서 언급 한 논문에 대한 직접적인 비판은 아니지만, 상관 관계 분석에 CLR을 사용하는 것에 반대하는 반면, 앞서 언급 한 논문은 CLR 기반 도구를 권장합니다.
Eli Korvigo

@NickCox Archie가 언급 한 논문의 마지막 두 저자 인 Pawlowsky-Glahn 박사와 Egozcue 박사에 대한 깊은 존경심을 강조하고 싶습니다. 실제로, 그들은 CLR의 단점을 해결하기 위해 ILR을 도입했습니다 (Egozcue and Pawlowsky-Glahn, 2003) . CLR과 관련하여 그들은 다음 과 같이 썼다 .
Eli Korvigo

"구성 데이터 및 분석 : 소개"(2006)에서 Pawlowsky-Glahn 및 Egozcue 상태는 계수에 "특정 이점이 있습니다. 표현은 부품에서 대칭이며 이러한 좌표는 Aitchison 거리 계산을 일반 거리로 줄입니다." 이중
플로트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.