周末去听了集智俱乐部的讲座,内容是城市生长与演化,讲座过后觉得自己还是对幂律分布没有很深刻的理解。对幂律分布的认识还停留在zipf定律和长尾理论上,为了深刻认识这一定律和对抗失业,决定边学习边记录,遂开始写下这篇学习笔记。
因为是学习,这篇文章更多的是摘录和整理,主要是给自己提供一个思路。作为一个初学者,深刻的见解可能要日后才能有吧,不过幂律分布确实是系统科学一个很重要的模块,很多模型规律分析到后头都可以用幂律分布来解释。
目录
幂律分布
幂律分布的特征
幂律分布案例
1、地震的能量
2、Zipf定律
3、帕累托法则和帕累托分布
如何估计和判断幂律分布
经典的回归+决定系数
极大似然估计+KS检验
参考链接
首先要说的是中心极限定理——在复杂的多因素情况下,只要个体相互独立,集体效果就应该是正态分布。然而实际运用中,尤其是金融中,更多面对的是尖峰胖尾现象(本科学习中印象第二深的词,课堂论文中不知道说什么了就搬出来扯一扯,orz)比如下面这幅图描述的是标普500指数的收益率分布,很明显的是,实际的收益率的分布和理想中的正态分布不一致,这就是所谓的尖峰胖尾特征,峰值更高,尾巴部分也拖的更长更厚。正是有了尖峰胖尾,可以想象,有些东西可以超出想象的大,并且出现这个的概率也非常大,这样的陡峭且延长很长的分布就是所谓的幂律分布(两个特征:陡峭,延长很长)。
幂律分布就是概率密度函数服从幂函数的分布,幂律分布的通式可以写作 [见下图a],其中
是正的随机变量,
。[其实如果从图形来观察,频次直方图就相当于样本的概率密度图,对于一个样本绘制其频次直方图可以观察其是否符合幂律分布]
对概率密度函数两边取对数,可得 [见下图b,双对数坐标下]。因此,在双对数坐标下,幂律分布表现为 一条斜率为幂指数的负数的直线(类似这个
),这一线性关系是判断给定的实例中随机变量是否满足幂律的依据。在自然界与日常生活中,地震规模大小的分布 (古登堡+里希特定律)、月球表面上月坑直径的分布、行星间碎片大小的分布、太阳耀斑强度的分布、计算机文件大小的分布、战争规模的分布、人类语言中单词频率的分布、大多数国家姓氏的分布、科学家撰写的论文数的分布、论文被引用的次数的分布、网页被点击次数的分布、每类生物中物种数的分布、甚至电影所获得的奥斯卡奖项数的分布等,都是经典的幂律分布。然而实际过程中可能不存在这么好的一致性,因此我们从案例和图像中更加熟悉和了解幂律分布。
从图形上看,幂律分布不存在某个值使得大概率事件都分布在这个值附近,并且随着x值得越来越大,y值下降的没有那么快。正是由于幂律分布的极端不均匀性,其方差与均值意义不大,概率高的事件不反映平均行为,偏离均值很多的事件占比很大。对幂律分布来说,幂律指数小于等于2时均值发散,幂指数小于等于3时方差发散。比方来说,各国GDP中最高与最低两个国家可以差几万倍,那么两个相差几万倍的量的平均值就没有什么意义了,就像计算数学中总是回避把一个很大的数与一个很小的数直接作加法一样,称为“大数吃小数”现象。
然而幂律分布有一个很重要的特征就是标度不变性。[标度不变性的含义:在复杂网络上任选一局部,由于其自相似性,局部网络的形态、规律、功能均与原网络不会发生变化,即在尺度伸缩时具有对称性。]观察不同尺度的总体, 对应的高概率和低概率的结构关系是不变的,即对应的只是系数上有差别,函数性质不变。打个比方,像用一个放大镜观察这个分布,无论看什么细节,放大多少倍数,所得到的性质是一样的,这种现象被称为无特征尺度。
拿帕累托80/20法则来说,80/20法则说20%的人口掌握了80%的财富。而在这个掌握的80%财富的的20%人口中,又有20%掌握了其中的80%,而在穷人部分随便划出一部分,也会发现20%的较为富有的占有了这部分穷人总财富的80%。当看任何财富的区间,都会有同样的规律,这个规律和所划定的区间无关。
上图是地震研究得到的地震的能量/震级和发生频率的关系,由于某些原因,上图前半部分的线性特性并不是很强,而在后半部分则近乎为一直线,其斜率的负数就是幂指数,我们可以看出地震的能量分布呈现一个幂律分布(震级和能量是一个对数关系)。
Zipf定律就是:如果把单词出现的频率按由大到小的顺序排列,则每个单词出现的频率 f 与它的名次 r 的常数次幂存在简单的反比关系(即 ),这种分布就称为Zipf定律。Zipf定律是描述一系列实际现象的特点非常到位的经验定律之一。Zipf是对词频大小进行高低排序,然后以排序大小作为横轴,以对应的词出现的次数作为纵轴,在双对数坐标下呈现直线特征。其数学表达:
,其中,
是规模(频数),
是排序,
是Zipf指数。Zipf定律很著名的应用就是长尾定律。
帕累托法则又称为80/20法则,即所有变量中,最重要的仅有20%,虽然剩余的80%占了多数,控制的范围却远低于“关键的少数”。广义的Pareto法则——p 份额的人口占据总财富1-p的份额。并且这个规律是可以迭代的,如p^2份额的人口占据总财富的份额,份额(1-p)^2的人口占据总财富的份额。
帕累托分布是一个尖峰厚尾分布。对于一个随机变量X来说,是X能取到的最小值,X的概率分布函数是
其中, 和
决定了分布函数的位置和形状,
决定了分布函数曲线与x轴的交点值。
其概率密度函数,
,因此帕累托分布是一个幂律函数。[帕累托分布和其他幂律分布的图形长的很不太一样,不过其实它和Zipf定律的图像是关于y=x对称的,双对数坐标下直线的斜率是互为倒数的,
(颠倒横纵轴看看)]
另一种解释,帕累托分布是一个从某一个x积分到无穷大的累积分布函数,表示大于某个量的人口份额正比于这个量的一个幂次函数[即 ]。幂律函数的积分还是幂律函数,但幂指数会加1[积分幂指数+1,求导幂指数-1],所以幂律分布就可以通过逆累积分布得到Pareto分布。
Pareto分布和Zipf定律都是幂律分布的代表,Pareto分布是典型的规模-概率分布[幂律分布本身定义是规模-频次,和Pareto 分布相似的,当样本足够大的话,频率就是概率],Zipf分布是典型的名次-频次分布(规模是表示一定意义的数字)。它们在双对数坐标下都变现为斜率为负的直线,Zipf定律的横轴是频次排序(序号),Pareto的横轴是规模(数字),二者都符合 。三者的关系是
对幂律分布的估计和检验主要主要是经典的回归+决定系数,极大似然估计+KS检验。
经典的回归+决定系数
如果知道分布函数的形式[确定是幂律分布],通过直方图就可以直接进行非线性回归,图18是我们对于一些随机数得到的直方图进行幂函数回归的结果,使用工具为origin 8。可以直接得到参数的估计置信区间(一般是95%)和说明拟合效果的决定系数R2。如果决定系数大,说明用幂律分布函数拟合是合适的。这儿采用的最小二乘法拟合是使得残差的平方和最小。
更为广泛的方法是对数线性回归,即
,用最小二乘回归后同样得到参数的估计和决定系数。
如果只知道规模和排序的关系,可以用
[这就类似于Zipf分布],根据关系折算得出
,但一些研究发现直接这样回归在样本量不多的时候容易出现偏差,而建议使用
极大似然估计+KS检验
用极大似然估计法同样可以估计参数,极大似然法通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,其前提是分布模型已知,即在模型已知的前提下,求似然函数最大时的参数。
回到幂律分布检验,以前主要是通过最小二乘法得到的R2来进行检验,一般决定系数越大就说明理论分布符合得很好,但多少才算好难以判断,大家对于决定系数的临界值等信息难以计算或者获得。目前学术上比较常用的检验是KS(Kolmogorov-Smirnov)检验。
KS检验与t-检验之类的其他方法不同是KS检验不需要知道数据的分布情况,因此可以算是一种非参数检验方法。然而这样方便的代价就是当检验的数据分布符合特定的分布时,KS检验的灵敏度没有相应的检验来的高。但在样本量比较小的时候,KS检验作为非参数检验在分析两组数据之间是否一致时相当有用。
[t-检验的假设是所检验的数据满足正态分布,否则对于小样本(可能不满足正态分布)用t-检验就会造成较大的偏差,尽管对于不满足正态分布的大样本数据而言,t-检验还是相当精确有效的手段。]
KS检验广泛运用于比较频率分布F(x)与理论分布G(x)或者两个观测值分布的检验方法。其原假设H0 : 两组数据分布一致或者数据符合理论分布。
,F(x)和G(x)分别表示经验的和理论的累积概率,k为样本从小到大排列后的序数,当实际观测值D>D(n,α),则拒绝H0,否则就不拒绝H0假设。[或者看p值,p>p0,不拒绝原假设,p
现在,幂律分布随机数生成、幂律参数估计和幂律分布检验的程序可以直接从网上获取。在SAS中,KS测试在
PROC NPAR1WAY中
。在R中,加载dgof包,允许ks.test()
实现KS检验。在Stata中,该命令ksmirnov
执行KS检验。
解读幂律与无标度网络 | 网络科学入门 [本科的老师写的文章]
为何我们如此在意无标度性?
KS检验