绘制步行持续时间的CCDF

时间:2011-07-13 14:35:42

标签: r ecdf

我已根据maximum plot points in R?帖子的问题部分绘制了CCDF,以获得带有此代码的图(image1):

ccdf<-function(duration,density=FALSE)
{
freqs = table(duration)
  X = rev(as.numeric(names(freqs)))
  Y =cumsum(rev(as.list(freqs)));
  data.frame(x=X,count=Y)
}
qplot(x,count,data=ccdf(duration),log='xy')

现在,根据teucer Howto Plot “Reverse” Cumulative Frequency Graph With ECDF的回答,我尝试使用以下命令绘制CCDF:

f <- ecdf(duration)
plot(1-f(duration),duration)

我有一个像image2的情节 另外,我从Plotting CDF of a dataset in R?中的一个答案的评论中读到,因为CCDF只不过是1-ECDF。 我对如何获取数据的CCDF感到困惑。

IMAGE1
enter image description here


图像2 enter image description here

2 个答案:

答案 0 :(得分:3)

生成一些数据并找到ecdf函数。

x <- rlnorm(1e5, 5)
ecdf_x <- ecdf(x)

在x的范围内以固定间隔生成矢量。 (编辑:在这种情况下,您希望它们在对数刻度上均匀分布;如果您有负值,则在线性刻度上使用样本。)

xx <- seq(min(x), max(x), length.out = 1e4)
#or
log_x <- log(x)
xx <- exp(seq(min(log_x), max(log_x), length.out = 1e3))

使用x和y坐标为绘图创建数据。

dfr <- data.frame(
  x = xx,
  ecdf = ecdf_x(xx),
  ccdf = 1 - ecdf_x(xx)
)

绘制情节。

p_ccdf <- ggplot(dfr, aes(x, ccdf)) + 
  geom_line() +
  scale_x_log10()
p_ccdf

(另请查看aes(x, ecdf)。)

答案 1 :(得分:1)

我使用ggplot来获取我的数据所需的ccdf图,如下所示:

>>ecdf_x <- ecdf(x) 
>>dfr <- data.frame( ecdf = ecdf_x(x), 
>>ccdf = 1 - ecdf_x(x) ) 
>>p_ccdf <- ggplot(dfr, aes(x, ccdf)) + geom_line() + scale_x_log10() 
>>p_ccdf

很抱歉发布这么晚了。 谢谢大家!