R、Python还是Octave:带置信区间的经验分位数(逆CDF)?

2 投票
1 回答
2442 浏览
提问于 2025-04-16 02:32

我在找一个内置函数,可以返回样本的分位数以及一个估计的置信区间,而不是在MATLAB中(因为MATLAB的ecdf可以做到这一点)。

我猜R语言应该有这个内置功能,只是我还没找到。

如果你有任何独立的代码可以实现这个功能,也可以在这里分享,不过我希望能找到一些包含在更大开源代码库中的东西。

-我想摆脱MATLAB。

1 个回答

4

survfit 函数可以用来获取带有置信区间的 生存 函数。因为它其实就是 1 减去经验累积分布函数(ecdf),所以分位数之间有直接的关系。要使用这个函数,你需要先创建一个变量,表明你的每个观察值都是完整的(没有被删减):

library(survival)
x <- rexp(10)
ev <- rep(1, length(x))
sf <- survfit(Surv(x,ev)~1)

输出结果是:

>summary(sf)
Call: survfit(formula = Surv(x, ev) ~ 1)

     time n.risk n.event survival std.err lower 95% CI upper 95% CI
-1.4143     10       1      0.9  0.0949       0.7320        1.000
-1.1229      9       1      0.8  0.1265       0.5868        1.000
-0.9396      8       1      0.7  0.1449       0.4665        1.000
-0.4413      7       1      0.6  0.1549       0.3617        0.995
-0.2408      6       1      0.5  0.1581       0.2690        0.929
-0.1698      5       1      0.4  0.1549       0.1872        0.855
 0.0613      4       1      0.3  0.1449       0.1164        0.773
 0.1983      3       1      0.2  0.1265       0.0579        0.691
 0.5199      2       1      0.1  0.0949       0.0156        0.642
 0.8067      1       1      0.0     NaN           NA           NA

实际上,survfit 确实会计算中位数及其置信区间,但不会计算其他分位数:

>sf
Call: survfit(formula = Surv(x, ev) ~ 1)

records   n.max n.start  events  median 0.95LCL 0.95UCL 
 10.000  10.000  10.000  10.000  -0.205  -0.940      NA 

计算中位数置信区间的具体过程其实隐藏在 survival:::survmean 函数里,你可以考虑用它来推广到其他分位数的计算。

撰写回答