我正在制作Python代码,用于查找大于20的样本的mann-whitney u stat。
在此过程中,如果样本排名存在关联,则排名的标准差公式如下:
我特别遇到了求和部分的问题。
这里,“t_i是共享排名i的主题数,k是(不同)排名的数量。”
我有以下排名:
ranks = [ 7. 8. 12. 11. 9. 10. 1. 3. 4.5 2. 6. 4.5]
现在,我编写了以下函数来计算等式的西格玛部分:
sigma = 0
for i in range(1, np.amax(ranks)):
num = ranks.count(i)**3 - ranks.count(i)
denom = (n1+n2)*((n1+n2)-1)
sigma += num/denom
然而,这是不对的,因为当我从i求k到k时,我正在看整数。我不考虑十进制值的等级,例如4.5。
我该如何解决这个问题?
答案 0 :(得分:1)
看起来最初你试图遍历范围[1, max(ranks)]
中的所有整数,这不是总和正在做的事情。总和将迭代排名中的每个唯一元素,并聚合该元素的某个转换。
这是一种更直接的方法。而不是处理索引我迭代元素本身。 t i 将是rank
的唯一元素集合的第i个元素。每个元素都将被考虑在内。如果它们是整数也无关紧要:
for ti in set(ranks):
num = ranks.count(ti)**3 - ranks.count(ti)
denom = (n1+n2)*((n1+n2)-1)
sigma += num/denom