Python中的评级机构间协议(Cohen和Kappa)
我有3个评分员对60个案例的评分。这些是按文档组织的列表-第一个元素指第一个文档的评级,第二个文档的评级,依此类推: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
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()))