Es können Probleme mit Vanille-PCA bei CLR-Koordinaten auftreten. Es gibt zwei Hauptprobleme bei Zusammensetzungsdaten:
- Sie sind absolut nicht negativ
- Sie haben eine Summenbeschränkung
xG ( x )
x^= { log( x1G ( x )) ,…,Log( xnG ( x )) }= { log( x1) - log( G ( x ) ) , … , log( xn) - log( G ( x ) ) }
Betrachten wir das jetzt
Log( G ( x ) ) = log( exp[ 1n∑i = 1nLog( xich) ] )= E[ log( x ) ]
∑ x^= ∑ [ log( x ) - E[ log( x ) ] ] =0
Mit anderen Worten, CLR hebt die Wertebereichsbeschränkung auf (was für einige Anwendungen gut ist), entfernt jedoch nicht die Summenbeschränkung, was zu einer singulären Kovarianzmatrix führt, die effektiv (M) ANOVA / lineare Regression / ... unterbricht und macht PCA empfindlich gegenüber Ausreißern (da eine robuste Kovarianzschätzung eine Matrix mit vollem Rang erfordert). Von allen Kompositionstransformationen befasst sich meines Wissens nur ILR mit beiden Fragen, ohne wesentliche zugrunde liegende Annahmen. Die Situation ist jedoch etwas komplizierter. Die SVD der CLR-Koordinaten gibt Ihnen eine orthogonale Basis im ILR-Raum (ILR-Koordinaten erstrecken sich über eine Hyperebene in CLR), sodass sich Ihre Varianzschätzungen nicht zwischen ILR und CLR unterscheiden (das ist natürlich offensichtlich, da sowohl ILR als auch CLR Isometrien auf der ILR sind Simplex). Es gibt jedoch Methoden zur robusten Kovarianzschätzung an ILR-Koordinaten [2].
Aktualisiere ich
Nur um zu veranschaulichen, dass CLR für Korrelations- und ortsabhängige Methoden nicht gültig ist. Nehmen wir an, wir probieren eine Community von drei linear unabhängigen normalverteilten Komponenten 100 Mal aus. Der Einfachheit halber sei angenommen, dass alle Komponenten die gleichen Erwartungen (100) und Abweichungen (100) haben:
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
...: )
Update II
In Anbetracht der Antworten, die ich erhalten habe, muss ich darauf hinweisen, dass ich zu keinem Zeitpunkt in meiner Antwort gesagt habe, dass PCA bei CLR-transformierten Daten nicht funktioniert. Ich habe festgestellt, dass CLR PCA auf subtile Weise aufbrechen kann, was für die Dimensionsreduktion möglicherweise nicht wichtig ist, für die explorative Datenanalyse jedoch wichtig ist. Das von @Archie zitierte Papier befasst sich mit der mikrobiellen Ökologie. In diesem Bereich der Computational Biology werden PCA oder PCoA auf verschiedenen Distanzmatrizen verwendet, um Variationsquellen in den Daten zu untersuchen. Meine Antwort sollte nur in diesem Zusammenhang betrachtet werden. Darüber hinaus wird dies im Papier selbst hervorgehoben:
... Der kompositorische Biplot [Anmerkung: Bezug nehmend auf PCA] hat mehrere Vorteile gegenüber den Hauptkoordinatendiagrammen (PCoA-Diagrammen) für die β-Diversitätsanalyse. Die erhaltenen Ergebnisse sind sehr stabil, wenn die Daten Teilmengen sind (Bian et al., 2017), was bedeutet, dass die explorative Analyse nicht nur auf die Beziehung zwischen Vorhandensein und Nichtvorhandensein in den Daten oder auf übermäßige Sparsamkeit zurückzuführen ist (Wong et al., 2016; Morton et al., 2016) al., 2017).
Gloor et al., 2017
Update III
Zusätzliche Verweise auf veröffentlichte Forschungsergebnisse (ich danke @Nick Cox für die Empfehlung, weitere Verweise hinzuzufügen):
- Argumente gegen die Verwendung von CLR für PCA
- Argumente gegen die Verwendung von CLR für korrelationsbasierte Methoden
- Einführung in ILR
clr
passiert ...