Dru*_*s2k 3 r extract extraction lattice ecdf
如果我使用包的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)
Run Code Online (Sandbox Code Playgroud)

我想为每个组提取相应x值的y值.
我知道你说过你不想使用ecdf,但在这种情况下,使用它比从返回的格子对象中获取数据要容易得多。(毕竟,这就是所做的一切——它只是在幕后做的)。ecdfplotecdfplot
对于您的示例,以下内容将为您提供每个 ECDF的 y 值矩阵(x您的整个 input在哪里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
# ...
Run Code Online (Sandbox Code Playgroud)
ETA:如果您只希望每列对应于该列中的 50 个 x 值,您可以执行以下操作:
ys = sapply(split(u, mygroup), function(g) ecdf(g)(g))
Run Code Online (Sandbox Code Playgroud)
(请注意,如果每组中的值数量不相同,则最终将作为列表而不是带有列的矩阵)。
小智 5
如果你坚持使用基础包中的ecdf()函数,你可以简单地执行以下操作:
使用您的数据创建ecdf函数:
fun.ecdf <- ecdf(x) # x is a vector of your data
Run Code Online (Sandbox Code Playgroud)现在使用这个"ecdf函数"来生成您提供它的任何向量的累积概率,包括原始的排序数据:
my.ecdf <- fun.ecdf(sort(x))
Run Code Online (Sandbox Code Playgroud)