Python中的评级机构间协议(Cohen和Kappa)

Python中的评级机构间协议(Cohen和Kappa),python,statistics,rating,Python,Statistics,Rating,我有3个评分员对60个案例的评分。这些是按文档组织的列表-第一个元素指第一个文档的评级,第二个文档的评级,依此类推: rater1 = [-8,-7,8,6,2,-5,...] rater2 = [-3,-5,3,3,2,-2,...] rater3 = [-4,-2,1,0,0,-2,...] 有Cohen的Kappa的python实现吗?我在numpy或scipy中找不到任何东西,在stackoverflow上也找不到任何东西,但也许我错过了?这是一个非常常见的统计数据,所以我很惊讶我在P

我有3个评分员对60个案例的评分。这些是按文档组织的列表-第一个元素指第一个文档的评级,第二个文档的评级,依此类推:

rater1 = [-8,-7,8,6,2,-5,...]
rater2 = [-3,-5,3,3,2,-2,...]
rater3 = [-4,-2,1,0,0,-2,...]

有Cohen的Kappa的python实现吗?我在numpy或scipy中找不到任何东西,在stackoverflow上也找不到任何东西,但也许我错过了?这是一个非常常见的统计数据,所以我很惊讶我在Python这样的语言中找不到它。

我还没有发现它包含在任何主要的libs中,但是如果你在谷歌上搜索,你可以在各种“烹饪书”类型的网站上找到实现。以下是关于和的实现的页面,旧问题可在skll metrics软件包中找到,但供参考

是一个python库,其中包含Cohen的Kappa和其他评分员间协议度量(in)。

是在scikit learn 0.17中引入的:

:

提醒大家{1}:


参考资料:

  • {1} 维埃拉、安东尼·J.和乔安妮·M·加勒特。“理解观察者之间的一致性:kappa统计”,《Fam Med》37,第5期(2005):360-363.:
您也可以使用。下面是一段相同的代码片段

from nltk import agreement
rater1 = [1,1,1]
rater2 = [1,1,0]
rater3 = [0,1,1]

taskdata=[[0,str(i),str(rater1[i])] for i in range(0,len(rater1))]+[[1,str(i),str(rater2[i])] for i in range(0,len(rater2))]+[[2,str(i),str(rater3[i])] for i in range(0,len(rater3))]
ratingtask = agreement.AnnotationTask(data=taskdata)
print("kappa " +str(ratingtask.kappa()))
print("fleiss " + str(ratingtask.multi_kappa()))
print("alpha " +str(ratingtask.alpha()))
print("scotts " + str(ratingtask.pi()))

另请参见其他示例

我同意依赖一些常用的库会很好,但自己实现并不困难。我的直接实现不超过50行代码,它包括对缺失值的处理。因为cohen的kappa度量两个样本集之间的一致性。对于3名评分员,您将得到“1对2”、“2对3”和“1对3”的3个kappa值。这可能不容易理解,Fleiss的Kappa是三个评分员的选择。这里也有注释:但它只处理两个评分员,而问题是关于三个评分员。正如其他人所指出的,Kappa是scikit learn、statsmodel和nltk的一部分。
from nltk import agreement
rater1 = [1,1,1]
rater2 = [1,1,0]
rater3 = [0,1,1]

taskdata=[[0,str(i),str(rater1[i])] for i in range(0,len(rater1))]+[[1,str(i),str(rater2[i])] for i in range(0,len(rater2))]+[[2,str(i),str(rater3[i])] for i in range(0,len(rater3))]
ratingtask = agreement.AnnotationTask(data=taskdata)
print("kappa " +str(ratingtask.kappa()))
print("fleiss " + str(ratingtask.multi_kappa()))
print("alpha " +str(ratingtask.alpha()))
print("scotts " + str(ratingtask.pi()))