How to work out if there is a cyclic element to data

I have a set of time series. I suspect that some of them tend to mean revert more than others. When I feed the time series through a digital bandpass filter I often find that I can visually deduce a dominant cycle however that doesn't usually last long.
Using my approach of digital bandpass filters I still find it hard to work out if this is mean reversion or not. For example if we consider the null hypothesis that this is just white noise then even feeding white noise through a digital bandpass filter will still produce a cyclic output from the filter.
I have used an Augmented Dickey Fuller test to assess stationary/cointegration however is there a similar test to determine if cyclic components really exist in the time series or am I just seeing noise?
Any thoughts?

Answers (2)

Hi Stewart, Is this data stationary? If so you can use a nonparametric spectral estimator to test the hypothesis that there are line components (oscillations) in the data.

1 Comment

Unfortunately the data is not stationary. Or not with any confidence at least.

Sign in to comment.

As a rough start, you can try correlating the time series with sections of itself. For example:
% User defined inforation
length_rand = 180; % Repeat signal every 180 samples
length_signal = 750; % Entire signal will be 750 samples
noise_amp = 0.3; % Noise is 30% of signal
subset_size = 0.25; % Subset size will be 45% length of entire signal
% Generate synthetic cyclic signal w/ noise and its subset
temp_rand = randn(length_rand,1);
temp_signal = zeros(length_signal,1);
for i = 1 : floor(length_signal/length_rand)
temp_signal(1+(i-1)*length_rand:(i)*length_rand) = temp_rand+noise_amp*randn(length_rand,1);
end
temp_signal(1+i*length_rand:end) = temp_rand(1:length(temp_signal(1+i*length_rand:end)));
true_signal = temp_signal; % Entire signal
temp_signal(subset_size*length_signal:end) = 0; % Subset of entire signal
% Plot info
figure;
subplot(2,1,1);
plot(true_signal,'LineWidth',3); hold on;
plot(temp_signal,'r-'); hold off;
legend('true signal','temp signal');
title('Signal with subset used for correlation');
a = xcorr(temp_signal,true_signal);
xlim([0 length_signal]);
subplot(2,1,2);
plot(a);
title('Result from xcorr');
xlim([0 length_signal]);
This will produce something that looks like this:
The location of the peaks does NOT mark the end/beginning of the cyclic signal. However, the strength and distance between peaks should be similar if there is a cyclic signal.

1 Comment

Many thanks. I will do some assessment on autocorrelation. Unfortunately the frequency of the cycle appears to change quite rapidly.

Sign in to comment.

Categories

Products

Asked:

on 19 Dec 2011

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!