Showing changes from revision #7 to #8:
Added | Removed | Changed
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:
There are many ways in which a “link strength” could be defined. First we will set up some notation. Given a time , we can define a map which takes to a vector of times no later then . For example, if the units of time are days, a “previous year” map can be defined like:
The covariance of two vectors and of the same length is defined in the usual way:
From this, the correlation can be defined as
Finally, if is a function of time, such as the temperature, we extend to a map between vectors in the obvious way:
The following definitions are derived from:
Firstly, is the temperature on day at point . For a time lag of days, they define time-lagged cross-covariances
and
and then divide these by the corresponding standard deviations to obtain cross-correlations.
and a similar expression for .
The description of is changed in the correction to the paper. It is confusing, but I hope the following is correct: They determine, (by taking expectations over ) for each point in time , and for any pair of points , the maximum, the mean, and the standard deviation of around the mean and define the link strength as the difference between the maximum and the mean value, divided by the standard deviation.
The time dependent average link strength is obtained by averaging over where is in the “El Niño basin” and is in an area of the Pacific outside the basin.
It is observed that 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 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 quadraticsExperiments with varieties of link strength for El Niño prediction . and plus independent gaussian noise. The noise has the same amplitude (standard deviation) in all cases, but and 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 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 and 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 and 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)