主页 模型库 竞赛 学习中心 工具箱 论文库 前沿 建模空间 AI建模
学习中心 探索专题 分形 粗糙度与多重分形

本页实验台

  1. Hurst 指数
  2. R/S 分析
  3. 多重分形谱
  4. 长记忆与伪趋势
LAB 01

Hurst 指数

拖动 H,看同一份随机数长成平滑山脊还是锯齿噪声

问题
一条价格曲线"毛不毛"、一段心电"抖不抖",能不能用一个数说清?Hurst 指数给出这个数,而且它同时是相邻步的相关性、尺度律的指数、和曲线的分形维数——三件事其实是一件。
模型
分数高斯噪声由 H 唯一决定,本页用 Durbin–Levinson 递推做精确合成。
γ(k) = ½( |k+1|2H − 2|k|2H + |k−1|2H ),  ρ(1) = 22H−1 − 1,  D = 2 − H
γ(k) 是滞后 k 的自协方差。常见的"中点位移"是近似方法,它的自相关结构和真正的 fGn 对不上——用它来检验估计方法会得到假结论,所以这里用精确合成。
增量的一阶自相关:实测 / 理论—
增量的尺度律斜率 / 真实 H—
曲线的分形维数 D = 2 − H—
涨完接着涨的比例:实测 / 理论—
上面那条曲线是累积值,下面那条是它每一步的增量。两条图讲的是同一件事,但下面那条更容易看出问题所在:H 决定的是相邻两步之间的相关性。把 H 拖到 0.50,一阶自相关读数在 0 附近(0.018 / 0.000),相邻两步毫无关系,上面就是一条标准的随机游走。把 H 拖到 0.70:自相关跳到 0.319,而理论值 2^(2H−1) − 1 = 0.3195,几乎一模一样。把 H 拖到 0.15:自相关变成 −0.368,涨完倾向于跌,曲线立刻变成一团毛刺。第四行读数把这件事翻译成了赌徒能听懂的话:"这一步和上一步同方向"的比例,理论值是 ½ + arcsin(ρ)/π。H = 0.15 时是 0.374,H = 0.50 时是 0.500,H = 0.70 时是 0.614,H = 0.95 时是 0.815。第三行是这一页最值得记住的一个等式:曲线的分形维数 D = 2 − H。H = 0.5 的随机游走维数是 1.5,H = 0.95 的曲线维数只有 1.05(几乎是条普通的线),H = 0.15 的曲线维数 1.85(几乎要填满平面了)。"粗糙度"和"分形维数"是同一个量的两个名字。第二行是在核对合成是否正确:间隔 k 步的涨跌幅标准差应当正比于 k^H,双对数斜率应当等于 H——读数给的是 0.6956 对 0.70。(顺带一提:这里用的是 Durbin–Levinson 递推做的精确合成,不是常见的"中点位移"近似。中点位移快,但它生成的序列自相关结构和真正的分数高斯噪声对不上,用它来检验估计方法会得到假的结论。)
LAB 02

R/S 分析

从一条序列反推 H:重标极差法一步步算给你看

问题
Hurst 当年研究尼罗河水位,发明了 R/S 分析;今天它在金融、水文、生理信号里到处都是。问题是:这个方法本身准不准?这一台在"已知答案"的数据上考它。
模型
R/S 与 DFA 两种估计量:
R/S:(R/S)n ∝ nH,  R = maxkΣ − minkΣ,  S = 样本标准差
DFA:先累加、每窗去掉一条直线,F(n) ∝ nH
R/S 在有限样本下是有偏的(Anis–Lloyd 1976 给出了修正项),在纯白噪声上会稳定报出 0.55 左右;DFA 因为"先去趋势"而稳得多。
R/S 估出来的 H—
DFA 估出来的 H—
真实的 H—
两者的误差:R/S / DFA—
R/S(重标极差)是 Hurst 1951 年研究尼罗河水位时发明的方法,也是今天金融、水文、生理信号里用得最多的方法之一。做法很直接:把序列切成等长的窗口,在每个窗口里算"累积离差的极差 R"除以"标准差 S",然后看 R/S 怎么随窗口长度增长——R/S ∝ n^H。双对数纸上量斜率就得到 H。现在把 H 拖到 0.50,也就是纯粹的白噪声,一点记忆都没有。R/S 给出的答案是 0.5672,DFA 给出 0.4922。真值是 0.50。R/S 在一份完全没有长记忆的数据上,报出了长记忆。这不是随机误差——把序列长度和重复条数都拖满,R/S 仍然稳定在 0.55 附近(0.5543),它是一个系统性的偏差。原因在 Anis 和 Lloyd 1976 年就算清楚了:R/S 的期望在有限样本下本来就不等于 n^0.5,要修正必须减去一个和 n 有关的项,而绝大多数论文里的"R/S 分析"没做这个修正。把 H 拖到两端再看,偏差的方向也很清楚。H = 0.20 时 R/S 给 0.3379(偏高),H = 0.95 时给 0.8426(偏低)——R/S 总是把结果往 0.5~0.7 这个区间里拉。DFA 对应给出 0.2167 和 0.9205,误差小得多。DFA 的做法是先累加、再在每个窗口里减掉一条拟合的直线、然后看残差的均方根怎么随窗口长度增长,"先去趋势"这一步正是它更稳的原因:真实数据里那些缓慢的漂移不会被误算成长记忆。把重复条数拖到 1、序列长度拖到 2⁸ 再看:两个估计都开始乱跳(0.5400 / 0.4178)。这是第三条纪律:短序列上估出来的 H,误差可以轻松到 ±0.1,而学术论文里常见的"H = 0.63,说明存在长记忆"通常没有给误差棒。
LAB 03

多重分形谱

同一条序列在不同矩阶下给出不同维数,画出 f(α) 那条拱形曲线

问题
湍流的能量耗散、降雨的空间分布、股票的成交量——这些量极不均匀:少数地方占了绝大部分。一个维数描述不了它们,需要一整条谱。
模型
配分函数给出 τ(q),勒让德变换给出 f(α)。
Σb μb(ε)q ∝ ετ(q),  α = dτ/dq,  f(α) = qα − τ(q)
μb 是第 b 个盒子里的测度占比。α 是局部奇异强度(α 小 = 这里特别密),f(α) 是"奇异强度恰为 α 的点集"的维数。单分形时谱塌成一个点。
实测的 α 范围—
理论的 α 范围—
谱宽 Δα:实测 / 理论—
f(α) 的峰值(应当等于支撑集维数 1)—
下面那张图是一个"乘法级联":把一根长度为 1 的区间对半分,左边分到 70% 的量、右边分到 30%;再对每一半重复同样的事,分 14 级。结果是一个极不均匀的测度——少数几个格子占了大部分的量,绝大多数格子几乎是空的。这种结构在真实世界里到处都是:湍流的能量耗散、降雨的空间分布、股价的成交量、互联网流量。问题是:这样一个东西,只用一个维数描述不了。上面那张拱形曲线 f(α) 就是它的"维数谱":α 是局部的奇异强度(α 小 = 这里特别密),f(α) 是"奇异强度恰好是 α 的那些点"构成的集合的维数。默认参数下实测 α 落在 0.524~1.728,理论值是 −log₂0.7 = 0.515 到 −log₂0.3 = 1.737,谱宽 1.204 对理论 1.222,峰值 1.000。峰值等于 1 是一个必须过的自检:所有点合起来还是那根线段,维数当然是 1。把左边的份额拖回 0.50:谱宽塌成 0.000,拱形缩成一个点。分得完全均匀,就只有一个维数——那才叫单分形。份额拖到 0.90,谱宽张到 3.170。份额越偏,系统越"多重"。现在是这一页真正想说的话。勾上"把所有格子彻底打乱"。数值一个都没变,只是位置被随机重排——谱宽从 1.204 掉到 0.965,但没有塌掉。这正是 Kantelhardt 等人提出的"打乱代理"检验:多重分形性有两个来源,一个是层级相关,一个是数值本身分布太宽。打乱只杀死前者。掉的那部分(1.204 → 0.965)是相关性贡献的,剩下的 0.965 是"值的分布很宽"贡献的,和分形一点关系都没有。很多"我们发现某数据具有多重分形性"的结论,没做这个对照,因此说明不了任何结构上的事。(再看最后一个滑杆:把 q 只推到 3,实测谱宽只有 1.004;推到 10 才逼近理论的 1.222。高阶矩由极少数最大的格子决定,所以 q 推得越高,估计越依赖那几个点、方差越大。实践中 |q| 一般不超过 5。)
LAB 04

长记忆与伪趋势

H>0.5 的随机序列看上去满是趋势,其实一个趋势都没有

问题
一条曲线明显在涨,回归给出 t = 7.5、p < 0.001。可这份数据的真实趋势是 0。问题不在数据,在于所有标准检验都假设残差独立——而长记忆数据不满足这个假设。
模型
OLS 趋势检验的 t 统计量,在残差相关时分母被严重低估。
t = β̂ ⁄ SE(β̂),  SE 假设残差独立;  长记忆下有效样本量 neff ≪ n
正确做法:先估 H 再修正自由度,或用块自助法造零分布。最省事也最有效的是像这一台一样——在"确定没有趋势"的合成数据上跑几十次,看自己的检验有多容易喊狼来了。
这一条拟合出来的斜率—
这一条的 t 值—
这一条的 R²—
重复里有多少次"显著"—
上面这条曲线在涨。最小二乘给出的斜率是 0.00523,t 值 7.53,R² = 0.18。按教科书的标准,这是一个在 0.1% 水平上高度显著的上升趋势,可以写进报告的第一句话。而这份数据的真实趋势是 0。一丝一毫都没有。它只是一段 H = 0.8 的平稳长记忆序列——平稳意味着它没有趋势、会回到均值、长期均值不随时间变。下面那张直方图是把同样的事重复 60 次的 t 值分布。60 次里有 40 次落在 ±1.96 之外,也就是 66.7% 的"显著"率。名义上这个比例应该是 5%。把 H 拖回 0.50 再看:4/60,6.7%——回到正常。把 H 拖到 0.90:46/60,76.7%。这就是长记忆最危险的地方:它不产生趋势,但它产生看起来像趋势的东西,而且能骗过为独立数据设计的所有检验。OLS 的 t 检验假设残差独立;长记忆下有效样本量远小于 n,标准误被严重低估,于是 t 值被严重高估。把"数据是哪一种"切成随机游走:55/60,91.7%。这是 Granger 和 Newbold 1974 年"伪回归"那篇论文的核心,也是现代计量经济学先做单位根检验再做回归的原因。这一页想给的实操建议有三条:一,看到一条"明显在涨"的曲线,先问它是不是平稳的;二,长记忆数据上做趋势检验,要么先估 H 再修正自由度,要么用块自助法(block bootstrap)造零分布,不能直接读 OLS 给的 p 值;三,最省事也最有效的一招是画一张这样的直方图——用同样的方法在"确定没有趋势"的合成数据上跑上几十次,看你的检验有多容易喊狼来了。(顺带回答一个常见的疑问:加长序列并不能解决问题。把长度拖到 512,显著率是 68.3%,几乎没变——因为随着 n 变大,有效样本量的增长比 n 慢得多。)

这一页想说的

粗糙度是可以量的,而且只用一个数:Hurst 指数 H,它同时是相邻步的相关性(ρ = 2^(2H−1) − 1)、是尺度律的指数、也是分形维数(D = 2 − H)。但这一页有一半在讲量它的困难:R/S 在白噪声上稳定报出 0.55,短序列上的 H 误差轻松到 ±0.1,多重分形谱不做打乱对照就说明不了结构,而长记忆序列上的趋势检验有三分之二的概率喊狼来了。这些都不是随机误差,而是方法本身的系统性偏差,它们的共同根源只有一句话:为独立数据设计的统计量,在有记忆的数据上会骗人。

接着看

← 返回模块 ← 返回探索专题