Multiple Series
Jointly stationary series xt and yt have cross covariances
h
i
xy (h) = E xt+h x (yt y ) :
The cross spectral density is
fxy (!) =
and
xy (h) =
1
X
h=
Z
1
1=2
1=2
xy (h)e
2i!h
;
fxy (!)e2i!hd!:
1
The cross spectral density is complex:
fxy (!) = cxy (!) iqxy (!);
where cxy (!) and qxy (!) are the co spectrum and quad spectrum,
respectively.
yx(h) = xy ( h) ) fyx(!) = fxy (!) )
cyx(!) = cxy (!)
and
qyx(!) = qxy (!):
2
Squared Coherence
Recall: fxx !j is the variance of the sine and cosine coef
1
2
cients in the representation
xt = dc(0)+2
(n X
1)=2 h
j =1
dc !j cos(2jt=n) + ds !j sin(2jt=n)
Similarly, cxy !j and qxy !j are the co variances of the
1
2
1
2
sine and cosine coecients in the representations of xt and
yt.
3
i
Correlations are usually easier to interpret than covariances:
the squared coherence
j
fyx(!)j2
yx(!) = xy (!) =
fxx(!)fyy (!)
2
2
measures the strength of the relationship between xt and yt
at frequency !.
2yx(!) is also an analog of R2: it measures the fraction of
variance in yt at frequency !, fyy (!), explained by xt.
Note that 2yx(!) = jyx(!)j2, where
f (! )
yx(!) = q yx
fxx(!)fyy (!)
4
Phase Spectrum
Squared coherence is analogous to R2, the squared correlation between two variables.
When we study correlation, in addition to its magnitude, we
need to know its sign: strong correlation may reect either
a positive or a negative relationship.
The sign of the correlation is R=jRj, either +1 or 1.
5
By analogy, in addition to studying
2
j
f
(
!
)
j
yx
= j y x (! )j2 ;
2 (! ) =
y x
we need to consider
fxx(!)fyy (!)
y x (! )
fyx(!)
=
:
jyx(!)j jfyx(!)j
Because fyx(!) is generally complex, fyx(!)=jfyx(!)j is not
limited to 1, but may lie anywhere on the unit circle in the
complex plane.
6
So it may be written as
fyx(!)
=e
jfyx(!)j
iyx(!);
where yx(!) is the phase spectrum.
As dened, the phase spectrum is measured in radians, but
is often converted to cycles for display.
The phase spectrum measures the tendency for uctuations
in yt at frequency ! to be phase-shifted relative to uctuations in xt at the same frequency.
7
Spectral Matrix
For a general p-variate time series:
h
(h) = E xt+h (xt
The spectral matrix is
f (! ) =
and
(h ) =
1
X
h=
Z
1
1=2
1=2
(h )e
i
0
)
2i!h
e2i!hf (!)d!:
8
When p = 2 and
!
xt = xxt;1 ;
t;2
the spectral matrix is just
!
f (!) = ff1;1 ((!!)) ff1;2 ((!!)) :
2;1
2;2
9
Nonparametric Estimation
Generalize the univariate case:
f !j = L
where
m
X
1
k= m
I !j +k ;
L = 2m + 1
is the number of terms in the sum,
or more generally
^f !j =
m
X
k= m
hk I !j +k :
10
Estimated Coherence
If we use the simple average f !j , we get the estimated
squared coherence as
2
fyx(!)
yx(!) = :
fxx(!)fyy (!)
2
If the true coherence is zero,
2yx(!)
(L 1)
F2;2L 2:
2
1 yx(!)
If we use instead ^f !j , a similar result holds approximately.
11
Signicant Coherence
So under the null hypothesis 2yx(!) = 0,
F2;2L 2()
P yx(!) >
=
L 1 + F2;2L 2()
(
)
2
At frequencies where 2yx(!) is below this critical value, we
therefore cannot say that the coherence is signicant.
Frequencies at which 2yx(!) exceeds this value show signicant coherence.
12
Example:
R code to show the squared coherence between the Southern
Oscillation Index and the sheries recruitment series:
par(mfcol = c(2, 1));
s = spectrum(cbind(soi, rec), kernel("daniell", 9),
taper = 0, fast = FALSE);
plot(s, plot.type = "coh", ci.lty = 2);
f = qf(.999, 2, s$df - 2);
abline(h = f / ((s$df - 2) / 2 + f), col = "red");
f = qf(.95, 2, s$df - 2);
abline(h = f / ((s$df - 2) / 2 + f), col = "red", lty = 2);
13
Remove seasonal eects as monthly means, then recalculate:
soiSA
soiSA
recSA
recSA
sSA =
= residuals(lm(soi ~ factor(cycle(soi))));
= ts(soiSA, start = start(soi), frequency = frequency(soi));
= residuals(lm(rec ~ factor(cycle(rec))));
= ts(recSA, start = start(rec), frequency = frequency(rec));
spectrum(cbind(soiSA, recSA), kernel("daniell", 9),
taper = 0, fast = FALSE);
plot(sSA, plot.type = "coh", ci.lty = 2);
f = qf(.999, 2, sSA$df - 2);
abline(h = f / ((sSA$df - 2) / 2 + f), col = "red");
f = qf(.95, 2, sSA$df - 2);
abline(h = f / ((sSA$df - 2) / 2 + f), col = "red", lty = 2);
Estimated phase:
plot(sSA, plot.type = "phase", ci.lty = 2);
14
© Copyright 2026 Paperzz