def wilcoxontest(ranks_a, ranks_b, expects): """ Return wilcoxon p values of ranks_a and ranks_b @arg ranks_a a list() of ranks(dataset(){'label', 'score'}) @arg ranks_b a list() of ranks(dataset(){'label', 'score'}) @arg expects a list() of testitems(dataset(){'label', ...}) @return p-value of two tailed wilcoxon teset """ rak_x = list() rak_y = list() for i in range(expects.size()): for j in range(ranks_a[i].size()): if ranks_a[i]['label'][j] == expects['label'][i]: rak_x.append(j) break for j in range(ranks_b[i].size()): if ranks_b[i]['label'][j] == expects['label'][i]: rak_y.append(j) break sval, pval = lwilcoxont(rak_x, rak_y) #sval, pval = wilcoxon(rak_x, rak_y) return pval
sign = [rank[i]/abs(rank[i]) for i in range(len(rank))] val = rank[0] st = 0 normrank = list() for i in range(1, len(rank)): if abs(rank[i]) == val: cumrank += float(i + 1) else: normrank.extend([sign[j] * cumrank/(i-st) for j in range(st, i)]) st = i val = abs(rank[i]) cumrank = float(i + 1) normrank.extend([sign[j] * cumrank/(len(rank)-st) for j in range(st, len(rank))]) print normrank wpos, wnag = 0.0, 0.0 wpos = sum(filter(lambda x: x>0, normrank)) wnag = - sum(filter(lambda x: x<0, normrank)) return len(rate_a), min(wpos, wnag) if __name__ == '__main__': print lwilcoxont([125, 115, 130, 140, 140, 115, 140, 125, 140, 135], [110, 122, 125, 120, 140, 124, 123, 137, 135, 145])
if len(rank) == 0: return 0.0 cumrank = 1.0 sign = [rank[i] / abs(rank[i]) for i in range(len(rank))] val = rank[0] st = 0 normrank = list() for i in range(1, len(rank)): if abs(rank[i]) == val: cumrank += float(i + 1) else: normrank.extend( [sign[j] * cumrank / (i - st) for j in range(st, i)]) st = i val = abs(rank[i]) cumrank = float(i + 1) normrank.extend( [sign[j] * cumrank / (len(rank) - st) for j in range(st, len(rank))]) print normrank wpos, wnag = 0.0, 0.0 wpos = sum(filter(lambda x: x > 0, normrank)) wnag = -sum(filter(lambda x: x < 0, normrank)) return len(rate_a), min(wpos, wnag) if __name__ == '__main__': print lwilcoxont([125, 115, 130, 140, 140, 115, 140, 125, 140, 135], [110, 122, 125, 120, 140, 124, 123, 137, 135, 145])