Отображение основных компонентов, отличных от значений по умолчанию, с помощью автоплота (ggfortify)

Я хотел бы построить график PC2 против PC3, используя функцию autoplot() пакета ggfortify. По умолчанию отображаются только ПК1 и ПК2:

library(ggfortify)
myPCA <- prcomp(iris[-5])
autoplot(myPCA)

Я могу получить то, что хочу, переупорядочив и переименовав столбцы в объекте prcomp:

myPCAtrunc <- myPCA
myPCAtrunc[[1]] <- myPCAtrunc[[1]][c(2,3,1,4)]
myPCAtrunc[[2]] <- myPCAtrunc[[2]][,c(2,3,1,4)]
colnames(myPCAtrunc[[2]]) <- c("PC1","PC2","PC3","PC4") # fake names
myPCAtrunc[[5]] <- myPCAtrunc[[5]][,c(2,3,1,4)]
colnames(myPCAtrunc[[5]]) <- c("PC1","PC2","PC3","PC4") # fake names
autoplot(myPCAtrunc, xlab = "PC2", ylab="PC3")

Я знаю, что это правильно, потому что это то же самое, что и plot(myPCA$x[, c(2,3)]).

Но должен быть более чистый способ решить эту проблему. Некоторые идеи?


person albifrons    schedule 09.03.2016    source источник


Ответы (3)


если посмотреть на вызываемый метод, похоже, что он предназначен только для построения графиков PC1 и PC2:

getS3method("autoplot", class(myPCA) )
> ...
> if (is_derived_from(object, "prcomp")) {
>        x.column <- "PC1"
>        y.column <- "PC2"
>       loadings.column <- "rotation"
>    }
> ...

в случае, если это вариант для вас, я предлагаю вам использовать пакет ggbiplot и установить аргумент choices:

library(ggbiplot)
ggbiplot(myPCA, choices = 2:3 , var.axes =FALSE)

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

person David Heckmann    schedule 09.03.2016
comment
Спасибо, @David H, похоже, это помогло! Похоже, что только ggbiplot ’недоступен для R версии 3.2.3. А пока я думаю о создании специальной функции. Это было очень полезно, еще раз спасибо. - person albifrons; 09.03.2016
comment
к сожалению, я, вероятно, получил его с github (github.com/vqv/ggbiplot). попробуйте library(devtools) install_github("vqv/ggbiplot"), если хотите сэкономить немного работы :) - person David Heckmann; 09.03.2016
comment
Отлично, это работает. Спасибо, Дэвид. - person albifrons; 09.03.2016

Эта проблема была недавно решена (здесь).

autoplot(myPCA,    # your prcomp object
         x = 2,    # PC2
         y = 3)    # PC3
person eotp    schedule 26.04.2017

Что вы могли сделать, так это изменить свой объект prcomp. А затем измените метку y следующим образом:

pca_test=pca
pca_test$x=pca_test$x[,c(1,3)]
colnames(pca_test$x)=c("PC1","PC2")
pca_test$rotation=pca_test$rotation[,c(1,3)]
colnames(pca_test$rotation)=c("PC1","PC2")

autoplot(pca_test,data=df,colour='study',shape='species')+scale_color_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+scale_fill_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+theme_bw()+ylab("PC3")

Надеюсь, это поможет!

JC

person JC Grenier    schedule 17.02.2017