2017-02-02 2 views
0

Я хотел бы иметь свой собственный скрипт, который отображает нагрузки и оценки PCA. Основная проблема заключается в том, что нагрузки и оценки не являются одними и теми же единица измерения (по моим данным). Я предполагаю, что мне нужно будет как-то масштабировать нагрузку в моем коде. Здесь я попытался есть пример biplot РСА на данных радужной оболочки, но этот код выдает ошибку:Самозаписываемый код для биплота в ggplot2

Error: Don't know how to add o to a plot

# mybiplot 
# load data in 
data <- (iris) 
iris <- data[,1:4] 
species <- data[,5] 

# apply pca 
pca <- prcomp(iris, center = TRUE,scale. = TRUE) 

# extract scores and loadings 
scores <- as.data.frame(pca$x) 
loadings <- as.data.frame(pca$rotation) 
label <- species 

# make biplot 
p = ggplot()+ 
    geom_point(data = scores, aes(x=PC1, y=PC2, colour = factor(label)))+ 
    geom_segment(data = loadings, aes(x=0,y=0,xend=PC1,yend=PC2), 
    arrow=arrow(length=unit(0.1,"cm")), color = "#DCDCDC")+ 
    geom_text(data = loadings, aes(x=PC2, y=PC3, label=label),color="#006400") 
p 

Я хотел бы избавиться от этой ошибки (и понять, почему это произошло и что не так с кодом), а также как я могу получить оценки и нагрузки в одном биплоте. biplot (PCA), очевидно, работает, но мне нужно иметь самозанятый код, который является более гибким. ggbiplot() и autoplot() вообще не работали.

+0

duplicate: http: //stackoverflow.com/questions/6578355/plotting-pca-biplot-with-ggplot2 – DMR

+0

@DMR Я не думаю, что это дубликат вопроса, который вы цитируете. Да, они оба связаны с биплоадами, но этот вопрос заключается не в том, как вы пишете сюжет с нуля, а в том, что не так с этим кодом. – G5W

+0

Самый проголосовавший ответ от этого сообщения на самом деле не работает. Это с 2011 года. Ошибка: geom_hline требует следующую недостающую эстетику: yintercept – marianess

ответ

2

Проблема с вашим geom_text слоем

geom_text(data = loadings, aes(x=PC2, y=PC3, label=label),color="#006400") 

Оба loadings$PC2 и loadings$PC3 имеют длину 4, но label имеет длину 150. Они не идут вместе.

+0

вправо! вероятно, нужно использовать функцию as.factor(), чтобы извлечь из таблицы четыре фактора, а не всю таблицу. Благодаря! – marianess

Смежные вопросы