【问题标题】:How to create a biplot with FactoMineR?如何使用 FactoMineR 创建双标图?
【发布时间】:2014-03-13 14:23:00
【问题描述】:

这个问题很简单。我想用 FactoMineR 对 PCA(mydata) 的结果进行双标绘图。看来我只能使用内置绘图设备显示变量或个人:

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

我知道使用 princomp() 的结果可以轻松完成,但我真的很喜欢 FactoMineR 处理 NA 的方式,而且在很多方面对我来说似乎更容易。

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

我还看到了使用 ggplot2 (Look at the bottom) 分别绘制个体和变量图的解决方案,但我如何将它们结合起来?

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

我希望我说清楚了!

问候

卢卡斯

【问题讨论】:

  • 这个问题之前已经被问过并回答了herehere
  • 有趣的是你如何发布我在问题中发布的相同链接。我也发现了这些帖子,但第一个不是产生双标图,而是产生变量和个体图,这可以通过 factorominer 轻松完成,不是问题。如问题中所述,第二个链接也仅提供了 princomp-output 的解决方案。所以不,还没有回答。

标签: r ggplot2 pca


【解决方案1】:

你也可以用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)

(虽然可以进行不同类型的缩放,例如行主体(表单双标图)、列主体(协方差双标图)、对称双标图等,目前 goord 不支持。尽管编辑 @987654325 很容易@S3 方法或goord.default 方法支持。)

【讨论】:

    【解决方案2】:

    您好,您可以将您的第一个 link 的代码修改为来自 FactoMineR 的 PCA 对象,如下所示:

    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 建议的库

    【讨论】:

    • 谢谢!我试过了,出现以下错误:“找不到函数“箭头”。这是可以在包列表中找到的东西吗?
    • stackoverflow.com/questions/14677035/… 告诉我我只需要库(网格)...让我们看看它是否有效
    • 确实如此!谢谢一堆胜利者!你真的拯救了我的一天! :)
    • grid 是“现在是基本 R 分布的一部分”,所以 library(grid) 工作正常,箭头在不添加函数的情况下工作:) 无论如何谢谢
    • 很高兴知道! CRAN 不是很清楚...:cran.r-project.org/web/packages/grid
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2016-03-10
    • 2012-01-25
    • 1970-01-01
    • 2022-08-03
    • 2011-12-31
    • 2011-05-26
    • 1970-01-01
    相关资源
    最近更新 更多