1

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np
from pandas.plotting import autocorrelation_plot

y = np.sin(np.arange(1,6*3.14,0.1))
autocorrelation_plot(y)
plt.show()

这是自相关图的输出:

y 的自相关图

我想找出一种方法来自动分类函数是否是周期性的(不使用裸眼查看自相关图)。我读到它与附图中显示的线的置信区间有关,但仍然怀疑我应该如何处理它以更好地做出决定。那么有没有一种自动化的方法来使用自相关来决定数据的周期性?

不过,这是我对自动化方式的尝试:

result = np.correlate(y, y, mode = "full")
ACF = result[np.round(result.size/2).astype(int):]
ACF = ACF/ACF[0]
acceptedVar = []
for i in range(len(ACF)):
    if ACF[i] > 0.05:
        acceptedVar = np.append(acceptedVar, ACF[i])

percent = len(acceptedVar)/len(ACF) * 100

我刚刚设定了 0.05 的阈值来检测置信区间为 95% 的点。不知道这在统计上和逻辑上是对还是错。然后,我查看百分比是否大于 95% 的周期性模式。我也不确定。

归功于:如何使用 numpy.correlate 进行自相关 的第一个答案?

4

1 回答 1

0

首先,例如,ax = autocorrelation_plot(y)您可以ax.lines[5].get_data()[1]直接使用 pandas 自相关函数中的值。

这可能是一个有点幼稚的解决方案,但是假设您只是在寻找第一个、最重要的周期性,您可以抓住图中最高峰的第一个索引:

first_max = np.argmax(autocorr) + 1

这为您提供了自相关最高的滞后 = 感兴趣的时期(以数据的采样间隔为单位。)

假设您想要下一个最重要的时期:

second_max = np.argmax(autocorr[first_max:]) + first_max + 1

等等等等...

注意:如果您的数据不像您的自相关图中看起来那样有规律和周期性,那么这将无法正常工作。

于 2021-10-12T18:24:06.660 回答