2014-03-13 20 views
2

问题很简单。我想双击PCA(mydata)的结果,这是我用FactoMineR做的。因为它似乎我只能显示醚变量或个人提供内置的ploting设备:如何用FactoMineR创建双标图?

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

我知道它可以与princomp()的结果很容易做到,但我真的很喜欢FactoMineR如何处理不适用,在许多方面对我来说似乎更容易。

有没有办法?我看到ggplot2以某种方式完成,但只是与princomp()的结果,我不知道如何更改代码,以便它与PCA()一起使用。

我还看到一个解决方案,用ggplot2(Look at the bottom)分别完成单独和变量绘图,但是如何组合这些?

也许解决方案在第一个链接中,但是我真的不明白:/。

我希望我让自己清楚!

问候

卢卡斯

+0

此问题以前曾被问及回答[here](http://stackoverflow.com/q/10252639/1036500)和[这里](http://stackoverflow.com/q/6578355/1036500)。 – Ben

+0

有趣的是,您是如何发布我在问题中发布的相同链接的。我也发现了这些帖子,但第一个没有生成双标图,而是一个变量和个人情节,这可以使用factominer轻松完成,而不是问题。正如问题中所述,第二个链接也仅提供了princomp输出的解决方案。所以不,它没有被回答。 – Lukas

回答

1

嗨,你能适应你的第一个link为PCA的代码FactoMineR这样的对象:

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) 

告诉我,如果它的工作原理!

编辑:添加库,例如jlhoward表明

+0

+1如果您更改代码以加载必要的库。 – jlhoward

+0

谢谢!我试过了,出现如下错误:“找不到函数”arrow“,这个东西可以在包列表中找到吗? – Lukas

+0

'arrow'在'grid'包中,但是它被从CRAN中移除... – Victorp

3

您还可以使用ggord做,代码很容易适应其他协调对象如果添加额外的S3方法对他们来说:

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 (不同类型的缩放是可能的,例如,行主体(形式双标图),列主体(协方差双标图),对称双标图等,目前不支持goo RD。虽然编辑ggord.PCA S3方法或支持此方法的goord.default方法很容易。)