1

我想在对数轴上为我的一些模拟幂律尾数据绘制 CCDF 图,下面是我在法线轴上绘制 CCDF 图的 R 代码,我使用了链接上的代码:(如何绘制CCDF gragh?

> load("fakedata500.Rda")
> x<-fakedata500
> f<-ecdf(x)
> f
Empirical CDF 
Call: ecdf(x)
 x[1:500] = 0.50174, 0.50307, 0.50383,  ..., 81.674, 140.63
> plot(f)

下面是 ECDF 图:

在此处输入图像描述

> plot(sort(x), 1-f(sort(x)), type="s", lwd=1)

这个命令给了我CCDF图:

在此处输入图像描述

但是,我想在 log-log 轴上绘制我的 CCDF 图,以生成如下图所示的图:(图来自“最小化识别有机体的 Lévy 飞行行为的错误。”)

在此处输入图像描述

有没有办法在 R 中做到这一点?

如果是这样,如何对 CCDF 图进行线性回归?我尝试过使用下面的命令,但这对我不起作用。

a<-plot(sort(x), 1-f(sort(x)), type="s", lwd=1)
> a
NULL
> res=lm(a)
Error in terms.formula(formula, data = data) : 
  argument is not a valid model

非常感谢。


更新:

我使用@BondedDust 给出的代码并成功生成了CCDF 图:

(plot(sort(x) , 1-ecdf(x)(sort(x) ), log="xy"))

在此处输入图像描述

以下是我如何生成数据集的代码:

u<-runif(500)
fakedata500<-((2*(1-u))^(-1))
4

3 回答 3

4

您没有提供数据,因此不会尝试回归输出,但构建图应该很容易:

plot(sort(x) , 1-ecdf(x)(sort(x) ), log="xy")

您确实会收到警告,因为最极端的点的 ecdf 为 1 并且 1-1 不能有日志值,因为它被省略了。使用对数正态变量的随机样本,该图看起来像。可以通过在绘图调用中抑制轴刻度然后使用axis函数添加它们来完成轴的替代标记。这是通过使用默认参数的对数正态分布中的 500 个实现样本完成的:

在此处输入图像描述

于 2014-05-04T16:38:26.957 回答
3

这是使用分位数的另一种方法。

library(VGAM)  # for rpareto(...)
set.seed(1)    # for reproducible example
X <- rpareto(1000,location=1,shape=1)
p <- ppoints(100)
par(mfrow=c(1,3))
plot(quantile(X,p=p),p,type="l",ylab="P(X < x)",xlab="x",main="CDF")
plot(quantile(X,p=p),1-p,type="l",ylab="P(X > x)",xlab="x",main="CCDF")
plot(log(quantile(X,p=p)),log(1-p),
     ylab="log[P(X > x)]",xlab="log(x)",main="CCDF: log-log")

这是回归。

df  <- data.frame(x=log(1-p),y=log(quantile(X,p=p)))
fit <- lm(y~x,df)
summary(fit)
# ...
# Coefficients:
#              Estimate Std. Error  t value Pr(>|t|)    
# (Intercept)  0.039559   0.007584    5.216 1.02e-06 ***
# x           -0.944380   0.005427 -174.028  < 2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 0.05317 on 98 degrees of freedom
# Multiple R-squared:  0.9968,  Adjusted R-squared:  0.9967 
# F-statistic: 3.029e+04 on 1 and 98 DF,  p-value: < 2.2e-16
于 2014-05-04T16:50:47.250 回答
2

您应该为此使用该[poweRlaw][1]软件包。

加载包并生成一些数据:

library(poweRlaw)
x = rplcon(1000, 1, 2)

接下来创建一个连续幂律对象

m = conpl$new(x)

阴谋

plot(m)

估计缩放参数,

p = estimate_pars(m)
m$setPars(p)

并将拟合线添加到图中

lines(m, col=2)

有关更多详细信息,请参阅包小插曲。

顺便说一句,在估计缩放参数时避免简单的线性回归(所有假设都被打破)。

于 2014-05-04T17:35:23.000 回答