如何根据R中“信息”包中的证据箱的重量来分组数据

问题描述 投票:0回答:1

R中的以下代码行

library("Information")

set.seed(100)

Y <- sample(c(0,1), replace=TRUE, size=50)
X <- dnorm(rnorm(50))

data <- as.data.frame(cbind(X,Y))

create_infotables(data, y = "Y", bins = 5)

生成输出:

$Tables
$Tables$X
            X  N Percent        WOE         IV
1 [0.01,0.09]  9    0.18 -0.3834862 0.02655379
2  [0.1,0.23] 10    0.20  0.2451225 0.03839546
3 [0.25,0.36] 10    0.20 -0.5658078 0.10217411
4 [0.36,0.39] 10    0.20  0.2451225 0.11401578
5  [0.39,0.4] 11    0.22  0.3992731 0.14809223


$Summary
  Variable        IV
1        X 0.1480922

attr(,"class")
[1] "Information"

现在我想要实现的是将数据帧的X列转换为包含与数据点对应的bin的WOE值的列。因此,在数据框中使用区间[0.01,0.09]中的X值进行的观察应全部替换为值-0.3834862,依此类推。

我该怎么办?

cut()我有一点距离:

> cut(X, c(0,01.09,0.23,0.36,0.39,0.4),
      labels = c(-0.3834862,0.2451225,-0.5658078,0.2451225,0.3992731))

 [1] -0.5658078 0.2451225  -0.5658078 -0.3834862 -0.5658078 0.2451225  -0.3834862 0.2451225  0.2451225  0.2451225 
[11] -0.5658078 0.2451225  -0.5658078 -0.3834862 0.2451225  0.2451225  -0.3834862 -0.3834862 0.2451225  0.2451225 
[21] -0.3834862 -0.5658078 -0.3834862 0.2451225  -0.3834862 -0.5658078 -0.3834862 0.2451225  -0.3834862 -0.3834862
[31] 0.2451225  -0.3834862 -0.3834862 -0.3834862 0.2451225  -0.5658078 0.2451225  -0.5658078 -0.3834862 0.2451225 
[41] 0.2451225  0.2451225  0.2451225  0.2451225  0.2451225  -0.5658078 -0.3834862 -0.3834862 -0.3834862 -0.3834862
Levels: -0.3834862 0.2451225 -0.5658078 0.2451225 0.3992731
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated

但是,结果中的值是因子标签。 as.numeric()没有帮助,因为它返回标签号。 cut()的另一个问题是我不知道如何从$ Tables $ X $ X中提取切割点并将它们传递给cut函数。

r binning
1个回答
0
投票

但是,结果中的值是因子标签。 as.numeric()没有帮助,因为它返回标签号。

你有什么期望?通常,cut()会为您提供一个因子输出,其(字符串)标签包含中断。

如果您只想获取级别代码的整数向量,而不是(字符串)标签,请执行cut(, ...labels=FALSE)

但显然你也不想要(那么你想要什么?)。

cut()的另一个问题是我不知道如何从$ Tables $ X $ X中提取切割点并将它们传递给cut函数。

你想从create_infotables()获得休息的向量:

  • 存储输出:mytbl <- create_infotables(data, y = "Y", bins = 5)
  • 然后找出mytbl的哪个属性来获取你的自定义休息时间。看看ls(mytbl)attributes(mytbl)。说它是mytbl$mybreaks(我不知道那个包但你明白了)。
  • 然后使用你的自定义休息时间cut(mytbl, breaks=mytbl$mybreaks)
© www.soinside.com 2019 - 2024. All rights reserved.