我正在尝试使用stats::biplot
ggplot2::autoplot
包中的ggfortify
重现以下R
图。
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)
问题
答案 0 :(得分:2)
感谢您使用该软件包。问题取决于{dplyr}版本,并在{ggfortify}中修复。你可以更新包然后试试吗?
我已将修复后的结果附加到以下链接:
答案 1 :(得分:1)
要在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()
答案 2 :(得分:0)
Autoplot模拟使用biplot.prcomp
选项pc.biplot = TRUE
获得的行为/缩放:
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)的“主成分双标图”,其中观察按sqrt(n)按比例放大,变量按sqrt(n)按比例缩小。变量之间的内积然后近似协方差,观测之间的距离近似马哈拉诺比斯距离。通常这也是你想要的,另见详细的扩展here。
ggord btw也是制作biplots的好方法,ggbiplot也是如此。
PS:上面标记为正确的答案并不是我认为的正确答案。