什么是白噪声?如何判断时间序列是白噪声?

2025-10-07 17:07:51
什么是白噪声 { e 0 , e 1 , . . . , e t , . . . } \{e_0, e_1, ..., e_t, ...\} {e0​,e1​,...,et​,...}是白噪声的三个条件: E ( e t ) = 0 E(e_t)=0 E(et​)=0 V a r ( e t ) =...

什么是白噪声

{

e

0

,

e

1

,

.

.

.

,

e

t

,

.

.

.

}

\{e_0, e_1, ..., e_t, ...\}

{e0​,e1​,...,et​,...}是白噪声的三个条件:

E

(

e

t

)

=

0

E(e_t)=0

E(et​)=0

V

a

r

(

e

t

)

=

σ

2

Var(e_t)=\sigma^2

Var(et​)=σ2当

k

0

k\neq0

k̸​=0时,

C

o

v

(

e

t

,

e

t

+

k

)

=

0

Cov(e_t, e_{t+k})=0

Cov(et​,et+k​)=0

按照上述定义,白噪声是一种特殊的弱平稳过程,通常时间序列分析到白噪声这一层就没什么好分析的了。

为什么我们希望白噪声是高斯白噪声?

其实,我们希望的白噪声序列

{

e

0

,

e

1

,

.

.

.

,

e

t

,

.

.

.

}

\{e_0, e_1, ..., e_t, ...\}

{e0​,e1​,...,et​,...},是相互独立的(这时

{

e

t

}

\{e_t\}

{et​}序列是严平稳的)。但是独立性是很难验证出来的,我们只能验证相关性。

{

e

i

,

e

j

}

\{e_i, e_j\}

{ei​,ej​}不相关并不意味着

e

i

e_i

ei​和

e

j

e_j

ej​的生成是独立的。见这里的不相关却不独立的例子。

然而,当

{

e

t

}

\{e_t\}

{et​}序列是高斯的,且

{

e

i

,

e

j

}

\{e_i, e_j\}

{ei​,ej​}间是不相关的,则意味着

{

e

i

,

e

j

}

\{e_i, e_j\}

{ei​,ej​}是独立的。着就是我们为什么喜欢高斯白噪声的原因。也就是,要生成高斯白噪声,序列需要从高斯分布中随机采样(不能按照某种规律采样)。

如何判断序列是否为白噪声

step1: 时序图验证期望和方差

step2: 验证相关性

画自相关图(acf)假设检验方法

德宾-瓦特逊检验 DW统计量只使用于检验一阶自相关性,所以目前不常用 # d=4: 存在负相关关系

# d=2: 基本没有自相关关系

# d=0: 存在正相关关系

d = sm.stats.durbin_watson(data)

Box-Ljung test/Q检验(目前最常用)BG检验 利用bartlett定理

实现

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import statsmodels.api as sm

# 生成白噪声

white_noise=np.random.standard_normal(size=500)

fig = plt.figure(figsize=(12, 10))

ax0 = fig.add_subplot(311)

plt.plot(white_noise)

# acf & pacf

ax1 = fig.add_subplot(312)

# dta.values生成二维数组,每一个元素是一个特征数组

# dta.values将二维数组弄成一维数组

# 滞后0-40阶的自相关函数的值画到子图ax1上

fig = sm.graphics.tsa.plot_acf(white_noise, lags=40, ax=ax1)

ax2 = fig.add_subplot(313)

fig = sm.graphics.tsa.plot_pacf(white_noise, lags=40, ax=ax2)

# Q检验

# 方法四: Q检验

r, q, p = sm.tsa.acf(white_noise, qstat=True)

data = np.c_[range(1, 41), r[1:], q, p]

table = pd.DataFrame(data, columns=['lag', 'AC', 'Q', 'Prob(>Q)'])

# Prob(>Q)即P值大部分都小于0.05,所以残差不是白噪声

print(table.set_index('lag'))

结果:

# 所有p值均大于0.05,接受原假设,无自相关

AC Q Prob(>Q)

lag

1.0 -0.053581 1.444106 0.229476

2.0 -0.035057 2.063523 0.356379

3.0 0.019875 2.263020 0.519642

4.0 -0.090659 6.422228 0.169757

5.0 -0.033935 7.006166 0.220182

6.0 0.039397 7.794804 0.253525

7.0 -0.022411 8.050520 0.328160

8.0 0.003968 8.058555 0.427771

9.0 -0.003797 8.065924 0.527517

10.0 0.012976 8.152174 0.613976

11.0 -0.036736 8.844892 0.636207

12.0 -0.039704 9.655727 0.646135

13.0 0.063198 11.714204 0.551207

14.0 -0.008406 11.750700 0.626316

15.0 0.038352 12.511923 0.639940

16.0 -0.054281 14.039908 0.595741

17.0 0.036416 14.729058 0.614990

18.0 0.016817 14.876331 0.670441

19.0 0.009264 14.921114 0.727598

20.0 0.012574 15.003787 0.776191

21.0 0.036801 15.713474 0.785528

22.0 0.096809 20.634780 0.543397

23.0 -0.007945 20.667993 0.601355

24.0 0.026049 21.025813 0.637202

25.0 0.012579 21.109430 0.686492

26.0 -0.006985 21.135263 0.734949

27.0 -0.000977 21.135769 0.779888

28.0 -0.038148 21.909656 0.785457

29.0 -0.026059 22.271533 0.808775

30.0 0.001191 22.272290 0.843957

31.0 -0.048612 23.536971 0.828974

32.0 0.051610 24.965517 0.807423

33.0 0.015994 25.103009 0.836132

34.0 -0.072480 27.932592 0.758828

35.0 0.052761 29.435216 0.733409

36.0 -0.008378 29.473186 0.770772

37.0 0.020629 29.703893 0.797410

38.0 0.004526 29.715024 0.829389

39.0 0.026392 30.094271 0.846185

40.0 -0.030071 30.587678 0.858200