标度律:大一倍会怎样
把一个系统放大一倍,它的各个部分不会都跟着大一倍。体重翻一千倍,代谢率只翻一百倍;城市人口翻一倍,加油站只多不到一成,专利却多出一成以上。比例不守恒,是复杂系统里最稳定、也最容易量到的一条经验律。这一页把四种标度律摆在双对数纸上:怎么量、量到什么、以及最容易量错的地方在哪。
本页实验台
LAB 01
异速生长
把代谢率对体重画在双对数纸上,看 3/4 次幂那条直线
问题
大象比老鼠重十万倍,可它的代谢率只高了大约五千倍——为什么不是十万倍?Kleiber 1932 年发现这条 3/4 次幂的规律,它在从细菌到蓝鲸跨二十多个数量级的范围内都成立。
模型
异速生长律:双对数纸上是直线,斜率就是指数。
B = B₀ M3/4; 单位质量代谢 ∝ M−1/4, 心率 ∝ M−1/4, 寿命 ∝ M1/4
B 是代谢率,M 是体重。心率与寿命的指数正好相消——大象和老鼠一生的心跳总数都在十亿次上下。West–Brown–Enquist 1997 年用"分形输运网络在三维身体里等效为四维"解释了 3/4,至今仍有争论。拟合出来的斜率—
R²—
每千克的代谢率:1 / 10 / 100 / 1000 千克—
体重差一千倍时,寿命差几倍—
双对数纸上是一条直线,斜率就是指数。默认参数下拟合斜率 0.7524,R² = 0.9942——和蓝色虚线(3/4)几乎重合,而明显低于灰色点线(斜率 1)。斜率 1 意味着"大一倍就耗一倍",而真实的动物是大一倍只多耗 0.68 倍。这就是 Kleiber 1932 年的定律:代谢率 ∝ 体重^(3/4),它在从细菌到蓝鲸跨 20 多个数量级的范围内都成立。看第三行读数:每千克的代谢率是 70.0 / 39.4 / 22.1 / 12.4。体重涨一千倍,每千克的"烧钱速度"降到原来的 1/5.6。大动物不是小动物的放大版,它们按单位质量算活得更省、更慢。第四行给的是同一件事的另一面:心率 ∝ 体重^(−1/4),寿命 ∝ 体重^(1/4),两者相乘抵消——大象和老鼠一生的心跳总数都在十亿次上下。把真实指数拖到 1.00 再看:每千克代谢率变成 70.0 / 70.0 / 70.0 / 70.0,寿命倍数变成 1.00×——那是一个"没有规模效应"的世界,也是一个不存在的世界。现在做一件更重要的事:把体重跨度拖到 2、个体差异拖到 0.30、物种数拖到 40。拟合斜率掉到 0.69,R² 掉到 0.51。真实指数一点没变,但你已经量不出它了。这是所有标度律研究的第一条操作纪律:要想把指数量准到小数点后一位,自变量至少得跨两到三个数量级,只跨一个数量级的"幂律"基本上量的是噪声。(3/4 从哪来?West、Brown 和 Enquist 1997 年的解释是:生物靠一套分形的输运网络(血管、气管、维管束)把养分送到每个细胞,这套网络在三维身体里有效地表现为四维,于是指数是 3/4 而不是 2/3。这个解释至今仍有争论,但"输运网络的几何决定标度指数"这个思路被广泛接受。)
LAB 02
城市标度律
基础设施的 0.85 次幂与社会产出的 1.15 次幂,同一张图上两条斜率
问题
城市人口翻一倍,加油站只多不到一成,专利却多出一成以上。这两个方向相反的指数决定了城市为什么既更省又更快,也决定了城市增长会撞上什么样的墙。
模型
城市标度律:Y ∝ Nβ,两类量的 β 分居 1 的两侧。
基础设施 β ≈ 0.85(规模经济); 社会产出 β ≈ 1.15(收益递增); 人均变化 = 2β−1 − 1
N 是人口。β > 1 的增长在有限时间内发散,必须靠一轮比一轮更快的创新把奇点往后推(West 的"加速的跑步机")。而且橙线上的东西是打包涨的:专利、工资、犯罪率、传染速度同属一条指数。基础设施:拟合 / 真实—
社会产出:拟合 / 真实—
人口翻倍,人均基础设施省多少—
人口翻倍,人均产出多多少—
同一张图上两条斜率,方向相反,这就是城市标度律的全部内容。蓝色是基础设施——路网总长、电缆长度、加油站数量,指数 β ≈ 0.85,低于 1;橙色是社会产出——专利、工资总额、GDP、餐馆数量,指数 β ≈ 1.15,高于 1。读数第三、四行把它翻译成人能听懂的话:城市人口翻一倍,人均基础设施省下 9.87%,人均产出多出 10.96%。这是 Bettencourt 和 West 2007 年那篇论文的核心发现,在美国、德国、中国、日本的数据上都能重复出来。低于 1 的那条叫规模经济:管道和电网可以共用,人越多摊得越薄。这也是大城市人均碳排放反而更低的原因。高于 1 的那条叫收益递增,它的机制是"人和人之间的连接数"。基础设施长在二维的地面上,而互动长在社会网络里,人多一倍,可能的互动对数多三倍不止。但橙色这条线有一个不祥的推论。任何 β > 1 的增长,在有限时间内会发散——不是增长得快,是真的会在某个有限的时刻冲到无穷。West 的解释是:城市靠一轮一轮的重大创新(蒸汽、电力、汽车、计算机、互联网)把这条曲线往后推,而且每一轮创新必须来得比上一轮更快,才赶得上发散的速度。这就是他说的"加速的跑步机"。还有一条常被忽略的推论:橙线上的东西是打包涨的。专利、工资、GDP 是超线性的,而犯罪率、传染病传播速度、生活节奏也是同一条指数——它们由同一个机制(互动密度)驱动,没法只要好的那一半。(把城市数拖到 20、离散程度拖到 0.30:拟合值变成 0.898 和 1.127,两个指数都朝 1 塌陷。样本少、噪声大的时候,标度律会系统性地被低估成"就是等比例"。很多"我们这儿没有城市标度律"的结论,其实是样本不够。)
LAB 03
Zipf 与齐夫定律
城市人口、词频、公司规模排序后都落在同一条斜率 -1 的线上
问题
城市人口、单词词频、公司规模、姓氏人数——把它们从大到小排好,都落在同一条斜率 −1 的直线上。这条经验规律出奇地普遍,而"怎么把这个指数量准"是一个长期被做错的问题。
模型
排序图斜率与分布指数的关系,以及两种估计量。
P(X > x) ∝ x−(α−1) ⟹ 排序图斜率 = −1 ⁄ (α−1); Hill 估计 α̂ = 1 + m ⁄ Σ log(xi/xmin)
排序图上做最小二乘是文献里最常见的估法,也是最常见的错误:排序后相邻点高度相关,最小二乘的独立残差假设从根上不成立,置信区间是假的。应当用极大似然(Hill)。排序图斜率:实测 / 理论—
由斜率反推的 α / 真实 α—
极大似然(Hill)估计的 α—
只用前 30% 反推的 α—
把一堆数从大到小排好,横轴放排名、纵轴放大小,双对数纸上又是一条直线。城市人口、单词词频、公司规模、网站流量、姓氏人数都这样。α = 2 时斜率正好是 −1,这就是"第二名是第一名的一半、第十名是第十分之一"的齐夫定律。它和幂律分布不是两件事:如果 P(X > x) ∝ x^(−(α−1)),那么排序图的斜率必然是 −1/(α−1),读数第一行就在核对这件事。接下来是这一页最值钱的部分。排序图上做最小二乘回归,是文献里最常见的估 α 的方法,也是最常见的错误。拖动样本量,把三个 α 读数对着看:在 n = 100 到 3000 之间,回归给出的 α 在 1.77 到 2.02 之间晃,而极大似然(Hill 估计)给出的一直在 1.91 到 2.04 之间,真值是 2.00。回归不仅更散,还系统性地偏小。原因不难理解:排序之后相邻的点高度相关,最小二乘假设的"独立同分布残差"从根上就不成立,于是它给出的置信区间也是假的——通常窄得离谱。第四行更反直觉:只用前 30% 的点去拟合,结果更差(1.62~2.01)。很多人以为"幂律是尾部的事,所以只拟合尾部更严谨",但在数据本身干净的时候,丢掉 70% 的样本换来的只是更大的方差。(截尾什么时候才是对的?下一个实验台就在回答这个问题——答案是:当数据的"身子"根本不服从幂律的时候。而那时候截尾会带来另一种麻烦。)一句话的操作建议:报 α 用极大似然,别用排序图回归;排序图留着画,用来看直不直,不用来量斜率。
LAB 04
幂律还是对数正态
同一份数据两种拟合,用尾部图和似然比说清怎么判
问题
"这是幂律"这句话在过去二十年被说了太多次。问题是:怎么判断一份数据到底是幂律还是别的重尾分布?这一台让你自己造数据、自己判,然后看自己会不会判错——答案通常是会。
模型
用似然比比较两个候选分布,并正视 xmin 的选择。
R = ℓpower − ℓlognormal; R > 0 偏向幂律,|R| 小则分不出; xmin 应由数据定(Clauset:最小化 KS 距离)
任何右偏重尾分布,只看最右边一小段都像幂律——因为足够短的一段曲线总能用直线拟合。更糟的是样本量增大不能纠正这种由截尾引入的偏差,只会让错误结论更自信。拟合出来的 α—
起点 x_min(用了多少个点)—
对数似然:幂律 / 对数正态—
似然比 R = 幂律 − 对数正态—
结论—
"这是幂律"这句话,在过去二十年里被说了太多次。这个实验台让你自己造数据、自己判,然后看自己会不会判错。R 是两个模型的对数似然之差:R > 0 偏向幂律,R < 0 偏向对数正态,|R| 很小说明这份数据根本分不出来。先选"幂律",一切正常:默认参数下 α̂ = 2.572(真值 2.50),R = +387.66,判定"更像幂律"。把样本量拖大,R 从 +54 一路涨到 +1369——证据随样本量线性累积,这正是似然比该有的行为。现在把"真正来自哪种分布"切成"对数正态",先别动别的。R = −528.05,判定"更像对数正态"。很好,这个检验是管用的。接下来做那件事:把"只用最大的百分之几"从 100% 拖到 20%。R 变成 +29.21,判定翻成了"更像幂律",而 α̂ = 2.441——一个漂亮得可以直接写进论文的数字。数据一个字节都没改,它仍然是对数正态。拖到 10% 时 R = +2.55,落进"证据很弱";拖到 5% 时 R = +7.67,又偏向幂律。这就是幂律文献里最大的系统性问题:任何右偏的重尾分布,只看它最靠右的一小段,都像幂律。因为足够短的一段曲线总能用直线拟合。更糟的在后面:把样本量拖到 3000,仍然只用前 20%。R = +119.49——错误的结论变得更自信了。样本量增大并不能纠正一个由截尾引入的偏差,它只会让你更确定地错下去。这一页想给的是三条可以照着做的纪律:一,报 α 必须同时报 x_min 和 x_min 之上还剩几个点——只剩三十个点的"幂律"没有说服力;二,x_min 要用数据本身定(Clauset 等人的做法是最小化 KS 距离),不能靠肉眼挑一个"看起来直"的地方;三,永远要和至少一个别的重尾分布比过,对数正态、指数截断的幂律、拉伸指数都是标准对手。没做过这三件事的"幂律",通常只是一条在对数纸上看起来直的曲线。
这一页想说的
标度律说的是同一件事的两半:规模变了,比例不守恒,而且不守恒的方式往往能写成一个干净的幂。生物的 3/4、城市基础设施的 0.85 与社会产出的 1.15,背后都是"输运网络的几何"或"互动对数的组合学",不是巧合。而这一页用一半的篇幅讲的是另一半:幂律很容易看见,也很容易看错。跨度不到两个数量级量不准指数;排序图回归系统性偏小且置信区间是假的;截尾能把任何重尾分布变成"幂律",而且样本越大错得越自信。一条真正站得住的标度律,要有跨度、有极大似然、有 x_min、有对手模型。