Как я могу выполнить PCA с переменными трех разных фреймов данных и различать их по цвету? - PullRequest
2 голосов
/ 12 февраля 2020

У меня есть три фрейма данных, и я хочу выполнить анализ основных компонентов (PCA) в R. Я объединил фреймы данных с rbind() и сделал PCA с этим. Это сработало. Но я хочу различать точки в соответствии с фреймом данных, к которому они принадлежат. С объединенным фреймом данных это невозможно (или не так?). Когда я использую PCA(X=c(df1,df2,df3), он жалуется на различное количество строк (что, очевидно, действительно имеет место).

pca <- PCA(X=c(df1,df2,df3))
fviz_pca_ind(pca,
             geom.ind = "point", # show points only (nbut not "text")
             col.ind = c(df1,df2,df3), # color by groups
             palette = c("#00AFBB", "#E7B800", "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups"
             )

Это не работает ...

Как мне выполнить PCA с переменными трех разных фреймов данных и различать их по цвету? Я не представляю, потому что это трудно представить в этом случае.

Спасибо всем за ваши предложения;)

1 Ответ

2 голосов
/ 12 февраля 2020

Вам нужно собрать длину ваших фреймов данных, один из способов показан ниже, где я собираю 3 фрейма данных в списке:

library(FactoMineR)
library(factoextra)

df1 = subset(iris,Species=="setosa")[,-5]
df2 = subset(iris,Species=="versicolor")[,-5]
df3 = subset(iris,Species=="virginica")[,-5]

X = list(df1=df1,df2=df2,df3=df3)

вы объединяете их, используя do.call(rbind..), и метки повторяются имена фрейма данных по количеству строк:

labels = rep(names(X),sapply(X,nrow))
table(labels)

Затем вы строите график, давая столбцу col.ind метки:

pca <- PCA(do.call(rbind,X))
fviz_pca_ind(pca,
             geom.ind = "point", # show points only (nbut not "text")
             col.ind = labels, # color by groups
             palette = c("#00AFBB", "#E7B800", "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups"
)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...