我想找到滞后1,2,... N的一系列数字的自相关
在此示例中,我有56个数字,N = 20。
所以我有一个前56列为随机数的文件。 从第57列到第77列,我具有滞后1,2 ... 20的自相关。 假设我仅加载第1-56列。在此示例中,我只有一行,但也可以是几行。
因此,目标是获得以下结果:
我现在是在excel中完成的,但是如何在Python中做到这一点呢?还有:如果我有几行怎么办?如何在多行上做到这一点?
我找到了这段代码,我认为这是一个好的开始。
import numpy
def acf(series):
n = len(series)
data = numpy.asarray(series)
mean = numpy.mean(data)
c0 = numpy.sum((data - mean) ** 2) / float(n)
def r(h):
acf_lag = ((data[:n - h] - mean) * (data[h:] - mean)).sum() / float(n) /
c0
return round(acf_lag, 3)
x = numpy.arange(n) # Avoiding lag 0 calculation
acf_coeffs = map(r, x)
return acf_coeffs
第一个函数中的数字是'n';在我的示例中是“ 56”,变量“ data”只是前56列。 c0是自相关公式的分母。
现在,我看到h是滞后次数。因此,在我的示例1至20中。 acf_lag是自相关的实际公式,因此看起来还不错。
我苦苦挣扎的事情是:如何在将其应用于数据框的地方编写代码行,以便得到想要的结果?
感谢每位帮助!
更新:
我试图不定义函数“ acf”,而是将其全部声明为单独的变量:
n = len(df.columns)-20
data = df.iloc[:,:56]
mean = data.mean(axis=1)
c0 = np.sum((data - mean) ** 2) / float(n)
也许我以后可以定义r(h)函数。但是c0每56列给我一个零,而它应该从每列(1到56)中提取平均值。这没有发生。