Почему выходные данные функции Spearmanr меняются, когда входное представление изменяется без изменения порядка? - PullRequest
0 голосов
/ 05 мая 2020

Следующий код вычисляет ранговую корреляцию Спирмена между двумя упорядоченными списками:

from scipy.stats import spearmanr
a1 = [0, 1, 2, 3, 4]
b1 = [0, 1, 3, 2, 5]
print(spearmanr(a1,b1).correlation) # the result is 0.9

, и результат равен 0,9. Но когда я представляю векторы без изменения порядка, корреляция меняется на 0,5:

a2 = ['ESR1', 'TBC1D9', 'SCUBE2', 'EVL', 'NAT2']
b2 = ['ESR1', 'TBC1D9', 'EVL', 'SCUBE2', 'CIRBP']
print(spearmanr(a2,b2).correlation) # the result is 0.5

Интересно, почему результат меняется даже при том же порядке.

1 Ответ

1 голос
/ 05 мая 2020

Коэффициент ранговой корреляции Спирмена основан на ранжировании входных данных. Предполагается, что входные переменные являются порядковыми, то есть имеют естественный порядок. Если вы передаете строки, этот порядок - это алфавитный порядок строки. Порядок различается для двух ваших версий данных:

In [16]: a1 = [0, 1, 2, 3, 4]

In [17]: b1 = [0, 1, 3, 2, 5]

In [18]: a2 = ['ESR1', 'TBC1D9', 'SCUBE2', 'EVL', 'NAT2']

In [19]: b2 = ['ESR1', 'TBC1D9', 'EVL', 'SCUBE2', 'CIRBP']

In [20]: from scipy.stats import rankdata

In [21]: rankdata(a1)
Out[21]: array([1., 2., 3., 4., 5.])

In [22]: rankdata(b1)
Out[22]: array([1., 2., 4., 3., 5.])

In [23]: rankdata(a2)
Out[23]: array([1., 5., 4., 2., 3.])

In [24]: rankdata(b2)
Out[24]: array([2., 5., 3., 4., 1.])
...