我正在为C++命令行Linux应用程序编写一些测试.我想生成一堆具有幂律/长尾分布的整数.意思是,我经常得到一些数字,但大多数都是相对不频繁的.
理想情况下,我可以使用rand()或其中一个stdlib随机函数.如果没有,一个易于使用的C/C++块将是伟大的.
谢谢!
我想在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值)吗?
如何对正常和对数数据做?
谢谢你的帮助,
斯文
我有以下列表:
[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) 我正在尝试使用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)
你能告诉我为什么会这样,或者指出我在这里做错了什么?
谢谢你的回答!
我想将社交网络图中的一些节点指标组合成单个值,以便对节点进行排序:
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).这不会解决尺度上的差异,但平均值可能对比较更重要?还有其他想法吗?
我正在尝试使用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) 我正在考虑《莫比迪克》小说中独特单词的出现次数,并使用powerlawpython 包将 Words\xe2\x80\x99 频率拟合为幂律。
我不知道为什么我不能重述 Clauset 等人之前工作的结果。因为 p 值和 KS 分数都是“坏”。
\n这个想法是将独特单词的频率符合幂律。然而,Kolmogorov-Smirnov 测试通过计算得出的拟合优度scipy.stats.kstest看起来很糟糕。
我有以下函数可以使数据符合幂律:
\nimport 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)))\nRun Code Online (Sandbox Code Playgroud)\n下载 Herman Melville 的小说 Moby Dick 中独特单词的频率(根据 Aaron Clauset 等人的说法,应该遵循幂律):
\nwget http://tuvalu.santafe.edu/~aaronc/powerlaws/data/words.txt\nRun Code Online (Sandbox Code Playgroud)\nPython脚本:
\nx =  np.loadtxt(\'./words.txt\')\nfit_x(x)\nRun Code Online (Sandbox Code Playgroud)\n结果: …
嘿,我正在开发一个文本生成器,它应该生成数百万个不同的文本。为了使每个文本的内容更加真实,我使用了齐普夫定律,效果很好,单词分布正确。
但是以下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/
假设我通过简单的线性回归拟合一些数据点。现在我想对几组数据点执行几次联合线性回归。更具体地说,我希望所有拟合中的一个参数都相等,此处示意性地描述了 y 轴交点。
在 Google 搜索了一段时间后,我既找不到任何执行此操作的 Python (Scipy) 例程,也找不到任何一般文献来说明如何完成此操作。
理想情况下,我不仅希望在简单线性回归的情况下执行这些联合拟合,而且还希望针对更一般的拟合函数(例如,联合指数的幂律拟合)执行这些联合拟合。
...帮助和在线文档说,函数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(但这不会改变上述问题)
power-law ×10
python ×6
math ×2
r ×2
c++ ×1
data-fitting ×1
graph ×1
java ×1
matplotlib ×1
normalize ×1
performance ×1
plot ×1
random ×1
rescale ×1
scipy ×1
statistics ×1