คุณอาจประสบปัญหาบางอย่างกับ vanilla PCA ในพิกัด CLR มีสองปัญหาที่สำคัญเกี่ยวกับข้อมูลองค์ประกอบ:
- พวกเขาไม่เคร่งครัดเชิงลบ
- พวกเขามีข้อ จำกัด
การแปลงองค์ประกอบแบบต่างๆแก้ปัญหาหนึ่งหรือทั้งสองอย่าง โดยเฉพาะอย่างยิ่ง CLR แปลงข้อมูลของคุณโดยบันทึกอัตราส่วนระหว่างความถี่ที่สังเกตได้xและค่าเฉลี่ยเรขาคณิตของพวกเขาG ( x )เช่น
x^= { log( x1G ( x )) ,…,บันทึก( xnG ( x )) }= { log( x1) - บันทึก( G ( x ) ) , … , บันทึก( xn) - บันทึก( G ( x ) ) }
ลองพิจารณาดู
เข้าสู่ระบบ( G ( x ) ) = บันทึก(ประสบการณ์[ 1nΣi = 1nเข้าสู่ระบบ( xผม) ] )= E[ บันทึก( x ) ]
นี้มีประสิทธิภาพหมายความว่า
Σ∑ x^= ∑ [ บันทึก( x ) - E[ บันทึก( x ) ] ] =0
กล่าวอีกนัยหนึ่ง CLR ลบข้อ จำกัด ช่วงค่า (ซึ่งดีสำหรับบางแอปพลิเคชัน) แต่ไม่ได้ลบข้อ จำกัด ผลรวมในเมทริกซ์ความแปรปรวนร่วมเอกพจน์ซึ่งแบ่งได้อย่างมีประสิทธิภาพ (M) ANOVA / การถดถอยเชิงเส้น / ... และทำให้ PCA อ่อนไหวต่อค่าผิดปกติ (เนื่องจากการประมาณค่าความแปรปรวนร่วมที่แข็งแกร่งต้องใช้เมทริกซ์แบบเต็มอันดับ) เท่าที่ฉันรู้การแปลงองค์ประกอบทั้งหมดนั้นมีเพียง ILR เท่านั้นที่จัดการกับปัญหาทั้งสองโดยไม่มีข้อสมมติฐานที่สำคัญ แม้ว่าสถานการณ์จะซับซ้อนขึ้นเล็กน้อย SVD ของ CLR พิกัดช่วยให้คุณมีพื้นฐานมุมฉากในพื้นที่ ILR (พิกัด ILR ครอบคลุม hyperplane ใน CLR) ดังนั้นการประมาณค่าความแปรปรวนของคุณจะไม่แตกต่างกันระหว่าง ILR และ CLR (ที่แน่นอนแน่นอนเพราะ ILR และ CLR เป็น isometries บน เริม) อย่างไรก็ตามมีวิธีการประเมินความแปรปรวนร่วมที่มีประสิทธิภาพในพิกัด ILR [2]
อัปเดตฉัน
เพียงเพื่อแสดงให้เห็นว่า 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 ในเมทริกซ์ระยะทางต่างๆถูกใช้เพื่อสำรวจแหล่งที่มาของการเปลี่ยนแปลงในข้อมูล คำตอบของฉันควรได้รับการพิจารณาในบริบทนี้เท่านั้น ยิ่งไปกว่านั้นสิ่งนี้ถูกเน้นไว้ในกระดาษ:
... biplot การประพันธ์[หมายเหตุ: อ้างอิงถึง PCA]มีข้อดีหลายประการเกี่ยวกับแผนการประสานงานหลัก (PCoA) สำหรับการวิเคราะห์ diversity- ความหลากหลาย ผลลัพธ์ที่ได้มีความเสถียรมากเมื่อข้อมูลเป็นชุดย่อย (Bian et al., 2017) ซึ่งหมายความว่าการวิเคราะห์เชิงสำรวจไม่ได้เกิดจากความสัมพันธ์ที่ขาดหายไปของข้อมูลหรือจากการกระจัดกระจายมากเกินไป (Wong et al., 2016; Morton et al., 2017)
Gloor et al., 2017
อัปเดต III
การอ้างอิงเพิ่มเติมเกี่ยวกับงานวิจัยที่ตีพิมพ์ (ฉันขอบคุณ @Nick Cox สำหรับคำแนะนำเพื่อเพิ่มการอ้างอิงเพิ่มเติม):
- ข้อโต้แย้งเกี่ยวกับการใช้ CLR สำหรับ PCA
- ข้อโต้แย้งเกี่ยวกับการใช้ CLR สำหรับวิธีอิงตามสหสัมพันธ์
- รู้เบื้องต้นเกี่ยวกับ ILR
clr
....