如果我使用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)
我想为每个组提取相应x值的y值。
答案 0 :(得分:5)
如果你坚持使用基础包中的ecdf()函数,你可以按照以下步骤操作:
使用您的数据创建ecdf函数:
fun.ecdf <- ecdf(x) # x is a vector of your data
现在使用这个&#34; ecdf功能&#34;生成您提供的任何矢量的累积概率,包括原始的排序数据:
my.ecdf <- fun.ecdf(sort(x))
答案 1 :(得分:4)
我知道您说您不想使用ecdf
,但在这种情况下, 更容易使用它而不是从{{3}获取数据} 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))
(请注意,如果每个组中的值数不相同,则最终将显示为列表而不是带有列的矩阵。)