Tôi thường sử dụng để chẩn đoán dữ liệu đa biến của mình bằng PCA (dữ liệu omics với hàng trăm ngàn biến và hàng chục hoặc hàng trăm mẫu). Dữ liệu thường đến từ các thử nghiệm với một số biến độc lập phân loại xác định một số nhóm và tôi thường phải trải qua một vài thành phần trước khi tôi có thể tìm thấy các biến thể hiện sự tách biệt giữa các nhóm quan tâm. Tôi đã nghĩ ra một cách khá sơ khai để tìm các thành phần phân biệt đối xử như vậy, và tôi tự hỏi
- đến mức nào thì điều này là hợp lý / chính đáng, và
- cho dù có những cách tốt hơn để đạt được như nhau.
Lưu ý rằng đây là thăm dò. Trước khi tôi thuyết phục bất cứ ai khác, tôi muốn thuyết phục bản thân mình. Nếu tôi thấy rằng có những thành phần phân biệt rõ ràng các nhóm lợi ích (ví dụ: kiểm soát so với điều trị), ngay cả khi chúng chịu trách nhiệm cho một phần nhỏ của phương sai của các phản hồi, tôi tin tưởng nó hơn là kết quả từ máy có giám sát học tập.
Đây là cách tiếp cận của tôi. Tôi sẽ sử dụng tập dữ liệu ví dụ "metabo" từ pca3d trong R.
Ý tưởng là để đánh giá mức độ sai lệch của từng thành phần có thể được giải thích bằng biến độc lập. Đối với điều này, tôi tính toán một mô hình đơn giản cho từng thành phần và sử dụng làm số liệu để sắp xếp các thành phần từ "thú vị nhất" đến "ít thú vị nhất".
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 )
Đây là kết quả. Biểu đồ cho thấy tỷ lệ phần trăm chênh lệch của từng thành phần được giải thích bởi biến độc lập trong metabo[,1]
.
Chúng ta có thể sắp xếp các thành phần theo để tìm ra thành phần nào sẽ hiển thị ; ba thành phần đầu tiên là 2, 1 và 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Đây là cốt truyện:
(Các loại màu đỏ và màu xanh lá cây là hai nhóm đối tượng không phải là bệnh nhân và dự kiến chúng không thể được phân biệt.)
Để cải cách câu hỏi của tôi,
- Liệu cách tiếp cận này có ý nghĩa với bạn? Vấn đề của tôi là nó trông quá giống như nạo vét dữ liệu. Ngoài ra, theo trực giác tôi nghĩ có lẽ tôi nên xoay bảng và hỏi phần nào của phương sai trong biến độc lập được giải thích bởi mỗi biến? Cuối cùng, tôi (gần như) chắc chắn rằng tôi đang phát minh lại bánh xe, thật tệ, vì vậy câu hỏi thứ hai của tôi là
- Có gì tốt hơn không?
Lưu ý rằng tôi không muốn chuyển sang bình phương tối thiểu một phần hoặc bất cứ thứ gì tương tự ở giai đoạn này; Tôi chỉ muốn chẩn đoán PCA trong bối cảnh phân loại của tôi.
to find out what share of the overall variance in the data matrix is explained by a given classification
Nếu chỉ muốn biết điều này bạn không cần PCA. Chỉ cần tính tỷ lệ giữa các bình phương giữa các nhóm với tổng bình phương: (SStotal-SSwithin)/SStotal
trong đó SSwithin là tổng bình phương trong nhóm.
Is there anything better?
.