如何从ecdfplot()中提取ecdf值

时间:2012-08-29 00:49:36

标签: 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)

enter image description here

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

2 个答案:

答案 0 :(得分:5)

如果你坚持使用基础包中的ecdf()函数,你可以按照以下步骤操作:

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

    fun.ecdf <- ecdf(x) # x is a vector of your data
    
  2. 现在使用这个&#34; ecdf功能&#34;生成您提供的任何矢量的累积概率,包括原始的排序数据:

    my.ecdf <- fun.ecdf(sort(x))
    

答案 1 :(得分:4)

我知道您说您不想使用ecdf,但在这种情况下, 更容易使用它而不是从{{3}获取数据} ecdfplot返回的对象。 (毕竟,这就是ecdfplot所做的一切 - 它只是在幕后进行)。

对于您的示例,以下内容将为您提供y值的矩阵(其中x是您的整个输入u,但您可以为每个ECDF选择不同的值):

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
# ...

ETA:如果您只想让每列与该列中的50个x值相对应,您可以这样做:

ys = sapply(split(u, mygroup), function(g) ecdf(g)(g))

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