У вас можуть виникнути проблеми з ванільним PCA на координатах CLR. Є дві основні проблеми з композиційними даними:
- вони суворо негативні
- вони мають обмеження суми
Різні композиційні перетворення стосуються одного або обох цих питань. Зокрема, CLR перетворює ваші дані, приймаючи журнал відношення між спостережуваними частотами та їх середнім геометричним значенням , тобтохG ( x )
х^= { журнал( х1G ( x )) ,…,Журнал( хнG ( x )) }= { журнал( х1) - журнал( G ( x ) ) , … , журнал( хн) - журнал( G ( x ) ) }
Тепер, врахуйте це
журнал( G ( x ) ) = журнал( Досвід[ 1н∑i = 1нжурнал( хi) ] )= Е[ журнал( х ) ]
Це фактично означає, що
∑ x^= ∑ [ журнал( x ) - E[ журнал( x ) ] ] =0
Іншими словами, CLR знімає обмеження діапазону значень (що добре для деяких застосувань), але не знімає обмеження суми, внаслідок чого виникає сингулярна коваріаційна матриця, яка ефективно розбиває (M) ANOVA / лінійну регресію / ... і робить PCA, чутливий до людей, що переживають люди (тому що для надійної оцінки коваріації потрібна матриця повного рангу). Наскільки я знаю, з усіх композиційних перетворень лише ILR вирішує обидва питання без жодних основних припущень. Однак ситуація дещо складніша. SVD координат CLR дає вам ортогональну основу в просторі ILR (координати ILR охоплюють гіперплан у CLR), тому ваші оцінки дисперсії не відрізнятимуться між ILR та CLR (це, очевидно, очевидно, тому що обидва ILR і CLR є ізометріями на симплекс). Однак існують методи для надійної оцінки коваріації на координатах ІЛР [2].
Оновити I
Просто для того, щоб проілюструвати, що 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
...: )
Оновлення II
Враховуючи отримані вами відповіді, я вважаю за потрібне зазначити, що жодного разу у своїй відповіді я не сказав, що PCA не працює на даних, трансформованих CLR. Я заявляв, що CLR може порушити PCA тонко , що може не мати значення для зменшення розмірності, але важливо для аналізу даних. Доповідь, яку цитує @Archie, висвітлює мікробну екологію. У цій галузі обчислювальної біології PCA або PCoA на різних дистанційних матрицях використовуються для дослідження джерел змін даних. Мою відповідь слід розглядати лише в цьому контексті. Більше того, це підкреслено в самій статті:
... Композиційний біплот [зауваження: посилаючись на PCA] має ряд переваг перед основними ділянками координат (PCoA) для аналізу β-різноманітності. Отримані результати є дуже стабільними, коли дані підмножилися (Bian et al., 2017), що означає, що дослідницький аналіз не визначається просто відсутністю зв’язків у даних або надмірною розрідженістю (Wong et al., 2016; Morton et співавт., 2017).
Слава та ін., 2017
Оновлення III
Додаткові посилання на опубліковані дослідження (я дякую @Nick Cox за рекомендацію додати більше посилань):
- Аргументи проти використання CLR для PCA
- Аргументи проти використання CLR для кореляційних методів
- Вступ до ILR
clr
робить ....