【发布时间】:2018-12-25 01:14:20
【问题描述】:
给定一个包含混合变量(即分类变量和连续变量)的数据框,例如,
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"))
它给出了以下 Fig1
和图2
图1说明:图1是碎石图。碎石图是一个简单的线段图,它显示了数据中总方差的分数,如每个主成分 (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]。
我想要什么:我想知道如何做动态列索引分配,这样我就不必手动编码列表df.princomp中的列索引[,2:3]?
【问题讨论】:
-
所以要明确一点,这里想要的结果到底是什么?图2中的柱高?
-
@MikkoMarttila 感谢您的关注。这很有帮助。我已经更新了这个问题,以便其他人可以更好地理解它(不仅仅是我:))。我确信这是一个微不足道的答案,但我似乎无法理解它。
-
所以你说你想要一些函数
f(pc1,pc2)这样如果 pc1 是第二个组件,而 pc2 是第三个组件,那么你会得到df.princomp$quanti.var$contrib[,2:3]和df.princomp$quali.var$contrib[,2:3]? -
顺便说一句,您的代码并非完全可重现,它需要一个随机种子。当我运行它时,我得到的 pcas 略有不同
-
@Ashish 说你相信
df.princomp$quanti.var$contrib[,4]是finalMark 对Dim-1 的贡献对吗?如果是这样,我建议这种解释是不正确的,相反,finalMark 对 Dim-1 的贡献可以在这里找到df.princomp$quanti.var$contrib["finalmark", "Dim.1"]同样,名称和 studLoc 对 Dim-1 的贡献可以在df.princomp$quali.var$contrib[1:10, "Dim.1"] %>% sum()和 @987654356 找到@ 分别。请注意,这些是上面图 2 的前三列
标签: r cluster-analysis pca feature-selection unsupervised-learning