0

私は Wilcoxon ランクサム テストの拡張を作成しています。これは、このテストの基本関数を最初に作成する必要があるため、この演習では SciPy を使用できないことも意味します。

そこに基本的なスケルトン コードがありますが、同順位のランクを平均化するのに苦労しています。これが私のコードです:

#read in data
m1 = [0,0,0,0,0,2,3,3,3,4,4,5,6,10,10,10,11,12,15,15,15,20,22,25,25,27,30]
w1 = [0,0,0,0,0,0,1,3,3,3,3,7,8,8,19,20,27,30]

#convert to tuples, incl where they came from
m1t = []
for m in m1:
    m1t.append((m, "m1"))
w1t = []
for w in w1:
    w1t.append((w, "w1"))

all1t = m1t + w1t #combine

all1ts = sorted(all1t, key=lambda tup: tup[0]) #sort

all1tsr = [row+(i,) for i,row in enumerate(all1ts,0)] #rank

#revert to back to original grouping
m1r = [i for i in all1tsr if i[1]=="m1"]
w1r = [i for i in all1tsr if i[1]=="w1"]

現在の出力は次のとおりです。

>>> all1tsr[:15]
[(0, 'm1', 0),
 (0, 'm1', 1),
 (0, 'm1', 2),
 (0, 'm1', 3),
 (0, 'm1', 4),
 (0, 'w1', 5),
 (0, 'w1', 6),
 (0, 'w1', 7),
 (0, 'w1', 8),
 (0, 'w1', 9),
 (0, 'w1', 10),
 (1, 'w1', 11),
 (2, 'm1', 12),
 (3, 'm1', 13),
 (3, 'm1', 14)]

eachtuple の要素 1 は並べ替えの値、要素 2 は単なる識別子、要素 3 は要素 1 で並べ替えたときのランクです。要素 1 が「0」の観測値は 10 個あり、現在はすべて昇順のランクが割り当てられていますが、これらのランクを何とか平均化したいです(すべてをランク5に割り当てます)。

言い換えれば、私はこれが欲しい:

[(0, 'm1', 5),
 (0, 'm1', 5),
 (0, 'm1', 5),
 (0, 'm1', 5),
 (0, 'm1', 5),
 (0, 'w1', 5),
 (0, 'w1', 5),
 (0, 'w1', 5),
 (0, 'w1', 5),
 (0, 'w1', 5),
 (0, 'w1', 5),
 (1, 'w1', 11),
 (2, 'm1', 12),
 (3, 'm1', 13.5),
 (3, 'm1', 13.5)]

すべてのフィードバックを歓迎します、ありがとう

4

1 に答える 1