首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PCA的ggfortify自图再现加载

基于PCA的ggfortify自图再现加载
EN

Stack Overflow用户
提问于 2020-09-08 02:25:34
回答 1查看 570关注 0票数 0

我在ggfortify中使用ggfortify来绘制prcomp对象。我还想看看我是否能手工复制这个情节。然而,当我这样做时,这两幅图在如何绘制负载方面似乎有所不同。请注意,这里没有缩放数据集。我实际上正在做这个练习的数据集对所有列都有相同的单位,我认为不缩放可能是结果。

代码语言:javascript
复制
library(ggplot2)
library(ggfortify)
data(mtcars)
cars_pca = prcomp(mtcars, center = TRUE, scale. = FALSE)
autoplot(cars_pca, loadings = TRUE, loadings.label = TRUE)

plot(x = cars_pca$x[, 1], y = cars_pca$x[, 2])
text(x = cars_pca$rotation[, 1], 
     y = cars_pca$rotation[, 2],
     col = alpha('red', 0.7),
     cex = 1,
     labels = colnames(mtcars))

我读过R交替使用加载和特征向量这两个术语,即使这并不精确。但是,即使在手动实现这些ggfortify questions中的详细内容时,我也无法生成two双图。我也尝试寻找ggfortify::autoplot.prcomp的源代码,但没有成功。

有人能给我一些关于如何重现ggfortify正在绘制的加载的建议吗?我真的很想了解到底发生了什么。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 03:12:08

转换正在ggfortify::autoplot.prcomp函数中进行。因为您使用的是scale=1的默认值,所以会对值进行调整。下面是如何恢复autoplot期间绘制的相同点。加载在ggfortify::ggbiplot函数中转换。

代码语言:javascript
复制
scaler <- cars_pca$sdev[c(1,2)] * sqrt(nrow(cars_pca$x))
trans <- t(t(cars_pca$x[, 1:2]) / scaler)
scaler2 <- min(max(abs(trans[, 1L])) / max(abs(cars_pca$rotation[, 1L])),
              max(abs(trans[, 2L])) / max(abs(cars_pca$rotation[, 2L])))
trans2 <- cars_pca$rotation[, 1L:2L] * scaler2 * 0.8

plot(x = trans[, 1], y = trans[, 2])
text(x = trans2[, 1], 
     y = trans2[, 2],
     col = alpha('red', 0.7),
     cex = 1,
     labels = colnames(mtcars))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63786339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档