gpt4 book ai didi

r - 如何找到经验累积密度函数 (ECDF) 的分位数

转载 作者:行者123 更新时间:2023-12-03 20:18:32 25 4
gpt4 key购买 nike

我正在使用 ecdf()从一些随机样本中计算经验累积密度函数 (ECDF) 的函数:

set.seed(0)
X = rnorm(100)
P = ecdf(X)

现在 P给出 ECDF,我们可以绘制它:
plot(P)
abline(h = 0.6, lty = 3)

ecdf

我的问题是 : 我怎样才能找到样本值 x ,使得 P(x) = 0.6 ,即 ECDF 的 0.6 分位数,或 ECDF 与 h = 0.6 交点的 x 坐标?

最佳答案

下面,我不会使用ecdf() ,因为我们很容易获得经验累积密度函数(ECDF)。
首先,我们对样本进行排序 X按升序排列:

X <- sort(X)
这些样本中的 ECDF 采用函数值:
e_cdf <- 1:length(X) / length(X)
然后我们可以通过以下方式勾画 ECDF:
plot(X, e_cdf, type = "s")
abline(h = 0.6, lty = 3)
enter image description here
现在,我们正在寻找 X 的第一个值,使得 P(X) >= 0.6 .这只是:
X[which(e_cdf >= 0.6)[1]]
# [1] 0.2290196
由于我们的数据是从标准正态分布中采样的,因此理论分位数是
qnorm(0.6)
# [1] 0.2533471
所以我们的结果非常接近。

延期
CDF 的倒数是分位数函数 (例如, pnorm() 的倒数是 qnorm() ),可以猜测 ECDF 的倒数为样本分位数,即倒数 ecdf()quantile() .这不是真的!
ECDF 是一个阶梯/阶梯函数,它没有逆 .如果我们围绕 y = x 旋转 ECDF ,所得曲线不是数学函数。 所以样本分位数与ECDF无关 .
对于 n排序样本, 样本分位数函数实际上是一个线性插值函数(x, y) , 和:
  • x 值是 seq(0, 1, length = n) ;
  • y 值被排序样本。

  • 我们可以定义我们自己版本的样本分位数函数 经过:
    my_quantile <- function(x, prob) {
    if (is.unsorted(x)) x <- sort(x)
    n <- length(x)
    approx(seq(0, 1, length = n), x, prob)$y
    }
    我们来做个测试:
    my_quantile(x, 0.6)
    # [1] 0.2343171

    quantile(x, prob = 0.6, names = FALSE)
    # [1] 0.2343171
    请注意,结果与我们从 X[which(e_cdf >= 0.6)[1]] 得到的不同.
    正是因为这个原因,我拒绝使用 quantile()在我的回答中。

    关于r - 如何找到经验累积密度函数 (ECDF) 的分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537311/

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