我确信这很容易,但是我一直在试图找出如何在R中做到这一点.
我有一些数据,我试图适应幂律分布.为此,您需要在对数日志累积概率图表上绘制数据.y轴是数据频率的LOG(如果您愿意,则为对数概率),x轴是值的对数.如果它是直线,则它符合幂律分布,并且梯度确定幂律参数.
如果我想要数据的频率,我可以使用ecdf()函数:
我的数据集叫做Profits.negative,它只是一长串的交易利润小于零(我将它们全部转换为正数以避免以后记录问题).
所以我可以输入
plot(ecdf(Profits.negative))
Run Code Online (Sandbox Code Playgroud)
我得到了一个方便的经验CDF功能.我需要做的就是将两个轴转换为对数刻度.我可以做x轴:
Profits.negative.logs <- log(Profits.negative)
plot(ecdf(Profits.negative.logs))
Run Code Online (Sandbox Code Playgroud)
差不多了!我只需要弄清楚如何记录y轴!但我似乎无法做到这一点,我无法弄清楚如何从ecdf对象中提取数字.有人可以帮忙吗?
我知道有一个power.law.fit函数,但这只是估计参数 - 我想绘制数据并查看它是否排列.
您可以使用poweRlaw包来拟合和绘制幂律.这是一个例子.首先,我们从重尾分布中生成一些数据:
set.seed(1)
x = round(rlnorm(100, 3, 2)+1)
Run Code Online (Sandbox Code Playgroud)
接下来,我们加载包并创建一个数据对象和一个displ对象:
library(poweRlaw)
m = displ$new(x)
Run Code Online (Sandbox Code Playgroud)
我们可以估算xmin
和缩放参数:
est = estimate_xmin(m))
Run Code Online (Sandbox Code Playgroud)
并设置参数
m$setXmin(est[[2]])
m$setPars(est[[3]])
Run Code Online (Sandbox Code Playgroud)
然后绘制数据并添加拟合线:
plot(m)
lines(m, col=2)
Run Code Online (Sandbox Code Playgroud)
要得到: