如何从 ecdfplot() 中提取 ecdf 值

5
如果我使用latticeExtra包的ecdfplot()函数,如何获取实际计算的值,即与~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值。


你能否提供一个可重现的例子(https://dev59.com/eG025IYBdhLWcg3whGSx),展示如何使用`ecdfplot`函数?这将使得回答你的问题更加容易。 - David Robinson
好的,我马上编辑一个,请稍等。 - Druss2k
2个回答

11
如果您坚持使用基础包中的ecdf()函数,可以按照以下步骤进行操作:
  1. 使用您的数据创建ecdf函数:
  2. fun.ecdf <- ecdf(x) # x is a vector of your data
    
    现在使用这个“ecdf函数”来生成任何向量的累积概率,包括您的原始排序数据:
    my.ecdf <- fun.ecdf(sort(x))
    

但是如果要处理50列变量,你该怎么做呢? - nerdlyfe
1
@ElChapo data <- matrix(rnorm(100), 10, 10); apply(data, 2, function(x) ecdf(x)(sort(x)))@ElChapo data <- matrix(rnorm(100), 10, 10); apply(data, 2, function(x) ecdf(x)(sort(x))) - algae

5

我知道你说你不想使用 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
# ...

备注:如果您希望每列与该列中的50个x值相对应,则可以执行以下操作:

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

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

非常感谢。我可能采取了更困难的方法 :) - Druss2k
2
非常欢迎。顺便说一下,如果这回答了你的问题,你可以将其接受为答案 - David Robinson
1
没问题。顺便说一下(这并不是为了施压或责备你),我注意到你还有几个问题得到了很好的答案,但是你没有接受它们。如果你接受了它们(虽然你没有义务这样做),你将获得一些声望点,奖励那些帮助过你的人,并确保未来阅读你问题的人知道什么方法有效。 - David Robinson
哦,好的,那是我的错。也许我仍然可以接受它们 :) 我会看一下的。虽然我不太喜欢刻意追求积分,但如果其他人从中受益,那肯定很重要。所以我接受了所有给我提供了好答案的人:)。再次感谢。 - Druss2k
我有一个关于你的回答的问题:对于分组变量的每个因素,我将得到相应于ecdf函数的n个y值。但在示例中,每个组仅获得n1 = n2 = 50个观测值。我现在可以从你提供的表格中获取与分组因素对应的y值吗?例如,如果x1来自group1,我会取左边的值,如果x2来自group2,我会取右边的值吗? - Druss2k
请查看我上面的编辑。有其他的方法可以安排这些数据 - 我相信您可以根据这些示例找到它们。 - David Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接