Bạn có thể gặp một số vấn đề với vanilla PCA trên tọa độ CLR. Có hai vấn đề lớn với dữ liệu thành phần:
- họ hoàn toàn không tiêu cực
- họ có một ràng buộc tổng
xG (x)
x^= ={log(x1G ( x )) ,...,log(xnG ( x ))}= ={log(x1)−log( G ( x ) ) ,…,log(xn)−log( G ( x ) ) }
Bây giờ, hãy xem xét rằng
đăng nhập( G ( x ) ) = nhật ký( điểm kinh nghiệm[ 1nΣi = 1nđăng nhập( xTôi) ] )= E[ nhật ký( x ) ]
Σ x^= ∑ [ nhật ký( x ) - E[ nhật ký( x ) ] ] =0
Nói cách khác, CLR loại bỏ giới hạn phạm vi giá trị (tốt cho một số ứng dụng), nhưng không loại bỏ ràng buộc tổng, dẫn đến ma trận hiệp phương sai số, phá vỡ hiệu quả (M) ANOVA / hồi quy tuyến tính / ... và thực hiện PCA nhạy cảm với các ngoại lệ (vì ước lượng hiệp phương sai mạnh đòi hỏi ma trận xếp hạng đầy đủ). Theo như tôi biết, trong tất cả các biến đổi thành phần chỉ ILR giải quyết cả hai vấn đề mà không có bất kỳ giả định cơ bản chính nào. Tuy nhiên, tình hình phức tạp hơn một chút. SVD của tọa độ CLR cung cấp cho bạn cơ sở trực giao trong không gian ILR (tọa độ ILR bao trùm một siêu phẳng trong CLR), do đó, ước tính phương sai của bạn sẽ không khác nhau giữa ILR và CLR (điều đó là hiển nhiên, bởi vì cả ILR và CLR đều là hình học trên đơn giản). Tuy nhiên, có các phương pháp để ước lượng hiệp phương sai mạnh mẽ trên tọa độ ILR [2].
Cập nhật tôi
Chỉ để minh họa rằng CLR không hợp lệ cho các phương pháp tương quan và phụ thuộc vào vị trí. Giả sử chúng ta lấy mẫu một cộng đồng gồm ba thành phần phân phối thường độc lập tuyến tính 100 lần. Để đơn giản, hãy để tất cả các thành phần có kỳ vọng bằng nhau (100) và phương sai (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
...: )
Cập nhật II
Xem xét các câu trả lời tôi đã nhận được, tôi thấy cần phải chỉ ra rằng không có điểm nào trong câu trả lời của tôi, tôi đã nói rằng PCA không hoạt động trên dữ liệu được chuyển đổi CLR. Tôi đã tuyên bố rằng CLR có thể phá vỡ PCA theo những cách tinh tế , điều này có thể không quan trọng đối với việc giảm kích thước, nhưng lại quan trọng đối với phân tích dữ liệu thăm dò. Bài viết được trích dẫn bởi @Archie bao gồm hệ sinh thái vi sinh vật. Trong lĩnh vực sinh học tính toán PCA hoặc PCoA trên các ma trận khoảng cách khác nhau được sử dụng để khám phá các nguồn khác nhau trong dữ liệu. Câu trả lời của tôi chỉ nên được xem xét trong bối cảnh này. Hơn nữa, điều này được nhấn mạnh trong chính bài báo:
... Biplot thành phần [lưu ý: đề cập đến PCA] có một số lợi thế so với các lô phối hợp chính (PCoA) để phân tích đa dạng β. Các kết quả thu được rất ổn định khi dữ liệu là tập hợp con (Bian và cộng sự, 2017), có nghĩa là phân tích thăm dò không bị chi phối đơn giản bởi các mối quan hệ vắng mặt trong dữ liệu cũng như bởi độ thưa thớt quá mức (Wong et al., 2016; Morton et al., 2017).
Gloor và cộng sự, 2017
Cập nhật III
Tài liệu tham khảo bổ sung cho nghiên cứu đã xuất bản (Tôi cảm ơn @Nick Cox về khuyến nghị để thêm nhiều tài liệu tham khảo hơn):
- Lập luận chống lại việc sử dụng CLR cho PCA
- Lập luận chống lại việc sử dụng CLR cho các phương pháp dựa trên tương quan
- Giới thiệu về ILR
clr
....