在累积频率图上找到给定 y 的 x

Find x given y on cumulative frequency graph

我正在从内核平滑分布中导出 CDF

这是我的设置

library("DiagTest3Grp", lib.loc='~/R/win-library/3.2")

data <- c(34,46,47,48,52,53,55,56,56,56,57,58,59,59,68)
bw <- BW.ref(data)
x0 <- seq(0, 100, .1) 
KS.cdfvec <- Vectorize(KernelSmoothing.cdf, vectorize.args = "c0")
x0.cdf <- KS.cdfvec(xx = data, c0 = x0, bw = bw)
plot(x0, x0.cdf, type = "l")

生成图表

然而,我太菜鸟了,我不知道如何在给定 y 的情况下推导 x(反之亦然),我希望因为它是一个简单的 x,y 图,所以我只需要查找横截面

给定 CDF 中的值 y,您需要 pdf 中的对应值 x 对应于此。你可以只使用 approx,但是因为在 approx 你 指定 yout 而不是 xout,只需翻转输入

> approx(y=x0, x=x0.cdf, xout=0.8)
$x
[1] 0.8

$y
[1] 58.95378

记住我们翻转了输入,所以这意味着 CDF 中的值 0.8 这对应于 x=58.95378 的值。这还假设 CDF 线性插值的这个小区域是一个合理的近似值。

如果我们有一个值 x 并且只需要 CDF 的关联值,则不需要参数翻转,因此您可以只使用

> approx(x=x0, y=x0.cdf, xout=55)
$x
[1] 55

$y
[1] 0.5090248

尝试分位数...

> data <- c(34,46,47,48,52,53,55,56,56,56,57,58,59,59,68)
> quantile(ecdf(data), .5)
    50%
    56