肯德尔在Python中的一致性系数(W)

时间:2018-02-20 20:28:57

标签: python r function statistics

我正在尝试根据我的数据计算Kendall一致性系数(W)。是否有人知道在Python包中实现的函数,如R(http://cc.oulu.fi/~jarioksa/softhelp/vegan/html/kendall.global.html)的“素食”包,包括排列测试?

Kendall的W并不难计算,但我找不到允许将其与排列测试相结合的Python函数。

2 个答案:

答案 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'。我注意到因为我正在使用此代码并将值设置为一个。