我想在对数轴上为我的一些模拟幂律尾数据绘制CCDF图,下面是我在正常轴上绘制CCDF图的R代码,我使用了链接上的代码: (How to plot a 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图:
但是,我想在对数轴上绘制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))
答案 0 :(得分:4)
您没有提供数据,因此不会尝试回归输出,但构建图表应该非常容易:
plot(sort(x) , 1-ecdf(x)(sort(x) ), log="xy")
您确实收到警告,因为最极端的点将具有1的ecdf并且1-1不能具有日志值。使用随机抽样的对数正态变量,该情节看起来像。轴的交替标记可以通过抑制绘图调用中的轴刻度,然后使用axis
函数添加它们来完成。这是通过使用默认参数的对数正态分布的500个实现样本完成的:
答案 1 :(得分:2)
您应该使用[poweRlaw][1]
包。
加载包并生成一些数据:
library(poweRlaw)
x = rplcon(1000, 1, 2)
接下来创建一个连续的powerlaw对象
m = conpl$new(x)
剧情
plot(m)
估算缩放参数
p = estimate_pars(m)
m$setPars(p)
并将拟合线添加到图
lines(m, col=2)
有关详细信息,请参阅包装晕影。
BTW,在估计缩放参数时避免简单的线性回归(所有假设都被打破)。答案 2 :(得分:1)
这是使用分位数的另一种方式。
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