我刚刚对一个大约有20,000个变量的大型数据集进行了PCA分析。为此,我使用了以下代码。
df_pca <- prcomp(df, center=FALSE, scale.=TRUE)
我很好奇我的变量是如何影响PCA.1(PCA分析的维度1)和PCA.2(PCA分析的维度2)的。
我使用下面的代码来查看每个变量是如何影响维度分析的。
fviz_pca_var(df_pca, col.var = "black")
然而,这将创建一个包含我所有20,000个变量的图表,由于信息量太大,无法读取。
有没有办法选择对PCA.1和PCA.2影响最大的变量,只画出这些变量的图?
先谢谢您了!
你要做的是首先得到实际的表,将合成变量w实际变量关联起来。像这样做。
a <- df_pca$rotation
然后我们就可以用dplyr来操作数据框架 并提取我们想要的东西。
library(dplyr)
library(tibble)
a %>% as.data.frame %>% rownames_to_column %>%
select(rowname, PC1, PC2) %>% arrange(desc(PC1)) %>% head(10)
上面将组织显示PC1最重要的10个变量。你可以对PC2运行同样的事情,将其改为 arrange(desc(PC2))
......并通过改变 head(10)
.
如果你想看到你想要的尺寸,你应该这样做。
library(factoextra)
fviz_contrib(df_pca,
choice = "var",
axes = 5,
top = 10, color = 'darkorange3', barfill = 'blue4',fill ='blue4')
用 axes
你可以选择你想看到的dim。在本例中,你看到的维数是5。
如果你想看帮助你选择维数的变量和曲线,你可以使用这个。
fviz_screeplot(df_pca, ncp=14,linecolor = 'darkorange3', barfill = 'blue4',
barcolor ='blue4', xlab = "Dimensioni",
ylab = '% varicance',
main = 'Reduction of components')
get_eigenvalue(df_pca)