#r #ggplot2 #pca
Вопрос:
Я использую ggplot2 для создания двух ПК, чтобы доказать, что они выглядят одинаково. Однако, когда я запускаю один и тот же сценарий для обоих, они действительно выглядят одинаково, хотя и «перевернуты». Интересно, как я могу сделать так, чтобы они выглядели одинаково, изменив ось. Я показываю вам результаты.
Заранее спасибо
Комментарии:
1. Это похоже на свойство PCA, что компьютеры могут быть инвертированы, если процедура повторяется дважды для одних и тех же данных. Тем не менее, вы можете использовать
scale_y_reverse()
иscale_x_reverse()
для поворота осей.
Ответ №1:
Вы можете сделать это несколькими способами:
- используйте знак минус перед переменной, чтобы повернуть вспять
- используйте scale_*_reverse()
Вот минимальный пример, показывающий эти операции на двух ПК в знаменитом наборе данных iris.
data(iris)
# PCA
pca1 <- prcomp(iris[,1:4], center = T, scale. = T)
pca2 <- princomp(iris[,1:4], cor = T)
# plots
library(ggplot2)
p1 <- ggplot(data.frame(pca1$x, Species = iris$Species),
aes(x= PC1, y = PC2, color = Species))
geom_point()
theme_bw()
ggtitle("PCA on iris dataset using <prcomp>")
p2 <- ggplot(data.frame(pca2$scores, Species = iris$Species),
aes(x = Comp.1, y = Comp.2, color = Species))
geom_point()
theme_bw()
ggtitle("PCA on iris dataset using <princomp>")
p3 <- ggplot(data.frame(pca2$scores, Species = iris$Species),
aes(x = Comp.1, y = -Comp.2, color = Species))
geom_point()
theme_bw()
ggtitle("PCA using <princomp> - minus sign")
p4 <- ggplot(data.frame(pca2$scores, Species = iris$Species),
aes(x = Comp.1, y = Comp.2, color = Species))
geom_point()
scale_y_reverse()
theme_bw()
ggtitle("PCA using <princomp> - scale_y_reverse")
# ggpubr::ggarrange(p1,p2,p3,p4)