PCA в ggplot — внешний вид

#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)
 

введите описание изображения здесь