首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自相关自动检测周期性?

如何使用自相关自动检测周期性?
EN

Stack Overflow用户
提问于 2018-08-01 15:53:21
回答 1查看 765关注 0票数 1

这是我的代码:

代码语言:javascript
复制
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()

这是自相关图的输出:

auto-correlation plot of y

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

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

代码语言:javascript
复制
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%。我对此也不是很确定。

致谢:How can I use numpy.correlate to do autocorrelation? 的第一个答案

EN

回答 1

Stack Overflow用户

发布于 2021-10-12 18:24:07

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

这可能是一个有点天真的解决方案,但是假设你只是在寻找第一个,最重要的周期,你可以只抓取曲线图中最高点的第一个索引:

代码语言:javascript
复制
first_max = np.argmax(autocorr) + 1

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

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

代码语言:javascript
复制
second_max = np.argmax(autocorr[first_max:]) + first_max + 1

诸如此类……

注意:如果你的数据不像自相关图中看起来那样有规律和周期性,那么这就不会很好地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51628094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档