Im Allgemeinen würde ich kein Problem sehen, warum Sie keine PCA durchführen konnten , um Ihren multivariaten Datensatz zu visualisieren und zu interpretieren (da Sie jedoch keine Daten angegeben haben, kann ich nicht sicher sagen). Was Ihre zweite Frage betrifft, würde ich die beiden Gruppen ( drought
, control
) behalten und sie nicht voneinander subtrahieren. Auf diese Weise können Sie sehen, ob sich die Komponentenbewertungen (im Diagramm als Punkte dargestellt) gruppieren und in welcher Beziehung die Komponentenladungen (im Diagramm als Vektoren dargestellt) zu ihnen stehen.
Hier ein Beispiel, um zu veranschaulichen, was ich meine (auch Ihre dritte Frage):
Generieren Sie einen Beispieldatensatz (basierend auf Ihrer Beschreibung):
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)
)
Die folgenden Schritte können auf viele verschiedene Arten (möglicherweise auch besser und effizienter) mit verschiedenen R
Paketen erreicht werden. Aber hier ist, was normalerweise für mich funktioniert:
PCA mit 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)
Erstellen Sie das Grundstück mit dem ggplot2
Paket:
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")
Die Vektoren stellen Komponentenladungen dar, bei denen es sich um die Korrelationen der Hauptkomponenten mit den ursprünglichen Variablen handelt. Die Stärke der Korrelation wird durch die Vektorlänge angegeben, und die Richtung gibt an, welche Akzessionen für die ursprünglichen Variablen hohe Werte haben.
Außerdem würde ich vorschlagen, hier nach weiteren Informationen zur Interpretation von PCAs im Allgemeinen zu suchen (falls dies überhaupt erforderlich ist).
Auch da Sie Gruppen vorbestimmt, das heißt drought
und control
Sie könnten auch einen Blick auf haben lineare Diskriminanzanalyse (LDA). Sowohl PCA als auch LDA sind rotationsbasierte Techniken. Während PCA versucht, die im Datensatz erläuterte Gesamtvarianz zu maximieren, maximiert LDA die Trennung (oder Unterscheidung) zwischen Gruppen. Weitere Informationen finden Sie beispielsweise in der candisc
Funktion im candisc
Paket oder in der lda()
Funktion im MASS
Paket (beide in R
).