public double calculateObservedDisagreement() {
ensureDistanceFunction();
double result = 0.0;
for (ICodingAnnotationItem item : study.getItems()) {
Map<Object, Integer> annotationsPerCategory
= CodingAnnotationStudy.countTotalAnnotationsPerCategory(item);
for (Entry<Object, Integer> category1 : annotationsPerCategory.entrySet())
for (Entry<Object, Integer> category2 : annotationsPerCategory.entrySet()) {
if (category1.getValue() == null)
continue;
if (category2.getValue() == null)
continue;
result += category1.getValue() * category2.getValue()
* distanceFunction.measureDistance(study,
category1.getKey(), category2.getKey());
}
}
result /= (double) (study.getItemCount() * study.getRaterCount()
* (study.getRaterCount() - 1));
return result;
}