подмножество объекта prcomp в R

Я в основном вычисляю PCA для набора переменных, и все работает нормально. Допустим, я использую данные радужной оболочки глаза в качестве примера, но мои данные другие. Данных по радужной оболочке должно быть достаточно, чтобы объяснить мой вопрос:

data(iris)
log.ir <- log(iris[, 1:4])
log.ir[mapply(is.infinite, log.ir)] <- 0
ir.groups<- iris[, 5]
ir.pca <- prcomp(log.ir, center = TRUE, scale. = TRUE) 

library(ggbiplot)

g <- ggbiplot(ir.pca, obs.scale = 1,var.scale = 1,groups = ir.groups, var.axes=F)
g <- g + scale_color_discrete(name = '')
g <- g + theme(legend.direction = 'horizontal', 
               legend.position = 'top') + theme(legend.text=element_text(size=15), legend.key.size = unit(2.5, "lines")) + theme(text = element_text(size=20))
ggsave("pca2.pdf", g, width=15, height=15)

Когда я получаю график, некоторые группы строятся слишком близко друг к другу, поэтому я хочу создать новый график для этого подмножества групп (без вычисления нового PCA для подмножества).

Есть ли способ сделать подмножество объекта ir.pca для выбора только определенного groups для построения?


r pca
person ifreak    schedule 25.05.2016    source источник


Ответы (1)


Я думаю, вы можете определить новое графическое окно с помощью ggplot2::coord_equal, например:

g + coord_equal(xlim=c(0, 3))

исключит setosa из графика, а не из PCA.


Принимая во внимание ваш комментарий, вы можете сделать это программно:

# first we filter the scores
filtered_scores <- ir.pca$x[which(iris$Species != "setosa"), ]
# then on PC1 and PC2
g + coord_equal(xlim=range(filtered_scores[, 1]), ylim=range(filtered_scores[, 2]))

Это то, что ты хотел?

person Vincent Bonhomme    schedule 25.05.2016
comment
Спасибо за ответ. Но мне нужен более простой способ сделать подмножество. Вот так мне нужно посмотреть на график и сделать подмножество. Нет ли программного способа сделать это? - person ifreak; 27.05.2016