【发布时间】:2020-03-31 20:40:34
【问题描述】:
我使用 FactoMineR 包中的 prcomp 函数在相当大的 3000 x 500 数据集上执行了 PCA 分析。
我尝试使用 fviz_eig 图绘制覆盖高达 100% 累积方差比例的主要主成分。但是,由于数据集的维度很大,这是一个非常大的图。 R中是否有任何方法可以使用for循环或任何其他方式将一个图拆分为多个图?
这是我的情节的视觉效果,由于它很大,它只涵盖了 80% 的方差。我可以把这个地块分成 2 个地块吗?
我尝试过使用 for 循环来拆分情节...
for(i in data[1:20]) {
fviz_eig(data, addlabels = TRUE, ylim = c(0, 30))
}
但这不起作用。
已编辑的可重现示例:
这只是一个使用 R 中已有数据集的可重现的小示例,但我对大型数据集使用了类似的方法。它将向您展示情节的实际运作方式。
# Already existing data in R.
install.packages("boot")
library(boot)
data(frets)
frets
dataset_pca <- prcomp(frets)
dataset_pca$x
fviz_eig(dataset_pca, addlabels = TRUE, ylim = c(0, 100))
但是,我的大型数据集有比这个更多的 PC(可能 100 或更多以覆盖高达 100% 的累积方差比例),因此这就是为什么我想要一种将单个图拆分为多个图的方法以获得更好的可视化效果。
更新:
我已经执行了下面@G5W 所说的...
data <- prcomp(data, scale = TRUE, center = TRUE)
POEV = data$sdev^2 / sum(data$sdev^2)
barplot(POEV, ylim=c(0,0.22))
lines(0.7+(0:10)*1.2, POEV, type="b", pch=20)
text(0.7+(0:10)*1.2, POEV, labels = round(100*POEV, 1), pos=3)
barplot(POEV[1:40], ylim=c(0,0.22), main="PCs 1 - 40")
text(0.7+(0:6)*1.2, POEV[1:40], labels = round(100*POEV[1:40], 1),
pos=3)
我现在得到了如下图...
但我发现很难让标签出现在每个条形上方。有人可以为此提供帮助或建议吗?
【问题讨论】:
-
如果您使用内置的
prcomp函数,然后使用类似 ggfortify cran.r-project.org/web/packages/ggfortify/vignettes/… 的功能,则每个图将自动拆分为 2 个 PCA(纵轴上 1 个,横轴上另一个) -
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则会更容易为您提供帮助。
-
@MrFlick 请查看编辑。希望这会有所帮助!
-
您的示例是朝着正确方向迈出的一步,但我不太确定您想要什么。为什么你显示的图表不够好?你想要什么样的分裂?一次可能有 10 个 PCA?
-
@G5W 是的,对于这个特定的可重现示例来说,它已经足够好了。但是,对于我更大的数据集,我需要 70 多个 PCA 才能达到 100%。因此,这会产生一个非常拥挤的图,因此我需要将图拆分为多个图,例如一次 10 个 PCA。任何建议都会很棒!
标签: r histogram data-visualization pca prcomp