En el Sustituto de la Serie de Tiempo (Schreiber, Schmitz)del documento, los autores afirman que los sustitutos para un segundo orden de la serie de tiempo estacionaria puede ser generado por tomar la transformada de Fourier de la serie, multiplicando al azar fases de los coeficientes y, a continuación, la transformación de la espalda. Este procedimiento debe preservar la función de autocorrelación. Estoy tratando de implementar esto en python usando numpy.
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')
La tentativa en el mencionado procedimiento:
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')
Como puede verse, la función de autocorrelación de la madre sustituta no es idéntica a la original de la serie de tiempo. ¿Cuál es el error en mi implementación?