我是R编程的新手,试图学习兼职,所以提前为幼稚的编码和问题道歉。我花了大约1天的时间试图找出这个代码,但无法做到这一点,因此在这里询问。
https://www.kaggle.com/c/titanic/data?select=train.csv
我正在从Kaggle导入的火车泰坦尼克号数据集为train_data。我已经清理了所有的冷色调,并在需要的地方将它们转换为因子。
我的问题是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个多列的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.多功能,但我不能让它工作。有什么建议就太好了。
让我们来看看你的问题:
1。
length(factor_vars)
#> [1] 12
length()
返回向量factor_vars
的元素个数。因此,您的代码numeric(length(factor_vars))
被评估为numeric(12)
,它返回长度为12的数字向量,默认填充零。
同样适用于character(length(factor_vars))
,它返回长度为12的字符向量,填充空字符串""
。
- 你的代码没有使用正确的
dplyr
语法
library(dplyr)
library(dplyr)
train_data %>%
group_by(Pclass) %>%
summarise(zero = sum(Survived == 0),
one = sum(Survived == 1))
返回# A tibble: 3 x 3
Pclass zero one
<dbl> <int> <int>
1 1 80 136
2 2 97 87
3 3 372 119
最可能是你要找的。
- 不知道
IV
的含义