 NCL Home > Documentation > Functions > General applied math, Statistics

# spcorr

Computes Spearman rank order correlation (Rho) correlation coefficient.

## Prototype

```	function spcorr (
x  : numeric,
y  : numeric
)

return_val  :  float or double
```

## Arguments

x

An array of any numeric type or size. The rightmost dimension is the dimension to be used.

y

An array of any numeric type and same size as x. The rightmost dimension is the dimension to be used.

## Return value

The return value will have the same dimensions as all but the rightmost dimension of x and y. The return will be a double if x or y are double, and float otherwise.

## Description

Computes Spearman rank-order correlation. This function should not be used if there are many ranked 'ties'. The formula used does not apply to this situation.

The Spearman rank-order correlation is less sensitive than the Pearson correlation to strong outliers that are in the tails of both samples. That is because Spearman's Rho limits the outlier to the value of its rank.

Missing values will be removed from the input x and/or y prior to doing the calculation. [Available in version 6.1.0 and later.]

Use spcorr_n if the dimension to do the calculation on is not the rightmost dimension and reordering is not desired. This function can be significantly faster than spcorr.

## Examples

```  x   = (/ 86, 97, 99, 100, 101, 103, 106, 110, 112, 113/)
y   = (/  0, 20, 28,  27,  50,  29,   7,  17,   6,  12/)

spc = spcorr( x, y)       ; spc = -0.175758
p   = rtest( spc, N, 0)   ; p   =  0.6271883
```

Example 2

```  x = (/4,10,3,1, 9,2,6,7,8,5/)
y = (/5, 8,6,2,10,3,9,4,7,1/)

spc = spcorr( x, y)       ; spc = 0.684848
```

Example 3

```  x = (/122, 66, 79, 94, 43, 64, 30, 91,110, 76, 61,104, 67, 30, 92/)
y = (/107, 32, 61,111, 48, 72, 34, 76,119, 90, 90, 59, 64, 46, 90/)

spc = spcorr( x, y)       ; spc = 0.68125
```

Example 4 - missing values

In versions 6.1.0 and later, any missing values will be removed from the input arrays before the calculation is done. If all indexes of one or both arrays are missing, then the return value will be missing.

```  x = (/122, 66, 79, 94, -999, 64, 30, 91,110, 76, 61, 104, 67, 30, 92/)
y = (/107, 32, 61,111,   48, 72, 34, 76,119, 90, 90,-888, 64, 46, 90/)
x@_FillValue = -999
y@_FillValue = -888

spc = spcorr( x, y )       ; spc = 0.7513736
```

In versions 6.0.0 and earlier, you can use ind as a simple work-around for 1D arrays.

```  x = (/122, 66, 79, 94, -999, 64, 30, 91,110, 76, 61, 104, 67, 30, 92/)
y = (/107, 32, 61,111,   48, 72, 34, 76,119, 90, 90,-888, 64, 46, 90/)
x@_FillValue = -999
y@_FillValue = -888

i   = ind( .not.(ismissing(x) .or. ismissing(y)) )
spc = spcorr( x(i), y(i))       ; spc = 0.7513736
```