Climate network (changes)

Showing changes from revision #7 to #8:
Added | ~~Removed~~ | ~~Chan~~ged

A climate network is a undirected graph whose nodes represent points in a spatial grid, and where the edge weight (link strength) between nodes i and j is calculated from the historical weather record at the two points. For example it could be based on the cross-correlation of temperature histories at i and j. In weighted graph formulations, the cross-correlation may supply the raw data for the edge weight. In unweighted graph formulations, a binary decision rule, based on the cross-correlations between the histories at i and j, may be used to specify whether i and j are “connected” or not.

The graph structure of the network is a function of time.

Climate networks have found important applications to the detection and forecasting of El Niño events. See:

- Project - Using climate networks for El Niño signal processing. This is part of the Azimuth Code Project.

There are many ways in which a “link strength” could be defined. First we will set up some notation. Given a time $t$, we can define a map which takes $t$ to a vector of times no later then $t$. For example, if the units of time are days, a “previous year” map $Y(t)$ can be defined like:

$Y(t) = (t-364,\dots t-1, t).$

The covariance of two vectors $x$ and $y$ of the same length $n$ is defined in the usual way:

$\cov(x,y) = \operatorname{E}{\big[(x - \operatorname{E}[x])(y - \operatorname{E}[y])\big]} = \frac{1}{n}\sum_i \big( x_i - \frac{1}{n}\sum_j x_j \big) \big(y_i - \frac{1}{n}\sum_j y_j \big)$

From this, the correlation can be defined as

$\cor(x,y) = \frac{\cov(x,y)}{\cov(x,x)^{1/2} \; \cov(y,y)^{1/2}}.$

Finally, if $f(t)$ is a function of time, such as the temperature, we extend $f$ to a map between vectors in the obvious way:

$f((x_1, \dots, x_n)) = (f(x_1), \dots, f(x_n))$

The following definitions are derived from:

- K. Yamasaki, A. Gozolchiani, and S. Havlin, Climate Networks around the Globe are Significantly Effected by El Niño, June 2013.

Firstly, $T_i(t)$ is the temperature on day $t$ at point $i$. For a time lag of $\tau$ days, $0 \leq \tau \leq 200$ they define time-lagged cross-covariances

$C^{(t)}_{i,j}(-\tau) = cov( T_i(Y(t)), \; T_j(Y(t-\tau)) )$

and

$C^{(t)}_{i,j}(\tau) = cov( T_i(Y(t-\tau)), \; T_j(Y(t)) )$

and then divide these by the corresponding standard deviations to obtain cross-correlations.

$c^{(t)}_{i,j}(-\tau) = \frac{C^{(t)}_{i,j}(-\tau)}{C^{(t)}_{i,i}(0)^{1/2} \; C^{(t-\tau)}_{j,j}(0)^{1/2}}.$

and a similar expression for $c^{(t)}_{i,j}(\tau)$.

The description of $S_{ij}(t)$ is changed in the correction to the paper. It is confusing, but I hope the following is correct: They determine, (by taking expectations over $\tau$) for each point in time $t$, and for any pair of points $i,j$, the maximum, the mean, and the standard deviation of $| c^{(t)}_{i,j}(\tau) |$ around the mean and define the link strength $S_{ij}(t)$ as the difference between the maximum and the mean value, divided by the standard deviation.

The time dependent average link strength $S(t)$ is obtained by averaging over $S_{ij}(t)$ where $i$ is in the “El Niño basin” and $j$ is in an area of the Pacific outside the basin.

It is observed that $S(t)$ decreases during El Niño events. The prediction of El Niño events is done by choosing a threshold, and predicting an El Niño event when $S(t)$ rises above the threshold.

The link strength defined above by Yamasaki *et al* has some surprising behaviour.~~ The~~ See~~ following~~~~ graphs~~~~ are~~~~ all~~~~ based~~~~ on~~~~ simulated~~~~ data.~~~~ There~~~~ are~~~~ two~~~~ time~~~~ series~~~~ of~~~~ length~~~~ 565,~~~~ called~~~~ “signal~~~~ 1”~~~~ and~~~~ “signal~~~~ 2”~~~~ in~~~~ the~~~~ graphs,~~~~ which~~~~ consist~~~~ of~~~~ quadratics~~~~$q_1$~~Experiments with varieties of link strength for El Niño prediction~~ ~~ .~~ and~~~~$q_2$~~~~ plus independent gaussian noise. The noise has the same amplitude (standard deviation) in all cases, but ~~~~$q_1$~~~~ and ~~~~$q_2$~~~~ are multiplied by 1000 (leftmost column), 9 (second column), 3 (third column) and 1 (fourth column).~~

Examples of the signals themselves are shown in the top two rows, the value of $c^{(t)}_{i,j}(\tau)$ is in the third row, and the fourth row shows an estimated density of the link strength derived from 100 replicates (different samplings of noise).

In the first column, the $q_1$ and $q_2$ overwhelm the guassian noise, so you can see their shapes. In particular, note that have positive correlation for all delays: it varies between about 0.87 and 0.97. The other three columns are intended to be more realistic signals which roughly resemble climate data. One would expect that as the multiplier for $q_1$ and $q_2$ decreases, the link strength would also decrease, but the opposite is the case.

The code is below.

```
signal1 <- function(period) {
x <- period / length(period)
x + (x-.5)^2
}
signal2 <- function(period) {
x <- period / length(period)
x - (x-.5)^2
}
period <- 1:566
tau.max <- 200
tau.range <- -tau.max :tau.max
cperiod <- 365
make.Csamples <- function(nreps, scale) {
LSs <- rep(0, nreps)
C <- rep(0, length(tau.range))
for (r in 1:nreps) {
t1 <- scale * signal1(period) + rnorm(length(period))
t2 <- scale * signal2(period) + rnorm(length(period))
for (tau in tau.range) {
if (tau <= 0) {
x <- t1[1:cperiod]
y <- t2[(-tau+1):(-tau+cperiod)]
} else {
x <- t1[(tau+1):(tau+cperiod)]
y <- t2[1:cperiod]
}
C[tau.max+1+tau] <- abs(cor(x,y))
}
LSs[r] <- (max(C)-mean(C))/ sd(C)
}
qauntiles <- quantile(LSs, probs=c(.05,.25,.5,.75,.95))
list(C=C, LSs=LSs, t1=t1, t2=t2, qauntiles = round(qauntiles, digits=2))
}
op <- par(mfcol=c(4,4), mar=c(4,5,1,1))
for (s in 1:4) {
scaling <- c(1000,9,3,1)[s]
dsmps <- make.Csamples(100,scaling)
maintxt <- paste0("signal scaled by ", scaling)
plot(period, dsmps$t1, type='l', ylab="signal 1", xlab="days")
plot(period, dsmps$t2, type='l', ylab="signal 2", xlab="days")
plot(tau.range, dsmps$C, type='l', ylab="C(tau)", xlab="tau")
dens <- density(dsmps$LSs)
plot(dens$x, dens$y, type='l', xlab="signal strength", ylab="density")
}
par(op)
```

category: climate