0

我已经绘制了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')

现在,根据teucerHowto 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 感到非常困惑。

图片1
在此处输入图像描述


图片2在此处输入图像描述

4

2 回答 2

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)。)

于 2011-07-13T15:01:25.880 回答
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

抱歉这么晚才发布。谢谢你们!

于 2012-01-04T11:17:20.093 回答