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

我想提取给定每个组的 y 值以获得相应的 x 值。

最佳答案

我知道你说过你不想使用 ecdf ,但在这种情况下,使用它比从 ecdfplot 返回的 trellis 对象中获取数据要容易得多。 (毕竟,这就是 ecdfplot 正在做的 - 它只是在幕后做的)。

在您的示例中,以下内容将为您提供每个 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))

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

关于r - 如何从 ecdfplot() 中提取 ecdf 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12169502/

10-12 17:15