Python调用statsmodels计算非归一化ACF的参数设置方法
Python计算非归一化自相关函数(ACF)的实现方案
statsmodels的acf函数设计上仅返回归一化后的自相关结果,无内置参数切换非归一化模式,可通过以下两种方式实现需求:
- 方案1:使用同库
acovf函数直接计算(推荐,和acf底层逻辑一致,精度高)acovf返回的非归一化自协方差序列就是标准定义下的非归一化ACF,修改后的代码如下:
from statsmodels.tsa.stattools import acovf import numpy as np x = np.loadtxt('MyFile.txt', usecols=6) # biased参数设置为True对应acf默认的有偏估计逻辑,fft参数和原用法一致 # nlag设为len(x)-1即可得到长度为len(x)的0~len(x)-1阶滞后结果 y = acovf(x, fft=True, nlag=len(x)-1) np.savetxt('AutoCorrelationFunction.txt', y)
- 方案2:手动实现(可自定义是否去均值、估计逻辑等)
如果需要适配特殊的非归一化ACF定义(比如不需要去均值),可以用FFT手动实现,示例代码如下:
import numpy as np def unnormalized_acf(x, nlags=None, demean=True): n = len(x) if nlags is None: nlags = n if demean: x = x - x.mean() # 补零到2倍长度避免循环卷积误差 fft_x = np.fft.fft(x, n=2*n) # 频域相乘得到自相关序列 acf_seq = np.fft.ifft(fft_x * np.conj(fft_x)).real return acf_seq[:nlags] # 调用示例 x = np.loadtxt('MyFile.txt', usecols=6) y = unnormalized_acf(x, nlags=len(x), demean=True) np.savetxt('AutoCorrelationFunction.txt', y)
调整demean参数即可控制计算前是否去除序列均值,适配不同的非归一化ACF定义需求。
内容的提问来源于stack exchange,提问作者user239504
相关产品推荐
相关产品推荐

