Mogą wystąpić pewne problemy z waniliowym PCA na współrzędnych CLR. Istnieją dwa główne problemy z danymi kompozycyjnymi:
- są ściśle nieujemne
- mają ograniczenie sumy
Różne transformacje kompozycyjne dotyczą jednego lub obu tych problemów. W szczególności CLR przekształca dane, pobierając logarytm stosunku między obserwowanymi częstotliwościami a ich średnią geometryczną G ( x ) , tj.xG ( x )
x^= { log( x1G ( x )) ,…,Log( xnG ( x )) }= { log( x1) - log( G ( x ) ) , … , log( xn) - log( G ( x ) ) }
Rozważ to teraz
log( G ( x ) ) = log( exp[ 1n∑i = 1nlog( xja) ] )= E[ log( x ) ]
∑ x^= ∑ [ log( x ) - E[ log( x ) ] ] =0
Innymi słowy CLR usuwa ograniczenie zakresu wartości (co jest dobre w niektórych aplikacjach), ale nie usuwa ograniczenia sumy, co powoduje powstanie pojedynczej macierzy kowariancji, która skutecznie łamie (M) ANOVA / regresję liniową / ... i powoduje PCA wrażliwa na wartości odstające (ponieważ solidne oszacowanie kowariancji wymaga matrycy pełnej rangi). O ile mi wiadomo, ze wszystkich transformacji kompozycyjnych tylko ILR rozwiązuje oba problemy bez żadnych głównych założeń. Sytuacja jest jednak nieco bardziej skomplikowana. SVD współrzędnych CLR daje podstawę ortogonalną w przestrzeni ILR (współrzędne ILR obejmują hiperpłaszczyznę w CLR), więc twoje oszacowania wariancji nie będą się różnić między ILR i CLR (to oczywiście oczywiste, ponieważ zarówno ILR, jak i CLR są izometriami na simplex). Istnieją jednak metody solidnego oszacowania kowariancji na współrzędnych ILR [2].
Aktualizacja I
Aby zilustrować, że CLR nie jest poprawny dla metod korelacji i metod zależnych od lokalizacji. Załóżmy, że 100 razy próbkujemy grupę trzech liniowo niezależnych normalnie rozłożonych komponentów. Dla uproszczenia, niech wszystkie komponenty mają równe oczekiwania (100) i wariancje (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
...: )
Aktualizacja II
Biorąc pod uwagę odpowiedzi, które otrzymałem, uważam za konieczne wskazanie, że w żadnym momencie mojej odpowiedzi nie powiedziałem, że PCA nie działa na danych przekształconych przez CLR. Stwierdziłem, że CLR może łamać PCA w subtelny sposób, co może nie być ważne dla zmniejszenia wymiarów, ale jest ważne dla analizy danych eksploracyjnych. Artykuł cytowany przez @Archie dotyczy ekologii drobnoustrojów. W tej dziedzinie biologii obliczeniowej PCA lub PCoA na różnych matrycach odległości są wykorzystywane do badania źródeł zmienności danych. Moja odpowiedź powinna być rozpatrywana tylko w tym kontekście. Co więcej, zostało to podkreślone w samym dokumencie:
... Kompozytowy dwupłat [uwaga: odnoszący się do PCA] ma kilka zalet w porównaniu do głównych wykresów współrzędnych (PCoA) do analizy różnorodności β. Uzyskane wyniki są bardzo stabilne, gdy dane są podzbiorowe (Bian i in., 2017), co oznacza, że analiza eksploracyjna nie jest napędzana jedynie relacjami braku obecności w danych ani nadmierną rzadkością (Wong i in., 2016; Morton i in. al., 2017).
Gloor i in., 2017
Aktualizacja III
Dodatkowe odniesienia do opublikowanych badań (dziękuję @Nick Cox za zalecenie dodania kolejnych referencji):
- Argumenty przeciwko używaniu CLR dla PCA
- Argumenty przeciwko używaniu CLR dla metod opartych na korelacji
- Wprowadzenie do ILR
clr
...