Domanda

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

È stato utile?

Soluzione 2

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

Altri suggerimenti

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)

enter image description here

(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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top