[Scipy-tickets] [SciPy] #1823: kendalltau does not return -1 for reversed list.

SciPy Trac scipy-tickets@scipy....
Fri Jan 25 15:08:01 CST 2013

```#1823: kendalltau does not return -1 for reversed list.
--------------------+-------------------------------------------------------
Reporter:  jdean   |       Owner:  somebody
Type:  defect  |      Status:  new
Priority:  normal  |   Milestone:  Unscheduled
Component:  Other   |     Version:  0.11.0
Keywords:          |
--------------------+-------------------------------------------------------
I'm getting an unexpected result from stats.kendalltau.  I expect to
get a correlation of -1 for reversed lists, and sometimes I don't.

Setup:
- I copied the kendalltau algorithm out of scipy.stats.stats.py, and
created scipy_kendalltau.
- This was a fresh source distribution 2013/01/25.

- Add to the beginning of this new file:
import numpy as np
from math import erfc   # NOTE: This may be an issue

# Start an ipython session.
# Import the scipy kendalltau
In [3]: from scipy_kendalltau import kendalltau
# Import another version of kendall's tau
In [4]: from compare_lists import kendalls_tau

In [5]: a = [1,3,5,2,4,6]
In [6]: arev = [6,4,2,5,3,1]

# Behaves as expected for a reversed list, in both versions.
In [7]: kendalltau(a, arev)
Out[7]: (-1.0, 0.004832241997291933)

In [8]: kendalls_tau(a, arev)
Out[8]: -1.0

# Now try a longer list.
In [9]: x = [5, 32, 78, 48, 79, 110, 57, 17, 45, 24, 35, 22, 83, 25, 64,
80, 53, 3, 20, 23, 33\
, 54, 65, 26, 109, 4, 7, 105, 55, 8, 1, 21, 46, 82, 95, 15, 2, 52, 104,
97, 85, 66, 86, 34, 10\
1, 88, 61, 106, 9, 81, 13, 10, 91, 72, 99, 102, 43, 27, 74, 89, 6, 96,
107, 70, 38, 36, 56, 10\
8, 16, 93, 67, 18, 90, 49, 92, 68, 98, 19, 39, 73, 40, 12, 103, 50, 75,
47, 11, 0, 28, 44, 58,\
30, 94, 59, 41, 37, 62, 69, 14, 60, 76, 100, 29, 51, 84, 77, 63, 42, 87,
31, 71]

In [10]: xrev = x[:]
In [11]: xrev.reverse()

# The other version works as expected: -1 correlation for a reversed list.
In [12]: kendalls_tau(x, xrev)
Out[12]: -1.0

# Oops run that again.
In [13]: kendalls_tau(x, xrev)
Out[13]: -1.0

# But the scipy version gives an unexpected answer in this case.
# - expected: -1 as the first return value
# - got: -0.067649...
In [14]: kendalltau(x, xrev)
Out[14]: (-0.067649467649467651, 0.2925775144715035)

Thank you,
- Jim