# Scaled correlation

(Redirected from Scaled Correlation)

In statistics, scaled correlation is a form of a coefficient of correlation applicable to data that have a temporal component such as time series. If the signals have multiple components (slow and fast), scaled coefficient of correlation can be computed only for the fast components of the signals, ignoring the contributions of the slow components.[1] This filtering-like operation has the advantages of not having to make assumptions about the sinusoidal nature of the signals.

For example, in the studies of brain signals researchers are often interested in the high-frequency components (beta and gamma range; 25–80 Hz), and may not be interested in lower frequency ranges (alpha, theta, etc.). In that case scaled correlation can be computed only for frequencies higher than 25 Hz by choosing the scale of the analysis, s, to correspond to the period of that frequency (e.g., s = 40 ms for 25 Hz oscillation).

## Definition

Scaled correlation between two signals is defined as the average correlation computed across short segments of those signals. First, it is necessary to determine the number of segments $K$ that can fit into the total length of the signals $T$ for a given scale $s$:

$K = \operatorname{round}\left(\frac{T}{s}\right).$

Next, if $r_k$ is Pearson's coefficient of correlation for segment $k$, the scaled correlation across the entire signals $\bar{r}_s$ is computed as

$\bar{r}_s = \frac{1}{K} \sum\limits_{k=1}^K r_k.$

## Efficiency

In a detailed analysis, Nikolić et al.[1] showed that the degree to which the contributions of the slow components will be attenuated depends on three factors, the choice of the scale, the amplitude ratios between the slow and the fast component, and the differences in their oscillation frequencies. The larger the differences in oscillation frequencies, the more efficiently will the contributions of the slow components be removed from the computed correlation coefficient. Similarly, the smaller the power of slow components relative to the fast components, the better will scaled correlation perform.

## Application to cross-correlation

Example of a cross-correlogram between spike trains computed in a classical manner (left) and by using scaled correlation (right; $s$ = 200 ms). Scaled correlation removes the slow component from the cross-correlogram.

Scaled correlation can be applied to auto- and cross-correlation in order to investigate how correlations of high-frequency components change at different temporal delays. To compute cross-scaled-correlation for every time shift properly, it is necessary to segment the signals anew after each time shift. In other words, signals are always shifted before the segmentation is applied. Scaled correlation has been subsequently used to investigate synchronization hubs in the visual cortex [2]

Scaled correlation should be in many cases preferred over signal filtering based on spectral methods. The advantage of scaled correlation is that it does not make assumptions about the spectral properties of the signal (e.g., sinusoidal shapes of signals). Nikolić et al.[1] have shown that the use of Wiener–Khinchin theorem to remove slow components is inferior to results obtained by scaled correlation. These advantages become obvious especially when the signals are non-periodic or when they consist of discrete events such as the time stamps at which neuronal action potentials have been detected.

## Matlab code

Assume that we have two signals a and b with length(a) = length(b) = s*K. In Matlab, scaled correlation can be computed as follows:

   % segment the two data vectors
Y = reshape(a, s, K);
X = reshape(b, s, K);

% demean
onesMat =  ones(s,K);
X       =  X - onesMat*diag(mean(X));
Y       =  Y - onesMat*diag(mean(Y));

% compute variances and co-variances for all segments
varX = mean(X .^ 2);
varY = mean(Y .^ 2);
cov  = mean(X .* Y);

% compute correlations coefficients for all segments
corrSegments = cov ./ sqrt(varX .* varY);

% remove not-a-number correlations
corrSegments(isnan(corrSegments)) = [];

% average all correlation coefficients to obtain scaled correlation
scaledCorr = mean(corrSegments)