How to create a biplot with FactoMineR?

假装没事ソ 提交于 2019-12-11 02:15:04

问题


The Question is easy. I'd like to biplot the results of PCA(mydata), which I did with FactoMineR. As it seems I can only display ether the variables or the individuals with the built in ploting device:

 plot.PCA(pca1, choix="ind/var").

I know it can be easily done with the result of princomp(), but I really like how FactoMineR handles the NA's and it seems easier to me in many ways.

Is there a way? I saw it somehow done with ggplot2 but again only with the result of princomp(), and I have no idea how to change the code so that it works with PCA().

I also saw a solution for doing the individual and variable plot separately with ggplot2 (Look at the bottom), but how do I combine those?

Maybe the solution is somehow in the first link, but then I don't really get it :/.

I hope I made myself clear!

Greetings

Lukas


回答1:


Hi you can adapt the code of your first link for PCA objects from FactoMineR like this :

PCbiplot2 <- function(res.pca, x="Dim.1", y="Dim.2") {
  if(!require(ggplot2)) install.packages("ggplot2")
  # res.pca being a PCA object
  data <- data.frame(obsnames=row.names(res.pca$ind$coord), res.pca$ind$coord)
  plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3,     aes(label=obsnames))
  plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2)
  datapc <- data.frame(varnames=rownames(res.pca$var$coord), res.pca$var$coord)
  mult <- min(
    (max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))),
    (max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x])))
  )
  datapc <- transform(datapc,
                      v1 = .7 * mult * (get(x)),
                      v2 = .7 * mult * (get(y))
  )
  plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2,     label=varnames), size = 5, vjust=1, color="red")
  plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2),     arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color="red")
  plot
}

library(FactoMineR)
fit2 <- PCA(USArrests, graph=F)
PCbiplot2(fit2)

Tell me if it works !

Edit : add libraries like jlhoward suggests




回答2:


You can also do it with ggord, and code is easy to adapt to other ordination objects if you add additional S3 methods for them :

install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
library(FactoMineR)
ord <- PCA(iris[, 1:4], graph = FALSE)
ggord(ord, iris$Species)

(Different kinds of scaling are possible though, e.g. row principal (form biplot), column principal (covariance biplot), symmetric biplot, etc, which are currently not supported by goord. Though it would be easy to edit the ggord.PCA S3 method or goord.default method to support this.)



来源:https://stackoverflow.com/questions/22381560/how-to-create-a-biplot-with-factominer

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!