Kendall tau rank correlation coefficient

In statistics, the Kendall rank correlation coefficient, commonly referred to as Kendall's tau (τ) coefficient, is a statistic used to measure the association between two measured quantities. A tau test is a non-parametric hypothesis test which uses the coefficient to test for statistical dependence.

Specifically, it is a measure of rank correlation: that is, the similarity of the orderings of the data when ranked by each of the quantities. It is named after Maurice Kendall, who developed it in 1938, though Gustav Fechner had proposed a similar measure in the context of time series in 1897.

Definition
Let (x1, y1), (x2, y2), …, (xn, yn) be a set of joint observations from two random variables X and Y respectively, such that all the values of (xi) and (yi) are unique. Any pair of observations (xi, yi) and (xj, yj) are said to be concordant if the ranks for both elements agree: that is, if both xi > xj and yi > yj or if both xi < xj and yi < yj. They are said to be discordant, if xi > xj and yi < yj or if xi < xj and yi > yj. If xi = xj or yi = yj, the pair is neither concordant nor discordant.

The Kendall τ coefficient is defined as:


 * $$\tau = \frac{(\text{number of concordant pairs}) - (\text{number of discordant pairs})}{\frac{1}{2} n (n-1) } .$$

Properties
The denominator is the total number of pairs, so the coefficient must be in the range −1 ≤ τ ≤ 1.
 * If the agreement between the two rankings is perfect (i.e., the two rankings are the same) the coefficient has value 1.
 * If the disagreement between the two rankings is perfect (i.e., one ranking is the reverse of the other) the coefficient has value −1.
 * If X and Y are independent, then we would expect the coefficient to be approximately zero.

Hypothesis test
The Kendall rank coefficient is often used as a test statistic in a statistical hypothesis test to establish whether two variables may be regarded as statistically dependent. This test is non-parametric, as it does not rely on any assumptions on the distributions of X or Y.

Under a null hypothesis of X and Y being independent, the sampling distribution of τ will have an expected value of zero. The precise distribution cannot be characterized in terms of common distributions, but may be calculated exactly for small samples; for larger samples, it is common to use an approximation to the normal distribution, with mean zero and variance
 * $$\frac{2(2n+5)}{9n (n-1)}$$.

Accounting for ties
A pair {(xi, yi), (xj, yj)} is said to be tied if xi = xj or yi = yj; a tied pair is neither concordant nor discordant. When tied pairs arise in the data, the coefficient may be modified in a number of ways to keep it in the range [-1, 1]:

Tau-a
Tau-a statistic tests the strength of association of the cross tabulations. Both variables have to be ordinal. Tau-a will not make any adjustment for ties.

Tau-b
Tau-b statistic, unlike tau-a, makes adjustments for ties and is suitable for square tables. Values of tau-b range from −1 (100% negative association, or perfect inversion) to +1 (100% positive association, or perfect agreement). A value of zero indicates the absence of association.

The Kendall tau-b coefficient is defined as:


 * $$\tau_B = \frac{n_c-n_d}{\sqrt{(n_0-n_1)(n_0-n_2)}}$$

where


 * $$\begin{array}{ccl}

n_0 & = & n(n-1)/2\\ n_1 & = & \sum_i t_i (t_i-1)/2 \\ n_2 & = & \sum_j u_j (u_j-1)/2 \\ t_i & = & \mbox{Number of tied values in the } i^{th} \mbox{ group of ties for the first quantity} \\ u_j & = & \mbox{Number of tied values in the } j^{th} \mbox{ group of ties for the second quantity} \end{array} $$

Tau-c
Tau-c differs from tau-b as in being more suitable for rectangular tables than for square tables.

Significance tests
When two quantities are statistically independent, the distribution of $$\tau$$ is not easily characterizable in terms of known distributions. However, for $$\tau_A$$ the following statistic, $$z_A$$, is approximately characterized by a standard normal distribution when the quantities are statistically independent:


 * $$z_A = {3 (n_c - n_d) \over \sqrt{n(n-1)(2n+5)/2} }$$

Thus, if you want to test whether two quantities are statistically dependent, compute $$z_A$$, and find the cumulative probability for a standard normal distribution at $$-|z_A|$$. For a 2-tailed test, multiply that number by two and this gives you the p-value. If the p-value is below your acceptance level (typically 5%), you can reject the null hypothesis that the quantities are statistically independent and accept the hypothesis that they are dependent.

Numerous adjustments should be added to $$z_A$$ when accounting for ties. The following statistic, $$z_B$$, provides an approximation coinciding with the $$\tau_B$$ distribution and is again approximately characterized by a standard normal distribution when the quantities are statistically independent:


 * $$z_B = {n_c - n_d \over \sqrt{ v } }$$

where
 * $$\begin{array}{ccl}

v & = & (v_0 - v_t - v_u)/18 + v_1 + v_2 \\ v_0 & = & n (n-1) (2n+5) \\ v_t & = & \sum_i t_i (t_i-1) (2 t_i+5)\\ v_u & = & \sum_j u_j (u_j-1)(2 u_j+5) \\ v_1 & = & \sum_i t_i (t_i-1) \sum_j u_j (u_j-1) / (2n(n-1)) \\ v_2 & = & \sum_i t_i (t_i-1) (t_i-2) \sum_j u_j (u_j-1) (u_j-2) / (9 n (n-1) (n-2)) \end{array} $$

Algorithms
The direct computation of the numerator $$n_c - n_d$$, involves two nested iterations, as characterized by the following pseudo-code: numer := 0 for i:=1..N do for j:=1..(i-1) do        numer := numer + sgn(x[i] - x[j]) * sgn(y[i] - y[j]) return numer

Although quick to implement, this algorithm is $$O(n^2)$$ in complexity and becomes very slow on large samples. A more sophisticated algorithm built upon the Merge Sort algorithm can be used to compute the numerator in $$O(n \cdot \log{n})$$ time.

Begin by ordering your data points sorting by the first quantity, $$x$$, and secondarily (among ties in $$x$$) by the second quantity, $$y$$. With this initial ordering, $$y$$ is not sorted, and the core of the algorithm consists of computing how many steps a Bubble Sort would take to sort this initial $$y$$. An enhanced Merge Sort algorithm, with $$O(n \log n)$$ complexity, can be applied to compute the number of swaps, $$S(y)$$, that would be required by a Bubble Sort to sort $$y_i$$. Then the numerator for $$\tau$$ is computed as:


 * $$n_c-n_d = n_0 - n_1 - n_2 + n_3 - 2 S(y)$$,

where $$n_3$$ is computed like $$n_1$$ and $$n_2$$, but with respect to the joint ties in $$x$$ and $$y$$.

A Merge Sort partitions the data to be sorted, $$y$$ into two roughly equal halves, $$y_{left}$$ and $$y_{right}$$, then sorts each half recursive, and then merges the two sorted halves into a fully sorted vector. The number of Bubble Sort swaps is equal to:


 * $$S(y) = S(y_{left}) + S(y_{right}) + M(Y_{left},Y_{right})$$

where $$Y_{left}$$ and $$Y_{right}$$ are the sorted versions of $$y_{left}$$ and $$y_{right}$$, and $$M(\cdot,\cdot)$$ characterizes the Bubble Sort swap-equivalent for a merge operation. $$M(\cdot,\cdot)$$ is computed as depicted in the following pseudo-code:

function M(L[1..n], R[1..m]) n := n + m    i := 1 j := 1 nSwaps := 0 while i + j <= n do if i > m or R[j] < L[i] then nSwaps := nSwaps + m - (i-1) j := j + 1 else i := i + 1 return nSwaps

A side effect of the above steps is that you end up with both a sorted version of $$x$$ and a sorted version of $$y$$. With these, the factors $$t_i$$ and $$u_j$$ used to compute $$\tau_B$$ are easily obtained in a single linear-time pass through the sorted arrays.

A second algorithm with $$O(n \cdot \log{n})$$ time complexity, based on AVL trees, was devised by David Christensen.