Main Content

Significance Testing for Periodic Component

This example shows how to assess the significance of a sinusoidal component in white noise using Fisher's g-statistic. Fisher's g-statistic is the ratio of the largest periodogram value to the sum of all the periodogram values over 1/2 of the frequency interval, (0, Fs/2). A detailed description of the g-statistic and exact distribution can be found in the references.

Create a signal consisting of a 100 Hz sine wave in white Gaussian noise with zero mean and variance 1. The amplitude of the sine wave is 0.25. The sample rate is 1 kHz. Set the random number generator to the default settings for reproducible results.

rng("default")

Fs = 1e3;
t = 0:1/Fs:1-1/Fs;
x = 0.25*cos(2*pi*100*t) + randn(size(t));

Obtain the periodogram of the signal using periodogram. Exclude 0 and the Nyquist frequency (Fs/2). Plot the periodogram.

[Pxx,F] = periodogram(x,rectwin(length(x)),length(x),Fs);
Pxx = Pxx(2:length(x)/2);

periodogram(x,rectwin(length(x)),length(x),Fs)

Figure contains an axes object. The axes object with title Periodogram Power Spectral Density Estimate, xlabel Frequency (Hz), ylabel Power/frequency (dB/Hz) contains an object of type line.

Find the maximum value of the periodogram. Fisher's g-statistic is the ratio of the maximum periodogram value to the sum of all periodogram values.

[maxval,index] = max(Pxx);
fisher_g = Pxx(index)/sum(Pxx)
fisher_g = 
0.0381

The maximum periodogram value occurs at 100 Hz, which you can verify by finding the frequency corresponding to the index of the maximum periodogram value.

F = F(2:end-1);
F(index)
ans = 
100

Use the distributional results detailed in the references to determine the significance level, pval, of Fisher's g-statistic. The following MATLAB® code implements equation (6) of [2]. Use the logarithm of the gamma function to avoid overflows when computing binomial coefficients.

N = length(Pxx);
nn = 1:floor(1/fisher_g);

I = (-1).^(nn-1).*exp(gammaln(N+1)-gammaln(nn+1)-gammaln(N-nn+1)) ...
    .*(1-nn*fisher_g).^(N-1);

pval = sum(I)
pval = 
2.0163e-06

The p-value is less than 0.00001, which indicates a significant periodic component at 100 Hz. The interpretation of Fisher's g-statistic is complicated by the presence of other periodicities. See [1] for a modification when multiple periodicities may be present.

References

[1] Percival, Donald B. and Andrew T. Walden. Spectral Analysis for Physical Applications. Cambridge, UK: Cambridge University Press, 1993.

[2] Wichert, Sofia, Konstantinos Fokianos, and Korbinian Strimmer. "Identifying Periodically Expressed Transcripts in Microarray Time Series Data." Bioinformatics. Vol. 20, 2004, pp. 5-20.

See Also

|