计算r中的多重信息值



我是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的字符向量,填充空字符串""

  1. 你的代码没有使用正确的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

最可能是你要找的。

  1. 不知道IV的含义

最新更新