Корреляция ранга Spearman в Scipy и ручном расчете - несоответствие в результатахPython

Программы на Python
Anonymous
Корреляция ранга Spearman в Scipy и ручном расчете - несоответствие в результатах

Сообщение Anonymous »

Я пытаюсь вычислить коэффициент корреляции ранга Спирмена между двумя рангированными списками с использованием scipy.stats.spearmanr и вручную с использованием формулы: < /p>


Однако я получаю значительно разные результаты.
У меня есть два списка, представляющие 10 топ -10 аналогичных пользователей, идентифицированных с использованием двух разных методов: < /p>
Метод 1 Рейтинги: < /p>
Идентификатор пользователя: [301, 597, 414, 477, 57, 369, 206, 535, 590, 418] < /p>
Ранг: [1, 2, 3, 4, 5, 7, 7, 8 , 9, 10] < /p>
Метод 2 Рейтинги: < /p>
Идентификатор пользователя: [301, 477, 19, 120, 75, 57, 597, 160 , 577, 369] < /p>
Ранг: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10] < /p>
Затем я применил корреляцию ранга Спирмена, используя scipy.stats.spearmanr: < /p>
from scipy.stats import spearmanr

method1 = [301, 597, 414, 477, 57, 369, 206, 535, 590, 418]
method2 = [301, 477, 19, 120, 75, 57, 597, 160, 577, 369]

coef, _ = spearmanr(method1, method2)
print(f"Spearman coefficient: {coef}")

Spearman coefficient: 0.2727
< /code>
Ручной расчет:
Чтобы проверить, я вычислил ρ вручную, используя общих пользователей между обоими списками. < /p>



идентификатор пользователя < /th>
Rank (метод 1) < /th>
Rank (метод 2) < /th>
(d_i = r_1 - r_2) < /th>
(d_i^ 2) < /th>
< /tr>
< /thead>


301 < /td>
1 < /td>
1 < /td>
0 < /td>
0 < /td>
< /tr>

597 < /td>
2 < /td>
7 < /td>
-5 < /td>
25 < /td>
< /tr>

477 < /td> 4 < /td>
2 < /td>
2 < /td>
4 < /td>
< /tr>

57 < /td>
5 < /td>
6 < /td>
-1 < /td>
1 < /td>
< /tr>

369 < /td>
6 < /td>
10 < /td>
-4 < /td>
16 < /td> < br/>


У нас есть только 5 общих пользователей, n = 5. Использование коэффициента формулы I Получила коэффициент Spearman (𝜌) = -1,3
, которая находится вне диапазона для коэффициента Спирмена
[
-
1
,
1
]
Однако scipy.stats.spearmanr () дает 0,2727, что находится в пределах диапазона, но значительно отличается. < /p>
Почему мое ручное руководство. Расчет неверный? Я делаю ошибку в том, как я справляюсь с отсутствующими пользователями или рейтингом? Оценивает ли это только общие элементы, или он учитывает все элементы? p>
Заранее спасибо! < /p>

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-results

Вернуться в «Python»