2012-08-29 65 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))