If I use the ecdfplot()
function of the latticeExtra
package how do I get the actual values calculated i.e. the y-values which correspond to the ~x|g
input?
I've been looking at ?ecdfplot
but there's not discription to it. For the usual highlevel function ecdf()
it works with the command plot=FALSE
but this does not work for ecdfplot()
.
The reason I want to use ecdfplot()
rather than ecdf()
is that I need to calculate the ecdf()
values for a grouping variable. I know I could do this handish too but I'm quite convinced that there is a highroad too.
Here a small expample
u <- rnorm(100,0,1)
mygroup <- c(rep("group1",50),rep("group2",50))
ecdfplot(~u, groups=mygroup)
I would like to extract the y-values given each group for the corresponding x-values.
If you stick with the ecdf() function in the base package, you can simply do as follows:
Create ecdf function with your data:
fun.ecdf <- ecdf(x) # x is a vector of your data
Now use this "ecdf function" to generate the cumulative probabilities of any vector you feed it, including your original, sorted data:
my.ecdf <- fun.ecdf(sort(x))
I know you said you don't want to use ecdf
, but in this case it is much easier to use it than to get the data out of the trellis object that ecdfplot
returns. (After all, that's all that ecdfplot
is doing- it's just doing it behind the scenes).
In the case of your example, the following will get you a matrix of the y values (where x
is your entire input u
, though you could choose a different one) for each 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: If you just want each column to correspond to the 50 x-values in that column, you could do:
ys = sapply(split(u, mygroup), function(g) ecdf(g)(g))
(Note that if the number of values in each group aren't identical, this will end up as a list rather than a matrix with columns).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With