我正在尝试根据我的数据计算Kendall一致性系数(W)。是否有人知道在Python包中实现的函数,如R(http://cc.oulu.fi/~jarioksa/softhelp/vegan/html/kendall.global.html)的“素食”包,包括排列测试?
Kendall的W并不难计算,但我找不到允许将其与排列测试相结合的Python函数。
答案 0 :(得分:2)
我也不知道。但是,您可以通过这种方式在Python中计算排列测试。请注意,我没有在' W'。
的公式中包含对绑定值的更正import numpy as np
def kendall_w(expt_ratings):
if expt_ratings.ndim!=2:
raise 'ratings matrix must be 2-dimensional'
m = expt_ratings.shape[0] #raters
n = expt_ratings.shape[1] # items rated
denom = m**2*(n**3-n)
rating_sums = np.sum(expt_ratings, axis=0)
S = m*np.var(rating_sums)
return 12*S/denom
the_ratings = np.array([[1,2,3,4],[2,1,3,4],[1,3,2,4],[1,3,4,2]])
m = the_ratings.shape[0]
n = the_ratings.shape[1]
W = kendall_w(the_ratings)
count = 0
for trial in range(1000):
perm_trial = []
for _ in range(m):
perm_trial.append(list(np.random.permutation(range(1, 1+n))))
count += 1 if kendall_w(np.array(perm_trial)) > W else 0
print ('Calculated value of W:', W, ' exceeds permutation values in', count, 'out of 1000 cases')
在这种情况下,结果是,
Calculated value of W: 0.575 exceeds permutation values in 55 out of 1000 cases.
您还应注意,由于这些是随机排列,因此报告的值数量会有一些变化。例如,在我做的一项试验中,我认为0.575的计算值仅超过1000个案例中的48个。
答案 1 :(得分:0)
如果有'm'评分者和'n'项,那么不应该在'S'中乘'n'而不是'm'吗?
S = n*np.var(rating_sums)
我相信它没有引起注意,因为你在你的例子中使用了4个raters和4个项目,所以'm = n'。我注意到因为我正在使用此代码并将值设置为一个。