怎么判断一组数据真的服从幂律(power law)——以及为什么大多数时候它并不服从
过去三十年里,"这个量服从幂律"变成了一句被说得很轻的话。城市规模、论文引用数、网页链接、姓氏频率、战争死亡人数、蛋白质相互作用——都被这样宣布过。做法通常是:把数据画在双对数坐标(两个轴都是每格乘以 10)上,看着像直线,拟合一条线,报出斜率,完事。
问题在于这个流程的每一步都有毛病,而且毛病都朝同一个方向偏:它倾向于把不是幂律的东西判成幂律。这一页要回答的就是:一个诚实的判断流程长什么样,以及为什么"看着像直线"这件事本身几乎不携带证据。
Clauset、Shalizi 与 Newman 在 2009 年给出的流程是目前的标准做法,只有四步,每一步都在堵一个具体的漏洞:
把这四步跟"画个图、拉条线"对比一下就明白差别在哪:后者只做了"能不能拟合",而前者问的是"拟合得够不够好"和"有没有更好的解释"。
先看一个纯粹画法上的坑,它比统计问题更早出现,也更容易犯。下面两张图用的是同一组数据——一千个从真幂律里抽出来的数——只是画法不同。
左边是最常见的画法:把横轴切成等宽的格子数个数。尾部每个格子里往往只有 0 个或 1 个样本,于是所有非空格子都落在"1 个样本"那条底线上,画出来是一排毫无意义的水平点。这排点在视觉上和在拟合中都占了很大权重,而它们携带的信息接近于零。
右边画的是同一批数:横轴仍是规模 x,纵轴改成"有百分之多少的样本超过了 x"。这个量叫互补累积分布函数(complementary cumulative distribution function),业内缩写成 CCDF——下文这么用。CCDF 不需要分格,每个数据点都用上,尾部因此保持干净。要画,就画 CCDF;等宽直方图在重尾数据上基本不可用。
画法解决之后,统计问题才登场,而它更难对付。把 Clauset 那套流程跑在真实数据上,最常见的结局有两种:一种是拟合优度检验直接把幂律否掉;另一种是幂律活了下来,但对数正态活得一样好,似然比检验给出"分不清"。
这不是数据不够努力。幂律和对数正态在有限的数量级范围内本来就极其相似——前者是"每翻一倍概率乘以固定系数",后者是"取对数之后是钟形",两者在两三个数量级内的差别小于典型的抽样噪声。想把它们分开,往往需要多出一到两个数量级的数据,而尾部的数据天生稀少。
这套方法解释的不是自然现象,而是一段学术史上的系统性偏差:为什么在 2000 年前后,幂律看起来到处都是。
三个原因叠在一起。画法上,等宽直方图和最小二乘拟合都倾向于给出"像幂律"的结果。检验上,当时几乎没人做拟合优度检验,"能拟合"被当成了"成立"。发表上,报告"我们发现了幂律"比报告"我们发现它其实是对数正态"更容易发出去。
2009 年之后风向变了。这套流程被广泛采用之后,很多经典的幂律主张被重新审视,其中相当一部分没能通过;网络科学里"真实网络是无标度的"这个招牌主张,后来也遭遇了系统性的反驳。这段历史本身是个有用的样本:一个足够好用的形状,可以在方法学补上之前,独自流行二十年。