2012-08-29 31 views
3

如果我使用latticeExtra包的ecdfplot()函数,我该如何获得计算出的实际值,即与~x|g输入对应的y值?如何从ecdfplot中提取ecdf值()

我一直在寻找?ecdfplot,但没有任何描述。对于通常的高级功能ecdf()它与命令plot=FALSE一起使用,但这对ecdfplot()不起作用。

我想用ecdfplot()而非ecdf()的原因是,我需要计算分组变量的值ecdf()。我知道我也可以这样做,但我确信还有一条公路。

这里小expample

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

enter image description here

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

+0

你能否加入一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)'ecdfplot',以及你如何使用它?这会让你的问题更容易回答。 –

+0

好吧不好编辑一个在第二个PLZ – Druss2k

回答

3

我知道你说你不想使用ecdf,但在这种情况下,它是更容易使用,这比让数据从trellis对象,它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)) 

(请注意,如果值的每个组中的数量是不相同的,这将结束作为列表而不是包含列的矩阵)。

+0

THX非常。我可能采取了更难的方法:) – Druss2k

+1

非常欢迎。顺便说一句,如果这回答了你的问题,你可以[接受它作为答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

+0

哦,sry,我真的忘了:) – Druss2k

4

如果你坚持在基础包ECDF()函数,你可以简单地做如下:

fun.ecdf <- ecdf(x) # x is a vector of your data 
  • 现在使用此:

    1. 与您的数据创建ECDF功能“ecdf函数”生成任何载体的累积概率,包括原始分类数据:

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