在代理时间序列 (Schreiber, Schmitz)论文中,作者声称可以通过对序列进行傅里叶变换,将随机相位乘以系数,然后再进行变换来生成二阶平稳时间序列的代理。此过程应保留自相关函数。我正在尝试使用 numpy 在 python 中实现这一点。
import numpy
import pandas
import matplotlib.pyplot as plt
numpy.random.seed(0)
ts = numpy.random.normal(0, 1, 1000)
pandas.tools.plotting.autocorrelation_plot(ts)
plt.ylim([-0.1,0.1])
plt.title('Autocorrelation function of random time series')
上述程序的尝试:
ts_fourier = numpy.fft.fft(ts)
ts_fourier_new = [x*numpy.exp(numpy.random.uniform(0,2*numpy.pi)*1.0j) for x in ts_fourier]
new_ts = numpy.fft.ifft(ts_fourier_new)
pandas.tools.plotting.autocorrelation_plot(new_ts)
plt.ylim([-0.1,0.1])
plt.title('Autocorrelation function of surrogate time series')
可以看出,代理的自相关函数与原始时间序列不同。我的实施中有什么错误?

