标签: power-law

随机数发生器产生幂律分布?

我正在为C++命令行Linux应用程序编写一些测试.我想生成一堆具有幂律/长尾分布的整数.意思是,我经常得到一些数字,但大多数都是相对不频繁的.

理想情况下,我可以使用rand()或其中一个stdlib随机函数.如果没有,一个易于使用的C/C++块将是伟大的.

谢谢!

c++ random math power-law

28
推荐指数
3
解决办法
2万
查看次数

R中的线性回归(正常和对数数据)

我想在R中对正常和双对数图中的数据进行线性回归.

对于普通数据,数据集可能是以下数据:

lin <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))
plot (lin$x, lin$y)
Run Code Online (Sandbox Code Playgroud)

在那里,我想计算只为数据点2,3和4的线性回归画一条线.

对于双对数数据,数据集可能如下:

data = data.frame(
    x=c(1:15),
    y=c(
        1.000, 0.742, 0.623, 0.550, 0.500, 0.462, 0.433,
        0.051, 0.043, 0.037, 0.032, 0.028, 0.025, 0.022, 0.020
      )
    )
plot (data$x, data$y, log="xy")
Run Code Online (Sandbox Code Playgroud)

在这里,我想绘制数据集1:7和8:15的回归线.

我可以计算斜率y偏移量作为拟合的参数(R ^ 2,p值)吗?

如何对正常和对数数据做?

谢谢你的帮助,

斯文

plot r curve-fitting linear-regression power-law

7
推荐指数
1
解决办法
3万
查看次数

python情节和powerlaw适合

我有以下列表:

[6, 4, 0, 0, 0, 0, 0, 1, 3, 1, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 2, 3, 3, 2, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1, 0, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib power-law

7
推荐指数
2
解决办法
6123
查看次数

在Python中使用幂律来验证经验数据

我正在尝试使用powerlaw模块将幂律拟合到经验数据.我创建了以下数据,这些数据遵循指数2的幂律分布:

x = range(1,1000)
y = []

for i in x:
    y.append(i**(-2))
Run Code Online (Sandbox Code Playgroud)

我期望拟合幂定律的指数为2.然而,得到的指数偏离理论值很多:

    fitted_pl = powerlaw.Fit(y)

    fitted_pl.alpha
    Out[115]: 1.4017584065981563
Run Code Online (Sandbox Code Playgroud)

你能告诉我为什么会这样,或者指出我在这里做错了什么?

谢谢你的回答!

python power-law

7
推荐指数
1
解决办法
5280
查看次数

在幂律分布之后标准化/缩放/标准化多个变量的正确方法,用于线性组合

我想将社交网络图中的一些节点指标组合成单个值,以便对节点进行排序:

in_degree + betweenness_centrality = informal_power_index

问题在于,in_degree并且betweenness_centrality在不同的尺度上进行测量,例如0-15对0-35000,并遵循幂律分布(至少绝对不是正态分布)

有没有一种很好的方法来重新调整变量,以便在确定变量时不会主导另一个变量informal_power_index

三种明显的方法是:

  • 标准化变量(减去mean和除以stddev).这似乎会破坏分布太多,隐藏长尾值和高峰值之间的巨大差异.
  • 通过减去min(variable)和除以,将变量重新调整到[0,1]范围max(variable).这似乎更接近解决问题,因为它不会改变分布的形状,但也许它不会真正解决问题?特别是手段会有所不同.
  • 通过将每个值除以来均衡均值mean(variable).这不会解决尺度上的差异,但平均值可能对比较更重要?

还有其他想法吗?

linear-equation graph normalize rescale power-law

6
推荐指数
1
解决办法
2万
查看次数

Python幂律适合使用ODR的数据上限和非对称错误

我正在尝试使用python将一些数据拟合到幂律中.问题是我的一些点是上限,我不知道如何包含在拟合例程中.

在数据中,我把上限作为y中的误差等于1,其余的则小得多.您可以将此错误设置为0并更改uplims列表生成器,但随后拟合非常糟糕.

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *

# Initiate some data
x = [1.73e-04, 5.21e-04, 1.57e-03, 4.71e-03, 1.41e-02, 4.25e-02, 1.28e-01, 3.84e-01, 1.15e+00]
x_err = [1e-04, 1e-04, 1e-03, 1e-03, 1e-02, 1e-02, 1e-01, 1e-01, 1e-01]
y = [1.26e-05, 8.48e-07, 2.09e-08, 4.11e-09, 8.22e-10, 2.61e-10, 4.46e-11, 1.02e-11, 3.98e-12]
y_err = [1, 1, 2.06e-08, 2.5e-09, 5.21e-10, 1.38e-10, 3.21e-11, 1, 1]

# Define upper limits
uplims = np.ones(len(y_err),dtype='bool')
for i in range(len(y_err)):
    if y_err[i]<1:
        uplims[i]=0
    else:
        uplims[i]=1

# …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting power-law model-fitting data-fitting

6
推荐指数
1
解决办法
1179
查看次数

如何在 Python 中使数据正确符合幂律?

我正在考虑《莫比迪克》小说中独特单词的出现次数,并使用powerlawpython 包将 Words\xe2\x80\x99 频率拟合为幂律。

\n

我不知道为什么我不能重述 Clauset 等人之前工作的结果。因为 p 值和 KS 分数都是“坏”。

\n

这个想法是将独特单词的频率符合幂律。然而,Kolmogorov-Smirnov 测试通过计算得出的拟合优度scipy.stats.kstest看起来很糟糕。

\n

我有以下函数可以使数据符合幂律:

\n
import numpy as np\nimport powerlaw\nimport scipy\nfrom scipy import stats\n\ndef fit_x(x):\n    fit = powerlaw.Fit(x, discrete=True)\n    alpha = fit.power_law.alpha\n    xmin  = fit.power_law.xmin\n    print(\'powerlaw\', scipy.stats.kstest(x, "powerlaw", args=(alpha, xmin), N=len(x)))\n    print(\'lognorm\', scipy.stats.kstest(x, "lognorm", args=(np.mean(x), np.std(x)), N=len(x)))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

下载 Herman Melville 的小说 Moby Dick 中独特单词的频率(根据 Aaron Clauset 等人的说法,应该遵循幂律):

\n
wget http://tuvalu.santafe.edu/~aaronc/powerlaws/data/words.txt\n
Run Code Online (Sandbox Code Playgroud)\n

Python脚本:

\n
x =  np.loadtxt(\'./words.txt\')\nfit_x(x)\n
Run Code Online (Sandbox Code Playgroud)\n

结果: …

python math statistics r power-law

6
推荐指数
1
解决办法
4808
查看次数

Java 中用于文本生成的 Zipf 定律 - 太慢

嘿,我正在开发一个文本生成器,它应该生成数百万个不同的文本。为了使每个文本的内容更加真实,我使用了齐普夫定律,效果很好,单词分布正确。

但是以下next()函数执行速度非常慢,并且由于我想生成数百万篇文章,因此必须对其进行更改。(while循环是最慢的部分)

有人可以帮我弄这个吗?

我是这样实现的:

   public int next() {

    int rank;
    double frequency = 0;
    double dice;

    rank = rnd.nextInt(size);
    frequency = (1.0d / Math.pow(rank, this.skew)) / this.bottom;
    dice = rnd.nextDouble();


    while (!(dice < frequency) || (rank == 0)) {
        rank = rnd.nextInt(size);
        frequency = (1.0d / Math.pow(rank, this.skew)) / this.bottom;
        dice = rnd.nextDouble();
    }

    return rank;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我从以下位置获得了代码:http ://diveintodata.org/2009/09/13/zipf-distribution-generator-in-java/

java performance power-law

5
推荐指数
1
解决办法
2564
查看次数

如何执行多条曲线的联合拟合(在Python中)?

假设我通过简单的线性回归拟合一些数据点。现在我想对几组数据点执行几次联合线性回归。更具体地说,我希望所有拟合中的一个参数都相等,此处示意性地描述了 y 轴交点。

y 轴交点

在 Google 搜索了一段时间后,我既找不到任何执行此操作的 Python (Scipy) 例程,也找不到任何一般文献来说明如何完成此操作。

理想情况下,我不仅希望在简单线性回归的情况下执行这些联合拟合,而且还希望针对更一般的拟合函数(例如,联合指数的幂律拟合)执行这些联合拟合。

python curve-fitting linear-regression power-law

5
推荐指数
1
解决办法
3710
查看次数

python scipy stats pareto fit:如何工作

...帮助和在线文档说,函数scipy.stats.pareto.fit将要拟合的数据集以及变量b(指数),位置,比例作为变量。结果是三元组(指数,位置,比例)

从相同的分布生成数据应导致适合查找用于生成数据的参数,例如(使用python 3 colsole)

$  python
Python 3.3.0 (default, Dec 12 2012, 07:43:02) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Run Code Online (Sandbox Code Playgroud)

(在下面的代码行中,省略了python控制台提示符“ >>>”)

dataset=scipy.stats.pareto.rvs(1.5,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)
Run Code Online (Sandbox Code Playgroud)

但是这导致

(1.0, nan, 0.0)
Run Code Online (Sandbox Code Playgroud)

(指数1,应为1.5)和

dataset=scipy.stats.pareto.rvs(1.1,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)
Run Code Online (Sandbox Code Playgroud)

结果是

(1.0, nan, 0.0)
Run Code Online (Sandbox Code Playgroud)

(指数1,应为1.1)和

dataset=scipy.stats.pareto.rvs(4,loc=2.0,scale=0.4,size=10000)    #generating data
scipy.stats.pareto.fit(dataset)
Run Code Online (Sandbox Code Playgroud)

(指数应为4,位置应为2,比例应为0.4)

(1.0, nan, 0.0)
Run Code Online (Sandbox Code Playgroud)

等调用fit函数时给出另一个指数

scipy.stats.pareto.fit(dataset,1.4)
Run Code Online (Sandbox Code Playgroud)

总是精确地返回此指数

(1.3999999999999999, nan, 0.0)
Run Code Online (Sandbox Code Playgroud)

显而易见的问题是:我是否会完全误解此fit函数的用途,它的用法是否有所不同,还是只是被破坏了?

备注:在有人提到像Aaron Clauset网页(http://tuvalu.santafe.edu/~aaronc/powerlaws/)上比scipy.stats方法更可靠之前,应该使用它:可能是对的,但是它们也非常非常非常耗时,并且在普通PC上处理10000点的数据集需要花费很多小时(可能是几天,几周,几年)。

编辑:哦:拟合函数的参数不是分布的指数而是指数减1(但这不会改变上述问题)

python scipy power-law

4
推荐指数
2
解决办法
4330
查看次数