CLR koordinatlarında vanilya PCA ile ilgili bazı sorunlar yaşayabilirsiniz. Bileşim verileriyle ilgili iki önemli sorun vardır:
- kesinlikle olumsuz değiller
- toplam kısıtlaması var
xG(x)
x^={log(x1G(x)),…,log(xnG(x))}={log(x1)−log(G(x)),…,log(xn)−log(G(x))}
Şimdi şunu düşünün
log(G(x))=log(exp[1n∑i=1nlog(xi)])=E[log(x)]
∑x^=∑[log(x)−E[log(x)]]=0
Başka bir deyişle CLR, değer aralığı kısıtlamasını kaldırır (bazı uygulamalar için iyidir), ancak toplam kısıtlamasını kaldırmaz, bu da (M) ANOVA / lineer regresyon / ... 'ı etkin bir şekilde kıran ve tek bir kovaryans matrisine neden olur. Aykırı değerlere duyarlı PCA (sağlam kovaryans tahmini tam dereceli bir matris gerektirdiğinden). Bildiğim kadarıyla, tüm kompozisyon dönüşümlerinden sadece ILR her iki konuyu da altında yatan temel varsayımlar olmadan ele alıyor. Ancak durum biraz daha karmaşıktır. CLR koordinatlarının SVD'si, ILR alanında ortogonal bir temel verir (ILR koordinatları CLR'de bir hiper düzlemi kapsar), bu nedenle varyans tahminleriniz ILR ve CLR arasında farklılık göstermez (elbette açıktır, çünkü hem ILR hem de CLR, izometriktir. basit). Bununla birlikte, ILR koordinatlarında sağlam kovaryans tahmini için yöntemler vardır [2].
Güncelleme I
Sadece CLR'nin korelasyon ve konuma bağlı yöntemler için geçerli olmadığını göstermek için. Diyelim ki doğrusal olarak bağımsız üç dağıtılmış bileşenden oluşan bir topluluğu 100 kez örnekliyoruz. Basitlik adına, tüm bileşenlerin eşit beklentilere (100) ve varyanslara (100) sahip olmasına izin verin:
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
...: )
Güncelleme II
Aldığım yanıtları göz önünde bulundurarak, cevabımın hiçbir noktasında PCA'nın CLR ile dönüştürülmüş veriler üzerinde çalışmadığını söylediğimi belirtmek gerekir. CLR'nin boyutsal azaltma için önemli olmayabilecek, ancak keşifsel veri analizi için önemli olabilecek ince yollarla PCA'yı kırabileceğini ifade ettim . @Archie tarafından belirtilen makale mikrobiyal ekolojiyi kapsamaktadır. Bu hesaplamalı biyoloji alanında, çeşitli mesafe matrisleri üzerinde PCA veya PCoA verilerdeki varyasyon kaynaklarını araştırmak için kullanılır. Cevabım sadece bu bağlamda ele alınmalıdır. Dahası, bu makalenin kendisinde vurgulanır:
... Kompozisyon biplotunun [not: PCA'ya atıfta bulunmak] β-çeşitlilik analizi için ana koordinat (PCoA) grafiklerine göre çeşitli avantajları vardır. Veriler alt kümeye alındığında elde edilen sonuçlar çok kararlıdır (Bian ve diğ., 2017), bu da keşifsel analizin sadece verilerdeki mevcudiyet yokluğu ilişkilerinden veya aşırı seyreklikten kaynaklanmadığını (Wong ve ark., 2016; Morton ve ark. al., 2017).
Gloor ve ark., 2017
Güncelleme III
Yayınlanan araştırmalara ek referanslar (Daha fazla referans ekleme önerisi için @ Nick Cox'a teşekkür ederim):
- PCA için CLR kullanımına karşı argümanlar
- Korelasyon tabanlı yöntemler için CLR kullanımına karşı argümanlar
- ILR'ye Giriş
clr
....