- Notifications
You must be signed in to change notification settings - Fork 46.7k
/
Copy pathspearman_rank_correlation_coefficient.py
82 lines (58 loc) · 2.1 KB
/
spearman_rank_correlation_coefficient.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
fromcollections.abcimportSequence
defassign_ranks(data: Sequence[float]) ->list[int]:
"""
Assigns ranks to elements in the array.
:param data: List of floats.
:return: List of ints representing the ranks.
Example:
>>> assign_ranks([3.2, 1.5, 4.0, 2.7, 5.1])
[3, 1, 4, 2, 5]
>>> assign_ranks([10.5, 8.1, 12.4, 9.3, 11.0])
[3, 1, 5, 2, 4]
"""
ranked_data=sorted((value, index) forindex, valueinenumerate(data))
ranks= [0] *len(data)
forposition, (_, index) inenumerate(ranked_data):
ranks[index] =position+1
returnranks
defcalculate_spearman_rank_correlation(
variable_1: Sequence[float], variable_2: Sequence[float]
) ->float:
"""
Calculates Spearman's rank correlation coefficient.
:param variable_1: List of floats representing the first variable.
:param variable_2: List of floats representing the second variable.
:return: Spearman's rank correlation coefficient.
Example Usage:
>>> x = [1, 2, 3, 4, 5]
>>> y = [5, 4, 3, 2, 1]
>>> calculate_spearman_rank_correlation(x, y)
-1.0
>>> x = [1, 2, 3, 4, 5]
>>> y = [2, 4, 6, 8, 10]
>>> calculate_spearman_rank_correlation(x, y)
1.0
>>> x = [1, 2, 3, 4, 5]
>>> y = [5, 1, 2, 9, 5]
>>> calculate_spearman_rank_correlation(x, y)
0.6
"""
n=len(variable_1)
rank_var1=assign_ranks(variable_1)
rank_var2=assign_ranks(variable_2)
# Calculate differences of ranks
d= [rx-ryforrx, ryinzip(rank_var1, rank_var2)]
# Calculate the sum of squared differences
d_squared=sum(di**2fordiind)
# Calculate the Spearman's rank correlation coefficient
rho=1- (6*d_squared) / (n* (n**2-1))
returnrho
if__name__=="__main__":
importdoctest
doctest.testmod()
# Example usage:
print(
f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [2, 4, 6, 8, 10]) =}"
)
print(f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) =}")
print(f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 1, 2, 9, 5]) =}")