【问题标题】:Why getting similar output for quantile in r?为什么在 r 中获得类似的分位数输出?
【发布时间】:2021-12-08 18:50:25
【问题描述】:

我有两个不同的列

a = c(65.96924, 7.084438, 81.65288 )

b= c(2197.62974660844, 1934.40212085843, 1939.64438773692, 
    )`

它们是不同的,但我想知道为什么我在应用时会输出相似的输出:

   quants <- seq(0, 1, length.out = 51)
   ecdf(a)(quantile(a, quants))
   ecdf(b)(quantile(b, quants))

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您手动计算 ecdf 而不是使用 ecdf() 函数(这只是一个在 n 个数据点中的每一个处增加 1/n 的阶跃函数),则可以更好地理解这一点。由于两者的长度相同,因此您会得到相同的结果。

    quants <- seq(0, 1, length.out = 51)
    
    A <- sort(a)
    B <- sort(b)
    
    A_ecdf <- 1:length(A)/length(A)
    B_ecdf <- 1:length(B)/length(B)
    
    plot(A, A_ecdf, type = "s", col = 1)
    par(new = TRUE)
    plot(B, B_ecdf, type = "s", col = 2)
    

    虽然我不确定您到底要做什么,但How to find quantiles of an empirical cumulative density function (ECDF) 的可能解决方案可能是:

    my_quantile <- function(x, prob) {
      n <- length(x)
      approx(seq(0, 1, length = n), x, prob)$y
    }
    
    my_quantile(A, quants)
    my_quantile(B, quants)
    

    【讨论】:

    • @bicton - 您的问题是为什么在应用代码时会得到相同的输出。目前尚不清楚您还想做什么。如果您有单独的问题,请编辑此问题或创建一个新问题。
    【解决方案2】:

    您正在计算分位数本身而不是分布的经验累积分布函数,例如ecdf(b)(2000)。根据定义,您最终会得到一条直线。

    【讨论】:

    • 只是一个获取ecdf值的示例,以表明它返回了a和b的其他值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2020-07-06
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多