【问题标题】:R equal frequency binning functionsR 等频分箱函数
【发布时间】:2020-05-05 03:32:32
【问题描述】:

我希望能够通过 R 将我的 xvars 放入相同频率的 bin 中,然后根据每个 bin 中的响应变量分析变量,这将有助于选择我将哪些变量放入我的逻辑模型中。我已经尝试通过包 rbin 使用 rbin_equal_freq 但这默认为 20 个 bin 的输出,这有助于选择 vars 但最好我想要 5 个 bin。我是 R 和建模的新手,任何帮助都会很好,即使能够快速有效地将 tibble 转换为 5 个 bin。

rbin_equal_freq(df, y, x, bins = 5).
Output:
  lower_cut upper_cut bin_count  good   bad good_rate      woe         iv entropy
      <dbl>     <dbl>     <int> <int> <int>     <dbl>    <dbl>      <dbl>   <dbl>
1  -12.3      -6.97          33     0    33    0      Inf      Inf        NaN    
2   -6.86     -5.15          33     1    32    0.0303   1.43     0.0602     0.196
3   -5.12     -4.09          33     2    31    0.0606   0.709    0.0192     0.330
4   -4.04     -3.18          33     1    32    0.0303   1.43     0.0602     0.196
5   -3.15     -2.62          33     2    31    0.0606   0.709    0.0192     0.330
6   -2.55     -1.99          33     3    30    0.0909   0.270    0.00331    0.439
7   -1.98     -1.32          33     4    29    0.121   -0.0513   0.000135   0.533
8   -1.30     -0.878         33     4    29    0.121   -0.0513   0.000135   0.533
9   -0.878    -0.478         33     2    31    0.0606   0.709    0.0192     0.330
10   -0.463    -0.0775        33     3    30    0.0909   0.270    0.00331    0.439
11   -0.0775    0.447         33     1    32    0.0303   1.43     0.0602     0.196
12    0.449     1.05          33     4    29    0.121   -0.0513   0.000135   0.533
13    1.05      1.65          33     3    30    0.0909   0.270    0.00331    0.439
14    1.65      2.32          33     5    28    0.152   -0.310    0.00542    0.614
15    2.32      2.96          33     2    31    0.0606   0.709    0.0192     0.330
16    2.96      3.59          33     5    28    0.152   -0.310    0.00542    0.614
17    3.62      4.73          33     6    27    0.182   -0.528    0.0171     0.684
18    4.75      5.98          33     8    25    0.242   -0.893    0.0555     0.799
19    5.99      8.12          33     8    25    0.242   -0.893    0.0555     0.799
20    8.13     16.4           29    12    17    0.414   -1.68     0.217      0.978

我还使用了在此处创建的不同函数来尝试创建相同频率的 bin,但由于不熟悉该语言而苦苦挣扎,因此非常感谢任何建议。

【问题讨论】:

    标签: r function data-science modeling bins


    【解决方案1】:

    我不确定 r_bin_equal 在做什么...这似乎很奇怪,它需要两个变量而不仅仅是一个变量——它必须做的不仅仅是合并单个变量。

    相同频率的分箱在分位数处有切点。我们可以编写一个快速函数,使用quantile 计算断点,使用cut 对数据进行分箱:

    bin_equal = function(x, nbin = 5) {
      breaks = quantile(x, probs = seq(0, 1, length.out = nbin + 1), na.rm = TRUE)
      return(cut(x, breaks = breaks, labels = 1:nbin, include.lowest = TRUE))
    }
    
    bin_equal(rnorm(20), nbin = 3)
    #  [1] 2 1 2 2 3 3 3 1 1 3 3 3 1 2 1 3 2 2 1 1
    # Levels: 1 2 3
    

    请注意,这将返回 factor

    【讨论】:

    • findInterval(x, breaks, all.inside = TRUE) 而不是 cut 返回与 bin_equal 的输出匹配的整数向量。
    • 谢谢!如何使用应用函数集将其应用于我的所有列/xvariable,然后针对我的响应/二进制变量进行分析?努力让我的头脑了解申请家庭
    • 如果要应用到名为df 的数据框中的所有列,可以使用df[] = lapply(df, bin_equal)。或for(col in 1:ncol(df)) df[, col] = bin_equal(df[, col])。如果你想更好地理解*apply,我强烈推荐this FAQ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    相关资源
    最近更新 更多