numpy.random.normal的滞后自相关不是nul



我正在与numpy的函数random.normal的意外/不需要的行为作斗争。

通过用这个函数生成T元素的向量,我发现在不为0的情况下,这些向量的滞后自相关平均值与0不同。自相关值趋向于-1/(T-1(。

例如,请参阅此简单代码:

import numpy as np
N        = 10000000
T        = 100
invT     = -1./(T-1.)
sd       = 1
av       = 0
mxlag    = 10
X        = np.random.normal(av, sd, size=(N, T))
acf      = X[:,0:mxlag+1]
for i in range(N):
acf[i,:] = [1. if l==0 else np.corrcoef(X[i,l:],X[i,:-l])[0][1] for l in range(mxlag+1)]
acf_mean = np.average(acf, axis=0)
print('mean auto-correlation of random_normal vector of length T=',T,' : ',acf_mean)
print('to be compared with -1/(T-1) = ',invT)

我在这两个版本的Python中都有这种行为:v2.7.9和v3.7.4。此外,在NCL中对此进行编码也会得到同样的结果。

我所指的问题可能看起来很小。然而,当这些向量被用作种子来生成自回归时间序列时,会导致更大的偏差。在使用此函数创建引导统计测试的情况下,这也是有问题的。

有人会对此做出解释吗?我是不是做错了什么?

非常感谢!

实际上这并不是函数的缺点。我的问题来自于样本自相关估计中的偏差。这早在1954年就有记录…

参考资料:Marriott,F.H.C.和J.A.Pope"自相关估计中的偏差"Biometrika 41.3/4(1954(:390-402(https://www.jstor.org/stable/2332719)

最新更新