作者:好人好报 | 来源:互联网 | 2022-12-10 13:58
给定一个包含混合变量(即类别变量和连续变量)的数据框,
digits = 0:9
# set seed for reproducibility
set.seed(17)
# function to create random string
createRandString <- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
df <- data.frame(ID=c(1:10), name=sample(letters[1:10]),
studLoc=sample(createRandString(10)),
finalmark=sample(c(0:100),10),
subj1mark=sample(c(0:100),10),subj2mark=sample(c(0:100),10)
)
我使用软件包执行无监督功能选择 FactoMineR
df.princomp <- FactoMineR::FAMD(df, graph = FALSE)
该变量df.princomp
是一个列表。
之后,为了可视化我使用fviz_screeplot()
和fviz_contrib()
喜欢的主要成分
,
#library(factoextra)
factoextra::fviz_screeplot(df.princomp, addlabels = TRUE,
barfill = "gray", barcolor = "black",
ylim = c(0, 50), xlab = "Principal Component",
ylab = "Percentage of explained variance",
main = "Principal Component (PC) for mixed variables")
factoextra::fviz_contrib(df.princomp, choice = "var",
axes = 1, top = 10, sort.val = c("desc"))
这给出了下面的图1
和图2
图1的说明:图1是碎石图。Scree图是一个简单的线段图,显示了每个主成分(PC)解释或表示的数据中总方差的分数。因此,我们可以看到前三个PC共同负责43.8%
总方差。现在自然会产生一个问题,“这些变量是什么?”。我在图2中显示了这一点。
图2的说明:该图显示了主成分分析(PCA)结果中行/列的贡献。从这里我可以看到变量name
,studLoc
并且finalMark
是可用于进一步分析的最重要的变量。
进一步的分析-在那里我被困在:为了得到上述变量的贡献name
,studLoc
,finalMark
。我用的主成分可变df.princomp
(见上文),如df.princomp$quanti.var$contrib[,4]
和df.princomp$quali.var$contrib[,2:3]
。
我必须手动指定列索引[,2:3]
和[,4]
。
我想要什么:我想知道如何进行动态列索引分配,这样我就不必[,2:3]
在列表中手动编码列索引了df.princomp
?
我已经看着下面类似的问题1,2,3和4,但无法找到我的解决方案?解决该问题的任何帮助或建议都将有所帮助。