从 ggfortify R 包中用 ggplot2::autoplot 复制 stats::biplot

Reproducing stats::biplot with ggplot2::autoplot from ggfortify R package

我正在尝试使用 ggfortify R 包中的 ggplot2::autoplot 重现以下 stats::biplot 图。

biplot(prcomp(USArrests, scale = TRUE))

这是我的 ggplot2::autoplot 来自 ggfortify R 包的代码及其输出。

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

问题

  1. 为什么两个情节不同?如何重现基本剧情?
  2. 如何添加如底图所示的标签?

要在 ggplot2 中重新创建此图,您只需从 prcomp 对象中提取所需的数据。在这种情况下,您绘制的是原始数据以及可变旋转载荷,因此您需要两个数据框。

试试这个:

x <- prcomp(USArrests, scale = TRUE)
z1 <- data.frame(State = rownames(x$x), x$x[, 1:2])
z2 <- data.frame(State = rownames(x$rotation), x$rotation[, 1:2])

library(ggplot2)
ggplot(z1, aes(PC1, PC2, label=State)) + 
  geom_text(size=3) +
  geom_segment(data=z2, aes(PC1, PC2, xend=0, yend=0), col="red") +
  geom_text(data=z2, aes(PC1, PC2, label=State), col="red") +
  theme_bw()

感谢您使用该软件包。该问题取决于 {dplyr} 版本,并已在 {ggfortify} 中修复。你能更新包然后试试吗?

我已将修复后的结果附在下方 link:

https://github.com/sinhrks/ggfortify/pull/21

Autoplot 模拟您使用 biplot.prcomp 选项 pc.biplot = TRUE 得到的 behaviour/scaling :

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

biplot(prcomp(USArrests, scale = TRUE), pc.biplot = TRUE)

然后生成 Gabriel (1971) 的 "principal component biplot",其中观察值按 sqrt(n) 放大,变量按 sqrt(n) 缩小。然后,变量之间的内积近似协方差,观测值之间的距离近似马氏距离。通常这就是您想要的,另请参阅详细说明 here.

ggord btw is also a nice package for making biplots, as is ggbiplot.

PS:我认为上面标记为正确的答案并不是真正正确的答案。