1.一维布朗运动
一维布朗运动是指一个粒子(也可以是分子或颗粒)在一维空间中随机运动的现象。它是由英国生物学家罗伯特·布朗于1827年观察到的,被称为布朗运动。
在一维布朗运动中,粒子在时间的推动下,沿着一条直线上的不同方向进行随机运动,其路径呈现出无规律的波动。这是由于粒子与周围分子的碰撞和动能转移引起的。
一维布朗运动经常用于描述微观尺度下物质的扩散现象,例如液体或气体中微小颗粒的运动。它是一个随机过程,无法精确地预测粒子的位置,但可以通过统计方法描述其平均行为。以一维标准布朗运动B ( t ) B(t)B(t)为例,它满足:
- 独立增量:设时间t 1 < t 2 < t 3 t_1<t_2<t_3t1<t2<t3,那么增量B ( t 3 ) − B ( t 2 ) B(t_3)-B(t_2)B(t3)−B(t2)独立于B ( t 1 ) B(t_1)B(t1)。
- 稳定增量和正态性:设时间t 1 < t 2 t_1<t_2t1<t2,那么增量B ( t 2 ) − B ( t 1 ) B(t_2)-B(t_1)B(t2)−B(t1)服从均值为0,方差为t 2 − t 1 t_2-t_1t2−t1的正态分布。
- B ( t ) B(t)B(t)几乎处处连续。
- B ( 0 ) = 0 B(0)=0B(0)=0.
对于一个一维布朗运动,对其取一阶差分X ( n ) = B ( n + 1 ) − B ( n ) X(n)=B(n+1)-B(n)X(n)=B(n+1)−B(n),可以发现X ( n ) X(n)X(n)实际上是一串独立的标准正态分布,其自相关函数为
- {\sigma ^2}R(k)=σ2E{[X(n+k)−μ][X(n)−μ]}其中,μ \muμ是它们公共 的均值,σ \sigmaσ是它们公共的方差。
一维布朗运动差分后的序列的自相关函数是一个在0点处为1,其他地方为0的函数,而其他的平稳时间序列的自相关函数,在0点处一定是1,在0以外的其他地方未必是0,但也一定是一个[-1,1]之间的数。
2.分布式布朗运动
分布式布朗运动是一种在分布式计算环境中模拟布朗运动的方法。它结合了布朗运动的随机性和分布式计算的特点,用于研究分布式系统中各个节点的行为。它与布朗运动的不同点在于它的增量不再独立,而是具有某种相关性,对于一个布朗运动B H ( t ) B_H(t)BH(t),有
如果令t = s t=st=s,则E [ B H ( t ) 2 ] = t 2 H E[B_H(t)^2]=t^{2H}E[BH(t)2]=t2H,所以分布式布朗运动的方差就是t 2 H t^{2H}t2H。其中,H被称为赫斯特指数,以英国水文学家哈罗德⋅ \cdot⋅赫斯特命名。利用赫斯特指数可以分析时间序列的自相关和自相似性。
- 当H=1/2时,分布式布朗运动会退化成普通的布朗运动,增量间是相互独立的。
- 当H>1/2时,增量间会呈现正相关性,从而导致扩散速度显著高于布朗运动。
- 当H<1/2时,增量间会呈现负相关性,从而导致扩散速度显著慢于布朗运动。
仔细分析股票价格的走势可以发现,股票每天的价格波动很多时候具有很强的相关性。比如当股票大涨时,通常是正相关的,当股票下跌时,通常是负相关的。所以判断赫斯特指数对于分析股票市场的相关性具有重要意义。估计赫斯特指数的方法有很多,本文采用均平方位移法。
假定有一个时间序列,
将l o g k logklogk看成一个变量,l o g σ 2 log\sigma^2logσ2看成常数项,那么上式就是一个线性方程,2H就是斜率,可以通过线性回归来估算H的值。
下面用python来实现均平方位移法估计赫斯特参数。
import numpy as np def Hst_estimate(ts): kmax = int(np.floor(len(ts)/2)) if kmax < 2: return -1 y = np.matrix(np.zeros((kmax, 1))) x = np.matrix(np.ones((kmax, 2))) ts = np.array(ts) for k in range(kmax): y[k] = np.log(np.mean((ts[k+1:]-ts[:-k-1])**2)) x[k, 1] = 2 * np.log(k+1) beta = np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y) H = beta[1] return H
下面给定不同的时间序列,来计算赫斯特参数的值:
ts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(Hst_estimate(ts))
计算结果:[[1.]]
ts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,10,9] print(Hst_estimate(ts))
计算结果:[[0.97359599]]
ts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,10,9,8,7,6,7,8,9,10] print(Hst_estimate(ts))
计算结果:[[0.69830922]]
通过比较可以发现,当时间序列出现递减后,赫斯特指数也会出现下降,当然,实际的股票市场不可能会一直递增的,而是一直波动的,所以其赫斯特指数正常情况下应该不会很大,那么H大于多少算大呢?这个就得考虑概率分布问题了,具体如何考虑感兴趣的读者可自行研究。