【问题标题】:Using cut2 in Hmisc package for large N对大 N 使用 Hmisc 包中的 cut2
【发布时间】:2016-09-14 22:00:30
【问题描述】:

似乎对于大的N(比如2e6Hmisc 包中的cut2 函数会引发错误

 y = cut2(rnorm(2000000,0,1),m=sqrt(2000000))

 Error in if (cj == upper) next : missing value where TRUE/FALSE needed
 In addition: Warning message:
 In (1:g) * nnm : NAs produced by integer overflow

我正在尝试获取我的数据的分位数,每个分位数中有m 个点,并记录每个分位数的端点。 cut2 可以做到这一点,但对于大型 N 来说不是很好。有更好的选择吗?

【问题讨论】:

    标签: r quantile hmisc


    【解决方案1】:

    这是你想要的吗?

    cut3 = function(x, m) {
        p = seq(0, 1, by = m / length(x))
        q = quantile(x, probs = p, names = F)
        result = cut(x, breaks = q)
    }
    

    测试一下:

    x = rnorm(2e6)
    m = sqrt(2e6)
    qq = cut3(x, m)
    summary(as.numeric(table(qq)))
    # Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    # 1414    1414    1414    1414    1414    1415 
    head(qq)
    # [1] (0.4757,0.4779] (-1.021,-1.018] (0.4325,0.4344] (1.376,1.381]   (-2.156,-2.138] (0.1215,0.1233]
    # 1414 Levels: (-4.964,-3.196] (-3.196,-2.981] (-2.981,-2.86] (-2.86,-2.766] (-2.766,-2.696] (-2.696,-2.637] ... (3.145,3.607]
    

    【讨论】:

    • 有一些细微的差别,正如我开始看到的那样。 cut2 使用 m 作为每个 bin 中的最小观测数,而 cut3 强制每个 bin 具有完全相同的观测数。后者导致一些观察结果未放入箱中。是否可以使用quantilecut 更改此设置?
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2014-04-20
    相关资源
    最近更新 更多