gpt4 book ai didi

R summary() 为太多的 NA 提供了不正确的值

转载 作者:行者123 更新时间:2023-12-01 03:25:55 27 4
gpt4 key购买 nike

设置

我有一个由 3.5e6 1、7.5e6 0 和 4.4e6 NA 组成的数据集。当我调用 summary()在它上面,我得到一个错误的平均值和最大值(与 mean()max() 不一致)。

> summary(data, digits = 10)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0 0 1 1 1 1 4365239

mean()单独调用,它返回一个合理的值:
> mean(data, na.rm = T)
[1] 0.6804823

问题的表征

看起来这个问题对于任何超过 3162277 NA 值的向量都是通用的。

刚好在截止点以下:
> thingie <- as.numeric(c(rep(0,1e6), rep(1,1e6), rep(NA,3162277)))
> summary(thingie)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.0 0.0 0.5 0.5 1.0 1.0 3162277

刚刚结束:
> thingie <- as.numeric(c(rep(0,1e6), rep(1,1e6), rep(NA,3162278)))
> summary(thingie)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0 0 0 0 1 1 3162278

有多少非缺失值似乎也无关紧要。
> thingie <- as.numeric(c(rep(0,1), rep(1,1), rep(NA,3162277)))
> summary(thingie)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.0 0.2 0.5 0.5 0.8 1.0 3162277
> thingie <- as.numeric(c(rep(0,1), rep(1,1), rep(NA,3162278)))
> summary(thingie)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0 0 0 0 1 1 3162278

研究
  • 在寻找答案时,我遇到了众所周知的舍入错误,但这并不影响这种行为(参见第一个代码块)。
  • 我认为这可能是我的环境/机器/行星对齐的某种奇怪的怪癖,所以我让我姐姐运行相同的代码。她在她的机器上得到了同样的结果。

  • 结束语

    显然,这不是一个关键问题,因为 mean()max()可以使用函数代替 summary() ,但我很好奇是否有人知道导致这种行为的原因。另外,我姐姐和我都找不到任何提及它,所以我想我会记录下来以供后代使用。

    编辑:我说的是整个帖子的意思和最大值,但最大值很好。第一分位数、中位数和第三分位数不同。

    最佳答案

    以下是一些示例数据:

    x <- rep(c(1,0,NA), c(3.5e6,7.5e6,4.4e6))
    out <- summary(x)
    out
    # Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    # 0 0 0 0 1 1 4400000

    mean(x, na.rm=TRUE)
    #[1] 0.3181818

    问题可以追溯到 zapsmall()因为它在本质上做了一些舍入:
    c(out)
    # Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    # 0.000e+00 0.000e+00 0.000e+00 3.182e-01 1.000e+00 1.000e+00 4.400e+06

    round(c(out), max(0L, getOption("digits")-log10(4400000)))
    # Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    # 0 0 0 0 1 1 4400000

    这里的关键转折点是 31622773162278 NA当它超过 0.5 时,它将舍入阈值从 0 提示到 1 的值。
    dput(max(0L,getOption("digits")-log10(3162277)))
    #0.500000090664876

    dput(max(0L,getOption("digits")-log10(3162278)))
    #0.499999953328896

    out[7] <- 3162277
    out
    # Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    # 0.0 0.0 0.0 0.3 1.0 1.0 3162277

    out[7] <- 3162278
    out
    # Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    # 0 0 0 0 1 1 3162278

    关于R summary() 为太多的 NA 提供了不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603703/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com