J'ai un ensemble d'observations avec 23 variables.
Lorsque j'utilise prcomp et biplot pour tracer les résultats, je rencontre plusieurs problèmes:
le tracé réel occupe seulement la moitié du cadre (x <0), mais le tracé est centré sur 0, donc la moitié de l'espace est gaspillée
deux variables dominent clairement les résultats, donc toutes les autres flèches sont regroupées et je ne peux rien lire
annonce 1. J'ai essayé de définir xlim et/ou ylim, mais je fais évidemment quelque chose de mal car l'intrigue est complètement foirée quand je le fais
annonce 2. Puis-je simplement espacer les étiquettes des flèches pour pouvoir les lire? Ou peut-être que je pourrais simplement tracer les flèches sans les deux plus longues (sorte de zoom avant)?
Addendum: est-il possible d'avoir biplot dessiner les étiquettes dans une couleur différente de celle des flèches?
Aussi: est-ce problématique si les axes x et y ne sont pas proportionnels (le graphique montre des intervalles de longueur différente sur x et y). Je pense que cela fausserait les anges entre les flèches, et ce type de redimensionnement n'est pas une transformation de similitude. Est-il possible de forcer le biplot pour conserver un rapport d'aspect de 1: 1, ou de dessiner l'intrigue sous forme de rectangle et non de carré?
Je pense que vous pouvez utiliser xlim
et ylim
. Jetez également un œil à l'argument expand
pour ?biplot
. Malheureusement, vous n'avez fourni aucune donnée, prenons donc quelques exemples de données:
a <- princomp(USArrests)
Ci-dessous le résultat de simplement appeler biplot
:
biplot(a)
Et maintenant, on peut "zoomer" pour regarder de plus près "Meurtre" et "Viol" en utilisant xlim
et ylim
et également utiliser l'argument de mise à l'échelle expand
de ?biplot
:
biplot(a, expand=10, xlim=c(-0.30, 0.0), ylim=c(-0.1, 0.1))
Veuillez noter les différentes échelles sur les axes supérieur et droit en raison du facteur expand
.
Est-ce que cela aide à rendre votre jument intrigue lisible?
[~ # ~] modifier [~ # ~]
Vous avez également demandé s'il était possible d'avoir des couleurs différentes pour les étiquettes et les flèches. biplot
ne prend pas en charge cela, ce que vous pourriez faire est de copier le code de stats:::biplot.default
puis modifiez-le selon vos besoins (changez l'argument col
lorsque plot
, axis
et text
est utilisé).
Vous pouvez également utiliser ggplot
pour le biplot. Dans le post ici , une fonction biplot simple est implémentée. Vous pouvez modifier le code comme suit:
PCbiplot <- function(PC, x="PC1", y="PC2", colors=c('black', 'black', 'red', 'red')) {
# PC being a prcomp object
data <- data.frame(obsnames=row.names(PC$x), PC$x)
plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3, aes(label=obsnames), color=colors[1])
plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2, color=colors[2])
datapc <- data.frame(varnames=rownames(PC$rotation), PC$rotation)
mult <- min(
(max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))),
(max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x])))
)
datapc <- transform(datapc,
v1 = .7 * mult * (get(x)),
v2 = .7 * mult * (get(y))
)
plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2, label=varnames), size = 5, vjust=1, color=colors[3])
plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color=colors[4])
plot
}
Tracer comme suit:
fit <- prcomp(USArrests, scale=T)
PCbiplot(fit, colors=c("black", "black", "red", "yellow"))
Si vous jouez un peu avec cette fonction, je suis sûr que vous pouvez comprendre comment définir les valeurs xlim
et ylim
, etc.