我已经使用 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)
我现在有一个图表如下......
但我发现很难让标签出现在每个条形上方。有人可以为此提供帮助或建议吗?