如何使用FactoMineR创建双地块?

如何使用FactoMineR创建双地块?,r,ggplot2,pca,R,Ggplot2,Pca,问题很简单。我想对PCA(mydata)的结果进行双绘图,这是我使用FactoMineR完成的。似乎我只能用内置绘图设备显示变量或个体: plot.PCA(pca1, choix="ind/var"). 我知道用princomp()的结果可以很容易地完成,但我真的很喜欢FactoMineR处理NA的方式,而且在很多方面对我来说都比较容易 有办法吗?我看到它以某种方式完成了,但又一次只使用了princomp()的结果,我不知道如何更改代码以使其与PCA()一起工作 我还看到了一个使用ggplo

问题很简单。我想对PCA(mydata)的结果进行双绘图,这是我使用FactoMineR完成的。似乎我只能用内置绘图设备显示变量或个体:

 plot.PCA(pca1, choix="ind/var").
我知道用princomp()的结果可以很容易地完成,但我真的很喜欢FactoMineR处理NA的方式,而且在很多方面对我来说都比较容易

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

我还看到了一个使用ggplot2()分别进行单个和变量绘图的解决方案,但是如何将它们结合起来呢

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

我希望我说清楚了

问候


Lukas

Hi您可以从
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)

PCbiplot2Hi您可以从
FactoMineR
中为PCA对象调整第一个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)

PCbiplot2您也可以使用
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)
install.packages(“devtools”)
图书馆(devtools)
安装github(“fawda123/ggord”)
图书馆(ggord)
图书馆(工厂矿工)

ord您也可以使用
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)
install.packages(“devtools”)
图书馆(devtools)
安装github(“fawda123/ggord”)
图书馆(ggord)
图书馆(工厂矿工)

谢谢!我尝试了它,但出现了以下错误:“找不到函数”arrow“。这是可以在packagelist中找到的吗?告诉我,我只需要使用库(网格)…让我们看看它是否工作,它确实工作!!感谢bunch victorp!你真的救了我一天!:)网格“现在是基本R发行版的一部分”所以库(网格)工作正常,arrow无需添加函数即可工作:)谢谢!很高兴知道!CRAN不是很清楚…:谢谢!我尝试过,出现以下错误:“找不到函数”arrow“。这是可以在包装商那里找到的东西吗?告诉我,我只是需要库(网格)。。。让我们看看它是否有效,它确实有效!!多谢一帮胜利者!你真的救了我一天!:)grid是“现在是BaseR发行版的一部分”,所以库(grid)可以正常工作,arrow不需要添加函数即可工作:)谢谢,很高兴知道!起重机不是很清楚…:这个问题以前已经被问过,也被回答过。有趣的是,你怎么会发布我在问题中发布的相同链接。我也发现了这些帖子,但第一个帖子不是生成一个双图,而是一个变量&单独的图,这可以用factominer轻松完成,不是问题所在。第二个链接也只为princomp输出提供了一个解决方案,如问题中所述。所以不,它还没有被回答。这个问题以前被问过,也被回答过。有趣的是,你怎么发布了我在问题中发布的相同链接。我也发现了这些帖子,但第一个帖子不是生成一个双图,而是一个变量&单独的图,这可以用factominer轻松完成,不是问题所在。第二个链接也只为princomp输出提供了一个解决方案,如问题中所述。所以没有,它还没有被回答。