การเลือกส่วนประกอบ PCA ที่แยกกลุ่ม


13

ฉันมักใช้ในการวิเคราะห์ข้อมูลหลายตัวแปรโดยใช้ PCA (ข้อมูล omics ที่มีตัวแปรนับแสนและตัวอย่างหลายสิบหรือหลายร้อย) ข้อมูลมักมาจากการทดลองกับตัวแปรอิสระหลายหมวดหมู่ที่กำหนดกลุ่มและฉันมักจะต้องผ่านองค์ประกอบบางอย่างก่อนที่ฉันจะสามารถหาคนที่แสดงการแยกระหว่างกลุ่มที่น่าสนใจ ฉันได้ค้นพบวิธีการดั้งเดิมในการค้นหาส่วนประกอบที่แบ่งแยกเช่นนั้นและฉันสงสัยว่า

  1. ขอบเขตนี้สมเหตุสมผล / สมเหตุสมผลและ
  2. ไม่ว่าจะมีวิธีที่ดีกว่าในการบรรลุเป้าหมายเดียวกัน

โปรดทราบว่านี่คือการสำรวจ ก่อนที่จะโน้มน้าวใจคนอื่นฉันต้องการโน้มน้าวตัวเอง ถ้าฉันเห็นว่ามีส่วนประกอบที่แยกความแตกต่างของกลุ่มผลประโยชน์ (เช่นการควบคุมกับการรักษา) อย่างชัดเจนแม้ว่าพวกเขาจะรับผิดชอบส่วนย่อยของความแปรปรวนของการตอบสนองฉันก็เชื่อว่ามันเป็นผลมาจากการพูด การเรียนรู้

นี่คือแนวทางของฉัน ฉันจะใช้ชุดข้อมูลตัวอย่าง "metabo" จาก pca3d ใน R

แนวคิดคือการประเมินความแปรปรวนของแต่ละองค์ประกอบที่สามารถอธิบายได้โดยตัวแปรอิสระ สำหรับสิ่งนี้ฉันคำนวณแบบจำลองอย่างง่ายสำหรับแต่ละองค์ประกอบและใช้R2เป็นตัวชี้วัดในการสั่งซื้อส่วนประกอบจาก "ที่น่าสนใจที่สุด" ถึง "น่าสนใจน้อยที่สุด"

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

นี่คือผลลัพธ์ metabo[,1]พล็อตการแสดงร้อยละของความแปรปรวนของแต่ละองค์ประกอบอธิบายโดยตัวแปรอิสระ

ป้อนคำอธิบายรูปภาพที่นี่

เราสามารถเรียงลำดับส่วนประกอบโดยเพื่อค้นหาว่าจะแสดงองค์ประกอบใดด้วย; สามองค์ประกอบแรกคือ 2, 1 และ 7r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

นี่คือพล็อต:

ป้อนคำอธิบายรูปภาพที่นี่

(หมวดหมู่สีแดงและสีเขียวเป็นกลุ่มอาสาสมัครสองกลุ่มที่ไม่ใช่ผู้ป่วยและคาดว่าจะไม่สามารถแยกแยะได้)

เพื่อปฏิรูปคำถามของฉัน

  1. วิธีนี้เหมาะสมกับคุณหรือไม่? ปัญหาของฉันคือดูเหมือนว่าการขุดลอกข้อมูลมากเกินไป ยิ่งไปกว่านั้นฉันคิดว่าบางทีฉันควรพลิกตารางและถามว่าส่วนใดของความแปรปรวนในตัวแปรอิสระอธิบายโดยตัวแปรแต่ละตัว ในที่สุดฉัน (เกือบ) แน่ใจว่าฉันได้คิดค้นล้อใหม่ไม่ดีดังนั้นคำถามที่สองของฉันคือ
  2. มีอะไรที่ดีกว่านี้อีกไหม

โปรดทราบว่าฉันไม่ต้องการเปลี่ยนเป็นสี่เหลี่ยมจัตุรัสที่น้อยที่สุดบางส่วนหรืออะไรทำนองนี้ในขั้นตอนนี้ ฉันแค่ต้องการที่จะวินิจฉัย PCA ในบริบทของการจำแนกของฉัน


2
ฉันต้องการแสดงความคิดเห็นเพียงสองข้อเกี่ยวกับคำถามที่น่าสนใจของคุณ 1) อธิบายด้วยคำพูดของคุณนอกเหนือจากการแสดงรหัส (จำไว้ว่าคนที่นี่ใช้ซอฟต์แวร์ต่าง ๆ ไม่จำเป็นต้องเป็น R) 2) scatterplot นั้นไม่น่าเชื่อมากนักหากไม่มี spikes ถึงพื้น นอกจากนี้ถ้าคุณมีเฉพาะข้อสงสัยเกี่ยวกับวิธีการของคุณกรุณาพูดให้พวกเขาออกจะทำให้คำถามที่มุ่งเน้นมากขึ้น
ttnphns

1
แก้ไข: เพื่อชี้แจงคุณแรกทำ PCA แล้วพยายามแยกส่วนประกอบหลักที่อธิบายได้ดีที่สุดโดยตัวแปรเฉพาะบางอย่าง? คุณตรวจสอบข้ามสิ่งเหล่านี้ด้วยพล็อตหินกรวดหรือไม่? อาจเป็นกรณีที่ x ที่คุณเลือกจากชุดข้อมูลของคุณเกิดขึ้นเพื่ออธิบายความแปรปรวนจำนวนมากในองค์ประกอบหลัก แต่ฉันไม่แน่ใจว่านั่นหมายความว่าอะไรถ้าความแปรปรวนต่ำมากตามองค์ประกอบหลักนั้น
shadowtalker

1
R2

2
to find out what share of the overall variance in the data matrix is explained by a given classificationหากต้องการทราบเพียงแค่นี้คุณไม่จำเป็นต้องมี PCA เพียงคำนวณสัดส่วนของผลรวมระหว่างกลุ่มกับจำนวนรวมของช่องสี่เหลี่ยม(SStotal-SSwithin)/SStotalโดยที่ SSwithin เป็นกลุ่มภายในผลรวมของกลุ่มของสี่เหลี่ยมจัตุรัส
ttnphns

1
ฉันไม่เห็นปัญหาใด ๆ กับวิธีที่คุณใช้ประโยชน์จาก PCA แต่ฉันไม่เข้าใจว่าทำไมคุณถึงต้องการมัน (เพียงเพราะคุณชอบมันใช่ไหม) เพราะฉันไม่เห็นเป้าหมายที่แน่นอนของคุณฉันไม่สามารถบอกอะไรให้คุณIs there anything better?ได้
ttnphns

คำตอบ:


8

คำตอบสำหรับคำถามของคุณ # 1 คือใช่โซลูชันของคุณจะทำการขุดลอกข้อมูล คำตอบสำหรับคำถามของคุณ # 2 คือใช่มีวิธีที่ดีกว่าในวรรณคดี

n<<p

คุณกำลังเรียกใช้การวิเคราะห์ที่มีลักษณะองค์ประกอบหลักถดถอยยกเว้นว่าคุณได้เปลี่ยนตัวแปรอิสระและตัวแปรของคุณที่เกิดในที่มีขนาดใหญ่หลายตัวแปร (เมื่อเทียบกับหลาย ๆ คน ) การวิเคราะห์การถดถอย การถดถอยหลายตัวแปรต้องการให้ขนาดตัวอย่างของคุณใหญ่กว่าจำนวนของตัวแปรตามซึ่งเป็นข้อกำหนดที่คุณละเมิดอย่างละเอียดในตัวอย่างของคุณ

หากคุณมีความมุ่งมั่นอย่างแท้จริงที่จะใช้ PCA กับข้อมูลของคุณจากนั้นใช้การถดถอยหลายตัวแปรคุณต้องใช้วิธีการที่เหมาะสม ตัวอย่างเช่นค้นหา MRCE และวิธีการที่เกี่ยวข้อง [1]

อย่างไรก็ตามแม้จะมีความคิดเห็นที่น่าสงสัยไม่กี่อย่างก็ตามทุกอย่างในการวิเคราะห์ของคุณแสดงให้เห็นว่าเป้าหมายสูงสุดของคุณคือการระบุความสัมพันธ์ระหว่างชุดตัวแปรต่อเนื่องขนาดใหญ่ (metabo [, - 1]) และตัวแปรเด็ดเดี่ยวเดียว (metabo [ 1]) PCA เป็นวิธีที่ไม่ดีในการทำสิ่งนี้ให้สำเร็จ มีวิธีการแก้ปัญหาทั่วไปสองแบบสำหรับปัญหานี้ในกรณีที่มีมิติสูง: อันดับแรกการแก้ปัญหาที่มีการแยกกลุ่มและการแก้ปัญหาที่มีโครงสร้างปัจจัย

โดยทั่วไปแล้วการแก้ปัญหาโดยใช้ Sparsity สมมติว่ามีเพียงสัดส่วนของตัวแปรที่น้อยมากเท่านั้นที่เกี่ยวข้องกับตัวแปรตามหมวดหมู่ที่น่าสนใจและพยายามค้นหาเซตย่อยขนาดเล็กนี้ เช่นดู DALASS [2] วิธีการตามโครงสร้างปัจจัยสมมติว่าตัวแปร discriminator ของคุณเป็นรายการของตัวแปรแฝงที่แฝงอยู่กับความสัมพันธ์ที่แท้จริงกับตัวแปรเด็ดขาด ตัวอย่างของวิธีการเรียนนี้คือ DLDA [3]

โปรดทราบว่าฉันไม่จำเป็นต้องแนะนำวิธีการใด ๆ ที่ฉันได้กล่าวถึงสำหรับข้อมูลของคุณ คุณต้องพิจารณาอย่างรอบคอบถึงเป้าหมายและความรู้เบื้องต้นของปัญหาในการเลือกวิธีการที่เหมาะสม

[1] Rothman, Levina, Zhu (2010) การถดถอยหลายตัวแปรแบบเบาบางด้วยการประมาณค่าความแปรปรวนร่วม วารสารการคำนวณและสถิติแบบกราฟิกเล่ม 19 เล่มที่ 4 หน้า 947–962

[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: การเลือกตัวแปรในการวิเคราะห์จำแนกผ่าน LASSO, สถิติการคำนวณและการวิเคราะห์ข้อมูล, เล่มที่ 51, ฉบับที่ 8, 1 พฤษภาคม 2007, หน้า 3718-3736

[3] Yu, Yang (2001) อัลกอริธึม LDA โดยตรงสำหรับข้อมูลมิติสูงพร้อมแอปพลิเคชันเพื่อจดจำใบหน้า การจดจำรูปแบบ 34, 2067-2070


2
ฉันได้เริ่มรางวัลใหม่เพื่อให้รางวัลคำตอบนี้
มกราคม

1
@ มกราคม: นี่เป็นคำตอบที่ดี แต่ฉันอยากจะชี้ให้เห็นว่า "direct LDA" เป็นอัลกอริธึมที่แปลกประหลาดที่สุดดูGao and Davis, 2005, ทำไม LDA โดยตรงไม่เท่ากับ LDA : "เราแสดงให้เห็นแล้ว .. D-LDA อาจกำหนดข้อ จำกัด ด้านประสิทธิภาพที่สำคัญในแอปพลิเคชันทั่วไป "ดังนั้นควรระมัดระวังด้วย
อะมีบาพูดว่า Reinstate Monica

@ amoeba ขอบคุณสำหรับการอ้างอิง ฉันมีความกังวลเกี่ยวกับ DLDA ชั่วครู่เนื่องจากไม่มีเหตุผลสำหรับการเลือกส่วนประกอบในวิธีนั้น ฉันเห็นว่ามันเป็นวิธีแก้ปัญหาที่เฉพาะเจาะจงซึ่งไม่จำเป็นต้องพูดถึงโดยทั่วไปนอกเหนือจากปัญหาการเลือกปฏิบัติถึงแม้ว่ามันจะสามารถปรับให้เข้ากับปัญหาใด ๆ ได้อย่างง่ายดายด้วยความรู้บางส่วนขององค์ประกอบที่มีประโยชน์มากที่สุดสำหรับการเลือกปฏิบัติ ทุกวิธีการแก้ปัญหาการเลือกปฏิบัติในระดับสูงด้วยโครงสร้างปัจจัยสันนิษฐานประสบปัญหา ... คุณพบวิธีการที่ดีกว่านี้หรือไม่? ฉันสนใจความคิดเห็นของคุณที่นี่
ahfoss

nk

4

@ahfoss ชี้ให้คุณเห็นว่า LDA เป็นอะนาล็อกการจำแนกประเภทไปยัง PCA จริงๆแล้วทั้งสองวิธีนี้มีความสัมพันธ์ซึ่งกันและกันและ PLS:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLS สามารถมองเห็นได้ว่าเป็น normalization เช่น LASSO และยังมี PLS กระจัดกระจายอยู่ (แม้ว่าฉันจะไม่ได้ใช้มัน: ข้อมูลของฉันเหมาะกับ PLS ปกติมากกว่าซึ่งไม่ถือว่าเป็นช่องว่าง) สำหรับการอภิปรายที่ดีของวิธีการที่แตกต่างกันกูดูเช่นองค์ประกอบของการเรียนรู้ทางสถิติ

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

คำแนะนำการใช้งาน: ในกรณีที่คุณทำงานใน R ฉันมีแพ็คเกจที่อยู่ระหว่างการพัฒนาซึ่งมีโมเดล PLS-LDA และ PCA-LDA แจ้งให้เราทราบหากคุณต้องการทดลองใช้


เพื่อหลีกเลี่ยงการขุดลอกข้อมูลคุณต้องตรวจสอบรุ่นสุดท้ายของคุณ (= วัดประสิทธิภาพ) ด้วยข้อมูลอิสระ

อิสระที่นี่หมายความว่ากรณีนี้ (ผู้ป่วย?) ไม่ได้มีส่วนร่วมในการปรับรูปแบบในทางใดทางหนึ่ง โดยเฉพาะอย่างยิ่ง,

  • ไม่ได้ป้อนการประมวลผลล่วงหน้าใด ๆ ที่เกี่ยวข้องกับหลายกรณีเช่นการจัดกึ่งกลางหรือการกำหนดมาตรฐาน
  • ไม่ได้เข้าสู่การคำนวณ PCA / PLS / ...
  • ไม่ได้ใช้สำหรับการประมาณค่าพารามิเตอร์มากเกินไป

เนื่องจากคุณมีเพียงไม่กี่กรณีกลยุทธ์การสุ่มตัวอย่างใหม่จะเหมาะสม ในสถานการณ์เช่นนี้เป็นการดีที่สุดที่จะแก้ไขไฮเปอร์พารามิเตอร์ใด ๆ (เช่นจำนวนของพีซีหรือตัวแปรแฝง PLS หรือ LASSO ที่ถูกผูกไว้) โดยความรู้ภายนอกเพื่อหลีกเลี่ยงการแยกข้อมูลการฝึกอบรมภายในของคุณ


+1 สำหรับรูปแบบการตรวจสอบข้าม สำคัญมาก ๆ. อย่างไรก็ตามฉันอยากจะได้ยินจาก OP @January ผู้ซึ่งกล่าวว่าเขาไม่ได้สนใจในการเลือกปฏิบัติแม้ว่าปัญหาของเขา / เธอจะเหมาะสมกับการวิเคราะห์การแบ่งแยก / การจำแนกประเภท
ahfoss

ฉันไม่เห็นด้วยกับการยืนยันของคุณว่า k-mean / PCA / etc เป็นของครอบครัวเดียวกัน นี่ก็หมายความว่าพวกเขาเป็นกรณีพิเศษของรูปแบบหรืออัลกอริทึมเดียวกันซึ่งไม่เป็นความจริง อัลกอริทึม PCA เป็นการคำนวณเมทริกซ์อย่างง่ายในขณะที่ k-mean เป็นอัลกอริทึมซ้ำที่ถูกเปรียบเทียบกับอัลกอริทึม EM (ไม่ถูกต้องทางเทคนิคเนื่องจากไม่มีฟังก์ชันความน่าจะเป็น แต่ยังเป็นการเปรียบเทียบที่มีประโยชน์ใน IMHO บางประการ)
ahfoss

1
คุณหมายถึงฟังก์ชั่น plsgenomics :: pls.lda หรือไม่? ถ้าไม่ใช่แพ็คเกจของคุณจะมีความแตกต่าง / ปรับปรุงอย่างไร ฉันจะชี้ให้เห็นถึงผู้อ่านที่สนใจว่า PLS-LDA โดยทั่วไปนั้นยอดเยี่ยมกว่าเทคนิคที่ใช้กันทั่วไปของการรัน PLS ด้วยตัวแปรผลลัพธ์แบบหลอกๆ ในขณะที่วิธีการหลังนี้ไม่จำเป็นต้องไม่ถูกต้อง แต่ก็เป็น kludge แน่นอนไม่น้อยเพราะคุณสามารถรับความน่าจะเป็นที่คาดการณ์ได้น้อยกว่าศูนย์หรือมากกว่าหนึ่ง!
ahfoss

@ahfoss: ฉันไม่ได้หมายถึงอัลกอริทึมเนื่องจากโมเดลพื้นฐานเดียวกันสามารถคำนวณได้โดยอัลกอริทึมที่แตกต่างกัน เช่นสำหรับ PCA คุณสามารถใช้อัลกอริทึมซ้ำ (NIPALS, POWER) หรือไม่ใช่ซ้ำ (EVD, SVD) อาจเป็นคำที่ดีกว่าแทน k-mean น่าจะเป็น "การวิเคราะห์กลุ่มที่ย่อเล็กสุดภายในผลรวมกลุ่มของกำลังสองซึ่ง e-k หมายถึงการประมาณฮิวริสติก" ฉันไม่ได้มีเวลาตอนนี้จะดูคำตอบในภายหลังหรือเราจะได้พบกันในห้องแชทและหาคำอธิบายที่ดีกว่า
cbeleites ไม่มีความสุขกับ SX

1
... ความแตกต่างทางเทคนิคคือฉันใช้pls::plsrเพื่อ pls (ซึ่งอนุญาตให้เลือกจากอัลกอริทึมที่แตกต่างกัน) และฉันมีฟังก์ชั่นหลังการประมวลผลมากมายเช่นการพลิกและหมุนตัวแบบซึ่งบางครั้งก็มีประโยชน์สำหรับการตีความ
cbeleites ไม่มีความสุขกับ SX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.