4

如果我使用包的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)

在此处输入图像描述

我想提取给定每个组对应的 x 值的 y 值。

4

2 回答 2

10

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

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

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

    my.ecdf <- fun.ecdf(sort(x))
    
于 2015-02-17T22:15:38.737 回答
5

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

在您的示例中,以下将为您提供每个 ECDF 的 y 值矩阵(x您的整个输入在哪里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
# ...

ETA:如果您只希望每列对应于该列中的 50 个 x 值,您可以这样做:

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

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

于 2012-08-29T01:35:36.307 回答