如何从ecdfplot()中提取ecdf值

Dru*_*s2k 3 r extract extraction lattice ecdf

如果我使用包的ecdfplot()功能,latticeExtra我如何获得计算的实际值,即与~x|g输入相对应的y值?

我一直在看,?ecdfplot但没有描述它.对于通常的高级函数,ecdf()它适用于命令,plot=FALSE但这不起作用ecdfplot().

我想使用的原因ecdfplot(),而不是ecdf()在于我需要计算ecdf()为分组变量的值.我知道我也可以做到这一点,但我相信也有一条高路.

这里有一个小例子

u <- rnorm(100,0,1)
mygroup <- c(rep("group1",50),rep("group2",50))
ecdfplot(~u, groups=mygroup)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想为每个组提取相应x值的y值.

Dav*_*son 5

我知道你说过你不想使用ecdf,但在这种情况下,使用它比从返回的格子对象中获取数据容易得多。(毕竟,这就是所做的一切——它只是在幕后做的)。ecdfplotecdfplot

对于您的示例,以下内容将为您提供每个 ECDF的 y 值矩阵(x您的整个 input在哪里u,但您可以选择不同的值):

ecdfs = lapply(split(u, mygroup), ecdf)
ys = sapply(ecdfs, function(e) e(u))
# output:
#       group1 group2
#  [1,]   0.52   0.72
#  [2,]   0.68   0.78
#  [3,]   0.62   0.78
#  [4,]   0.66   0.78
#  [5,]   0.72   0.80
#  [6,]   0.86   0.94
#  [7,]   0.10   0.26
#  [8,]   0.90   0.94
# ...
Run Code Online (Sandbox Code Playgroud)

ETA:如果您只希望每列对应于该列中的 50 个 x 值,您可以执行以下操作:

ys = sapply(split(u, mygroup), function(g) ecdf(g)(g))
Run Code Online (Sandbox Code Playgroud)

(请注意,如果每组中的值数量不相同,则最终将作为列表而不是带有列的矩阵)。

  • 不客气。顺便说一句,如果这回答了您的问题,您可以[接受它作为答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 (2认同)

小智 5

如果你坚持使用基础包中的ecdf()函数,你可以简单地执行以下操作:

  1. 使用您的数据创建ecdf函数:

    fun.ecdf <- ecdf(x) # x is a vector of your data
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在使用这个"ecdf函数"来生成您提供它的任何向量的累积概率,包括原始的排序数据:

    my.ecdf <- fun.ecdf(sort(x))
    
    Run Code Online (Sandbox Code Playgroud)