【发布时间】:2021-11-21 14:15:42
【问题描述】:
我是 R 编程的新手,正在尝试兼职学习,所以提前为幼稚的编码和问题道歉。我花了大约 1 天的时间试图找出代码,但无法这样做,因此在这里询问。
https://www.kaggle.com/c/titanic/data?select=train.csv
我正在研究从 Kaggle 导入为 train_data 的火车 Titanic 数据集。我已经清理了所有 col 并在需要时将它们转换为因子。
我的问题是 2 倍:
1. 无法理解为什么这个公式将所有内容的 IV 值都设为 0。我做错了什么?
factor_vars <- colnames(train_data)
all_iv <- data.frame(VARS=factor_vars, IV=numeric(length(factor_vars)),STRENGTH=character(length(factor_vars)),stringsAsFactors = F)
for (factor_var in factor_vars){
all_iv[all_iv$VARS == factor_var, "IV"] <-
InformationValue::IV(X=train_data[, factor_var], Y=train_data$Survived)
all_iv[all_iv$VARS == factor_var, "STRENGTH"] <-
attr(InformationValue::IV(X=train_data[, factor_var], Y=train_data$Survived), "howgood")
}
all_iv <- all_iv[order(-all_iv$IV), ]
2. 我正在尝试创建自己的函数来计算 1 go 中多列的 IV 值,这样我就不必执行重复性任务,但是当我运行以下公式时,我得到了计数总计 0 和总计 1,而不是像我要求的那样分组的项目。同样,在这个例子中我做错了什么?
train_data %>% group_by(train_data[[3]]) %>%
summarise(zero = sum(train_data[[2]]==0),
one = sum(train_data[[2]]==1))
我得到输出
zero one
1 549 342
2 549 342
3 549 342
我预计会有这样的答案:
zero one
1 80 136
2 97 87
3 372 119
我的代码有什么问题?
3. 是否有任何可以为所有列提供 IV 值的预构建函数?在搜索时,我发现了 iv.mult 函数,但我无法让它工作。任何建议都会很棒。
【问题讨论】:
-
(1) 请看一下如何制作great reproducible example。 (2) 你认为
IV是什么? -
@MartinGal:感谢您对可重现示例的建议。我已经完成了它,下次我会确保尽可能多地遵循,但是在这种情况下,我不知道如何附加 CSV 数据文件。