Python 时间序列数据的numpy自相关函数

Python 时间序列数据的numpy自相关函数,python,numpy,time-series,correlation,Python,Numpy,Time Series,Correlation,我一直在尝试使用numpy计算自相关函数,如中所定义。我找到的大多数文档都是与和之类的函数相关的。然而,对于给定的随机变量x,这些函数似乎只是计算和 ACF(dt) = sum_{t=0}^T [(x(t)*x(t+dt)] 而不是平均水平 ACF(dt) = mean[x(t)*x(t+dt)] 因此,实际上,为了计算自相关函数,需要做如下操作: acf = np.correlate(x,x,mode='full') acf_half = acf[acf.size / 2:] ldata

我一直在尝试使用numpy计算自相关函数,如中所定义。我找到的大多数文档都是与和之类的函数相关的。然而,对于给定的随机变量x,这些函数似乎只是计算和

ACF(dt) = sum_{t=0}^T [(x(t)*x(t+dt)]
而不是平均水平

ACF(dt) = mean[x(t)*x(t+dt)]
因此,实际上,为了计算自相关函数,需要做如下操作:

acf = np.correlate(x,x,mode='full')
acf_half = acf[acf.size / 2:]
ldata = len(acf)
acf = np.array([x/(ldata-i) for i,x in enumerate(acf_half)])
当然,我们需要从得到的acf中减去平均值(x)**2才能正确


有人能证实这是正确的吗?

一般来说,自相关、相关等是和(积分)。有时它是标准化的,但不是你上面所写的平均值。这是因为它们是根据,简单地说,就是你们写的,上面的和的积分来定义的

stat mech页面上的括号表示热平均值,它是在某一温度下在许多不同状态下多次进行的“实验”的集合或时间平均值。这(有限温度)导致波动,导致问题的“统计”性质,并导致相关性衰减(失去长程顺序)。这仅仅意味着您应该找到多个数据集的自相关性,并将它们平均在一起,但不要取函数的平均值

据我所知,您的代码正试图通过重叠长度来衡量
dt
处的相关性,但我不认为这是正确的

关于
2的减法,这是在自旋模型的情况下,
将是平均自旋(磁化),所以我相信你是正确的,你应该使用
平均值(x)**2


作为旁注,我建议使用
mode='same'
而不是
'full'
,这样关联域与输入域匹配,而不必只查看输出的一半(这里的输出是对称的,所以它实际上没有什么区别)。

我不同意stat-mech位。当然,根据遍历性,我们假设热平均值和时间平均值相等。然而,为了计算后者,必须考虑数据点的数量。这意味着第一个方程必须标准化为ACF(dt)=1./(T-dt)*sum_{T=0}^T[(x(T)*x(T+dt)]。这样我们将考虑到在计算长滞后(大dt)下的自相关时,数据点的数量小于短滞后(小dt)。请检查方程(6.5)液体的计算机模拟(Allen&Tildesley,牛津大学).但你是随着时间的推移而关联的,不是吗?不是平均。我不相信你可以假设遍历性,但我不知道你的系统。有了遍历性,你的想法是,在经过很长时间的平均后,你将探索与在大集合上平均相同的状态,但如果你想在系统随时间变化时将系统与自身进行比较时间,你并不是一段时间内的平均值。但有可能我对你感到非常困惑或误解。不过,我同意用数据点的数量来衡量。(我办公室里有这本书,但以后会看)