Anda mungkin mengalami beberapa masalah dengan vanilla PCA pada koordinat CLR. Ada dua masalah utama dengan data komposisi:
- mereka sepenuhnya non-negatif
- mereka memiliki batasan jumlah
xG(x)
x^={log(x1G(x)),…,log(xnG(x))}={log(x1)−log(G(x)),…,log(xn)−log(G(x))}
Sekarang, pertimbangkan itu
catatan( G ( x ) ) = log( exp[ 1n∑i = 1ncatatan( xsaya) ] )= E[ log( x ) ]
∑ x^= ∑ [ log( x ) - E[ log( x ) ] ] =0
Dengan kata lain CLR menghapus batasan rentang nilai (yang baik untuk beberapa aplikasi), tetapi tidak menghilangkan batasan jumlah, menghasilkan matriks kovarians tunggal, yang secara efektif memecah (M) ANOVA / regresi linier / ... dan membuat PCA peka terhadap outlier (karena estimasi kovarian yang kuat membutuhkan matriks peringkat penuh). Sejauh yang saya tahu, dari semua transformasi komposisi hanya ILR mengatasi kedua masalah tanpa asumsi mendasar yang mendasarinya. Tapi situasinya sedikit lebih rumit. SVD dari koordinat CLR memberi Anda dasar ortogonal dalam ruang ILR (koordinat ILR menjangkau hyperplane dalam CLR), sehingga estimasi varians Anda tidak akan berbeda antara ILR dan CLR (yang tentu saja jelas, karena baik ILR dan CLR adalah isometri pada simpleks). Namun, ada metode untuk estimasi kovarian yang kuat pada koordinat ILR [2].
Perbarui I
Hanya untuk menggambarkan bahwa CLR tidak valid untuk metode korelasi dan tergantung lokasi. Mari kita asumsikan kita mencicipi sebuah komunitas yang terdiri dari tiga komponen yang berdistribusi normal linier independen 100 kali. Demi kesederhanaan, biarkan semua komponen memiliki harapan yang sama (100) dan varian (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
...: )
Pembaruan II
Mempertimbangkan tanggapan yang saya terima, saya merasa perlu untuk menunjukkan bahwa tidak ada jawaban dalam jawaban saya, saya telah mengatakan bahwa PCA tidak bekerja pada data yang diubah oleh CLR. Saya telah menyatakan bahwa CLR dapat memecahkan PCA dengan cara yang halus , yang mungkin tidak penting untuk pengurangan dimensi, tetapi penting untuk analisis data eksplorasi. Makalah yang dikutip oleh @Archie ini membahas ekologi mikroba. Dalam bidang itu biologi PCA komputasi atau PCoA pada berbagai matriks jarak digunakan untuk mengeksplorasi sumber variasi dalam data. Jawaban saya hanya harus dipertimbangkan dalam konteks ini. Selain itu, ini disorot dalam makalah itu sendiri:
... biplot komposisi [catatan: mengacu pada PCA] memiliki beberapa keunggulan dibandingkan plot koordinat utama (PCoA) untuk analisis β-diversity. Hasil yang diperoleh sangat stabil ketika data adalah subset (Bian et al., 2017), yang berarti bahwa analisis eksplorasi tidak didorong hanya oleh adanya tidak adanya hubungan dalam data atau dengan sparsity yang berlebihan (Wong et al., 2016; Morton et al., 2017).
Gloor et al., 2017
Pembaruan III
Referensi tambahan untuk penelitian yang diterbitkan (Saya berterima kasih kepada @Nick Cox atas rekomendasi untuk menambahkan lebih banyak referensi):
- Argumen yang menentang penggunaan CLR untuk PCA
- Argumen yang menentang penggunaan CLR untuk metode berbasis korelasi
- Pengantar ILR
clr
....