2014-03-13 22 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方法很容易。)