gpt4 book ai didi

python - 非平稳时间序列的自相关

转载 作者:行者123 更新时间:2023-12-01 01:37:47 24 4
gpt4 key购买 nike

我在 python 中实现了一个函数来计算特定滞后 k 的时间序列的自相关。它是在某些时间序列可能不是平稳的假设下实现的。然而我发现对于其中一些我得到的值大于 1,特别是在最后的滞后上。所以我想我一定是计算错误了。

我正在实现以下内容:

                        enter image description here

对于与滞后序列相对应的项,我正在计算从滞后 k 开始的平均值和标准偏差。

我在 python 中实现了以下代码,它计算特定滞后 k 的自相关:

def custom_autocorrelation(x, lag = 12):
n = len(x)
std = x.std()
mu = x.mean()
autocov = 0
mu_lag = x[lag:].mean()
std_lag = x[lag:].std()
for j in range(n-lag):
autocov += (x[j] - mu)*(x[j+lag] - mu_lag)
autocorr = autocov/(std*std_lag*(n-lag))
return autocorr

作为示例,我尝试使用以下序列,对于 k = 12,得到的系数为 1.03:

np.array([20623., 11041.,  5686.,  2167.,  2375.,  2057.,  3141.,   504.,
152., 6562., 8199., 15103., 16632., 7190., 6987., 2652.,
1949., 2223., 1703., 2163., 1850., 6932., 5932., 13124.,
14846., 7850., 4526., 1277., 1036., 1500., 1648., 1384.,
1446., 3477., 6818., 12446., 9734.])

任何帮助将不胜感激!

最佳答案

我认为您只是错误地写下了方程式。以下部分

std = x.std()
mu = x.mean()

与原文不符。看来您需要

std = x[: n - lag].std()
mu = x[: n - lag].mean()

解决这个问题

In [221]: custom_autocorrelation(a, 12)
Out[221]: 0.9569497673729846

我还从 previous answer 中获取了一些想法我的大大加快了计算速度

def modified_acorr(ts, lag):
"""An autocorrelation estimation as per
http://itfeature.com/time-series-analysis-and-forecasting/autocorrelation-time-series-data

Args:
ts (np.ndarray): series
lag (int): the lag

Returns:
float: The autocorrelation
"""
return (
(ts[:ts.size - lag] - ts[:ts.size - lag].mean()) *
(ts[lag:] - ts[lag:].mean())
).ravel().mean() / (ts[lag:].std() * ts[:ts.size - lag].std())

比较常规自相关函数,我们得到类似的答案

In [197]: modified_acorr(a, 12)
Out[197]: 0.9569497673729849

In [218]: acorr(a, a.mean(), 12) / acorr(a, a.mean(), 0) # normalisation
Out[218]: 0.9201920561073853

关于python - 非平稳时间序列的自相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com