Nói chung, tôi sẽ không thấy vấn đề tại sao bạn không thể làm PCA để trực quan hóa và giải thích bộ dữ liệu đa biến của bạn (tuy nhiên vì bạn không cung cấp dữ liệu, tôi không thể chắc chắn). Đối với câu hỏi thứ hai của bạn, tôi sẽ giữ hai nhóm ( drought
, control
) và không trừ chúng khỏi nhau. Bằng cách đó, bạn sẽ có thể biết liệu điểm thành phần (được minh họa là điểm trong ô) sẽ phân cụm và cách tải thành phần (được minh họa là vectơ trong ô) liên quan đến chúng.
Dưới đây là một ví dụ để minh họa điều tôi muốn nói (cũng là câu hỏi thứ ba của bạn):
Tạo một tập dữ liệu mẫu (dựa trên mô tả của bạn):
set.seed(13)
d <- data.frame(
treatment = rep(c("drought", "control"), each = 15),
y1 = rnorm(30, 3, 1),
y2 = rnorm(30, 6, 3),
y3 = rnorm(30, 4, 2),
y4 = rnorm(30, 9, 4),
y5 = rnorm(30, 5, 2),
y6 = rnorm(30, 12, 5)
)
Các bước sau đây có thể đạt được bằng nhiều cách khác nhau (có lẽ tốt hơn và hiệu quả hơn) với các R
gói khác nhau . Nhưng đây là những gì thường làm việc cho tôi:
PCA sử dụng FactoMineR :
require(FactoMineR)
my.pca = PCA(d[, c(2:7)], scale.unit = T, graph = F)
# EXTRACTING VALUES FROM my.pca FOR PLOT BELOW
PC1.ind <- my.pca$ind$coord[,1]
PC2.ind <- my.pca$ind$coord[,2]
PC1.var <- my.pca$var$coord[,1]
PC2.var <- my.pca$var$coord[,2]
PC1.expl <- round(my.pca$eig[1,2],2)
PC2.expl <- round(my.pca$eig[2,2],2)
Treatment <- factor(d$treatment,levels=c('drought', 'control'))
labs.var<- rownames(my.pca$var$coord)
Xây dựng cốt truyện với ggplot2
gói:
require(ggplot2)
require(grid)
ggplot() +
geom_point(aes(x = PC1.ind, y = PC2.ind, fill = Treatment), colour='black', pch = 21,size = 2.2) +
scale_fill_manual(values = c("red", "blue")) +
coord_fixed(ratio = 1) +
geom_segment(aes(x = 0, y = 0, xend = PC1.var*2.8, yend = PC2.var*2.8), arrow = arrow(length = unit(1/2, 'picas')), color = "grey30") +
geom_text(aes(x = PC1.var*3.2, y = PC2.var*3.2),label = labs.var, size = 3) +
xlab(paste('PC1 (',PC1.expl,'%',')', sep ='')) +
ylab(paste('PC2 (',PC2.expl,'%',')', sep ='')) +
ggtitle("Some title")
Các vectơ đại diện cho các thành phần tải, đó là mối tương quan của các thành phần chính với các biến ban đầu. Độ mạnh của mối tương quan được biểu thị bằng độ dài vectơ và hướng cho biết phần nào có giá trị cao cho các biến ban đầu.
Ngoài ra tôi sẽ đề nghị xem ở đây để biết thêm thông tin về cách diễn giải PCA nói chung (nếu điều đó là cần thiết).
Ngoài ra vì bạn có các nhóm được xác định trước, tức là drought
và control
bạn cũng có thể xem xét phân tích phân biệt tuyến tính (LDA). Cả PCA và LDA đều là các kỹ thuật dựa trên xoay vòng. Trong khi PCA cố gắng tối đa hóa tổng phương sai được giải thích trong tập dữ liệu, LDA tối đa hóa sự phân tách (hoặc phân biệt đối xử) giữa các nhóm. Để biết thêm thông tin, bạn có thể xem candisc
chức năng trong candisc
gói hoặc lda()
chức năng trong MASS
gói chẳng hạn (cả trong R
).