`corr3` documentation

`corr3` computes linear or rank correlation for a time series and a 3D dataset.

See also: `xcorr3` and `corrcoef`.

Back to Climate Data Tools Contents.

## Contents

## Syntax

r = corr3(X,y) r = corr3(...,'detrend') r = corr3(...,'Name',Value) [r,p] = corr3(...)

## Description

`r = corr3(X,y)` returns a matrix of the pairwise linear correlation coefficient between each pair of columns in the input matrix `X`.

`r = corr3(...,'detrend')` removes the linear trends from `X` and `y` before calculating the correlation coefficient.

`r = corr3(...,'Name',Value)` specifies options using one or more name-value pair arguments in addition to the input arguments in the previous syntaxes. For example, `'Type','Kendall'` specifies computing Kendall's tau correlation coefficient.

`[r,p] = corr3(...)` also returns pval, a matrix of p-values for testing the hypothesis of no correlation against the alternative hypothesis of a nonzero correlation.

## Example:

In the 1850s, Admiral Robert FitzRoy of the British Royal Navy decided he'd devote his life to saving the lives of sailors and fishermen at sea. His weapon of choice: the barometer. And so began the study of weather predictions and the relationships between air pressure variations and weather systems.

So how exactly are surface pressure and surface temperature related? We can explore the relationship with `corr3`, using monthly gridded data from 2017:

filename = 'ERA_Interim_2017.nc'; P = ncread(filename,'sp'); % surface pressure T = ncread(filename,'t2m'); % 2 m temperature precip = ncread(filename,'tp'); % total precipitation lat = double(ncread(filename,'latitude')); lon = double(ncread(filename,'longitude'));

First, get a quick lay of the land by plotting the mean surface temperature and surface pressure fields for 2017. Note that we're transposing the grids with the `'` when plotting to make the rows correspond to latitude and columns correspond to longitude:

figure imagescn(lon,lat,mean(T,3)') cmocean thermal hold on caxis([221 311]) % color axis limits in Kelvin contour(lon,lat,mean(P,3)','k') xlabel 'longitude' ylabel 'latitude'

The pattern above shows that mean surface pressure appears to be related primarily to surface elevation, which is a relationship more fully in the documentation for the `air_pressure` function. But right now we don't care about the average temperature or the average pressure. Instead, we want to look at how temporal variability of each variable changes with the other.

Let's do that, but first `recenter` the grids to put the prime meridian in the middle:

[lat,lon,T,P,precip] = recenter(lat,lon,T,P,precip);

Admiral FitzRoy started the Met office, which is in Exeter, England, so let's look at how surface pressure measurements at the Met office correlate with surface temperatures around the world.

First, use `near1` to get the row and column indices of the grid cell closest to Exeter (50.7N,3.5W):

row = near1(lon,-3.5); col = near1(lat,50.7); figure imagescn(lon,lat,mean(T,3)') cmocean thermal hold on plot(lon(row),lat(col),'kp') text(lon(row),lat(col),'Exeter','vert','bot','horiz','center')

Now 1D arrays for temperature and pressure at the grid cell closest to Exeter can be obtained like this:

T_exeter = squeeze(T(row,col,:)); P_exeter = squeeze(P(row,col,:)); precip_exeter = squeeze(precip(row,col,:)); figure subsubplot(3,1,1) plot(1:12,T_exeter,'r') axis tight box off xlim([0.5 12.5]) ylabel 'surface temperature (K)' title 'Exeter, UK' subsubplot(3,1,2) plot(1:12,P_exeter/1000) axis tight box off xlim([0.5 12.5]) ylabel 'surface pressure (kPa)' set(gca,'yaxislocation','right') subsubplot(3,1,3) bar(1:12,precip_exeter*1000) axis tight box off xlim([0.5 12.5]) ylabel 'precipitation (mm)' xlabel 'month of 2017'

First off, how does the surface temperature at Exeter compare to temperature variability around the world?

% Correlation between temperature grid and Exeter temperature: [R,P] = corr3(T,T_exeter); figure imagescn(lon,lat,R') caxis([-1 1]) cmocean balance cb = colorbar; ylabel(cb,'correlation coefficient R') hold on borders('countries','color',rgb('dark gray'),'center',180) stipple(lon,lat,(P<0.01)','markersize',4,'density',150) % regions of significance plot(lon(row),lat(col),'gp') text(lon(row),lat(col),'Exeter','color','g',... 'vert','bot','horiz','center')

Not surprisingly, when Exeter is warm, so is most of the rest of the northern hemisphere, and vice versa. The relationship is less significant near the equator and wherever seasonal variability is low. That's because Exeter's temperature variability in the monthly data from 2017 is dominated by the seasonal cycle.

How is global rainfall related to surface pressure at Exeter?

[R,P] = corr3(precip,P_exeter,'detrend'); figure imagescn(lon,lat,R') caxis([-1 1]) cmocean diff colorbar hold on borders('countries','color',rgb('dark gray'),'center',180) stipple(lon,lat,(P<0.01)','color','k',... 'markersize',4,'density',1000) plot(lon(row),lat(col),'gp') text(lon(row),lat(col),'Exeter','color','g',... 'vert','bot','horiz','center')

The lack of stippling in the figure above indicates that surface pressure at Exeter is not significantly related to precipitation in most places in the world. However, if we zoom in on Europe, we see that when surface pressure at Exeter is low, that's correlated with high precipitation throughout England and France.

axis([-45 45 20 65])

## Displaying R-squared

Sometimes people prefer using R-squared instead of the correlation coefficient R, because R-squared describes the percent of variance in `X` that's explained by the relationship with `y`. But when you calculate R-squared, you'll lose the sign, so be sure to multiply by the sign again like this:

Rsq = R.^2 .* sign(R); figure imagescn(lon,lat,Rsq') caxis([-1 1]) cmocean balance colorbar hold on borders('countries','color',rgb('dark gray'),'center',180) stipple(lon,lat,(P<0.01)','color','k',... 'markersize',4,'density',500) plot(lon(row),lat(col),'gp') text(lon(row),lat(col),'Exeter','color','g',... 'vert','bot','horiz','center') title 'r^2'

## Author Info

This function is part of the Climate Data Toolbox for Matlab. The function and supporting documentation were written by Chad A. Greene of the University of Texas at Austin.