1. Введение

  • ваши данные представляют собой много наблюдений одного и того же полученные разным способом
    • несколько докторов ставит диагноз нескольким пациентам
    • несколько информантов оценили род в некотором списке слов
    • несколько информантов оценили приемлимость высказываний на школе от 1 до 5
    • разметчики независимо разметили какие-то явления на одном и том же материале
  • Насколько суждения разных оценщиков (raters) относительно субъектов оценки (subjects) согласуются между собой?

1.1 Данные: зиловский эксперимент

В зиловском диалекте андийского языка существует два класса для неодушевленных предметов. В 2017 году был проведен эксперимент, чтобы проверить, наличие вариативности в отнесению к тому или иному классу заимствованой и исконной лексики.

zilo_classes <- read.csv("https://goo.gl/MPquvV")
head(zilo_classes)

Переменные в датасете:

  • stimulus
  • translation_ru
  • stimulus_source — тип слова: исконное или заимствованное
  • s_1, s_2 … — ответы испытуемых

1.2 Данные: переводы 57 сонета У. Шекспира

В данном датасете я собрал информацию о количестве слогов в переводах 57 сонета У. Шекспира и в самом сонете.

sonet <- read.csv("https://goo.gl/cqPDkq")
head(sonet)
  • line — номер строки
  • остальные переменные — количество слогов в переводах

1.3 Данные: исследование маргинальных русских глаголов

Данные взяты из исследования [Endresen, Janda 2015], посвященное исследованию маргинальных глаголов изменения состояния в русском языке. Испытуемые (70 школьников, 51 взрослый) оценивали по шкале Ликерта (1…5) приемлемость глаголов с приставками о- и у-:

  • широко используемуе в СРЛЯ (освежить, уточнить)
  • встретившие всего несколько раз в корпусе (оржавить, увкуснить)
  • искусственные слова (ономить, укампить)
marginal_verbs <- read.csv("https://goo.gl/Pq1S8V")
head(marginal_verbs)

Переменные в датасете:

  • Stimulus
  • WordType — тип слова: частотное, редкое, искусственное
  • Prefix
  • Остальные переменные — ответы испытуемых

2. Процент полного согласия

Процент полного согласия — это процент случаев, когда все оценщики идентичны в своих суждениях.

#install.packages("irr") установите пакет!
library("irr")
agree(zilo_classes[,-c(1:3)])
##  Percentage agreement (Tolerance=0)
## 
##  Subjects = 106 
##    Raters = 16 
##   %-agree = 74.5
round(74.5*106/100) # количество случаев полного согласия
## [1] 79
agree(sonet[,-1])
##  Percentage agreement (Tolerance=0)
## 
##  Subjects = 14 
##    Raters = 14 
##   %-agree = 0

Эту меру иногда ошибочно приводят как меру согласия оценщиков, однако она не учитывает возможность случайного совпадения / расхождения суждений.

(1) Посчитайте процент полного согласия в данных о маргинальных глаголах.
(2) Посчитайте количество случаев полного согласия в данных о маргинальных глаголах.

3. Каппа Коэна

Каппа Коэна мера согласованности между двумя категориальными переменными. Обычно говорят о двух оценщиках, которые распеделяют \(n\) наблюдений по \(s\) категориям.

\(\kappa = \frac{p_o-p_e}{1-p_e},\)

где \(p_o\) — доля полного согласия, а \(p_e\) — вероятность случайного согласия.

Для случая \(s\) = 2, можно нарисовать следующую таблицу сопряженности:

\(s_1\) \(s_2\)
\(s_1\) a b
\(s_2\) c d

В таком случае:

  • \(p_o = \frac{a+d}{a+b+c+d}\)
  • \(p_e = \frac{(a+b)\times(a+c) + (d+b)\times(d+c)}{(a+b+c+d)^2}\)

Выберем двух спикиров из наших данных:

zilo_classes_2s <- zilo_classes[,c(4, 14)]
agree(zilo_classes_2s)
##  Percentage agreement (Tolerance=0)
## 
##  Subjects = 106 
##    Raters = 2 
##   %-agree = 92.5
table(zilo_classes_2s)
##    s_4
## s_1  b  r
##   b 54  2
##   r  6 44
p_o <- (47+46)/(47+46+4+9)
p_o
## [1] 0.8773585
p_e <- ((47+9)*(47+4)+(46+9)*(46+4))/(47+9+4+46)^2
p_e
## [1] 0.498932
coehns_kappa <- (p_o - p_e)/(1 - p_e)
coehns_kappa
## [1] 0.7552398
kappa2(zilo_classes_2s)
##  Cohen's Kappa for 2 Raters (Weights: unweighted)
## 
##  Subjects = 106 
##    Raters = 2 
##     Kappa = 0.848 
## 
##         z = 8.76 
##   p-value = 0

Функция kappa2 из пакета irr также приводит p-value, которое высчитывается для нулевой гипотезы, что каппа Коэна равна нулю.

Если вы хотите, чтобы ваши оценщики не оценивались как равноценные, вы можете использовать взвешенную каппу Коэна.

В [Landis, Koch 1977] предложена следующая интерпретация каппы Коэна:

  • κ < 0 poor agreement
  • 0–0.20 slight agreement
  • 0.21–0.40 fair agreement
  • 0.41–0.60 moderate agreement
  • 0.61–0.80 substantial agreement
  • 0.81–1 almost perfect agreement

Каппа Коэна — не единственная мера согласия между двумя оценщиками. Существуют работы, в которых каппу Коэна ругают.

(3) Посчитайте каппу Коэна для спикеров в 4 и 120 столбцах данных про глаголы.
(4) Посчитайте каппу Коэна для переводов А. Велигжанина и М. Чайковского.

4. Ранговые корреляции: тау Кендалл

\[\tau = \frac{C-D}{C+D}\]

data.frame(cor(sonet[, -1], method = "kendall"))

Бывает еще ранговая корреляция Спирмана (cor(..., method = "spearman")).

(5) Какой коэфициент корреляции Кендала между спикерами в 4 и 120 столбцах данных про глаголы.

5. Каппа Фляйса

Обощением каппы Коэна для оценщиков больше двух является каппа Фляйса. \(k\) оценщиков распеделяют \(n\) наблюдений по \(s\) категориям.

\(\kappa = \frac{\bar{P}_o-\bar{P}_e}{1-\bar{P}_e},\)

где \(\bar{P}_o\) — средняя доля пар согласных оценщиков из всех пар, а \(\bar{P}_e\) — вероятность случайного согласия.

zilo_classes[,-c(1:3)]

В нашем датасете \(k\) = 16, \(n\) = 106, \(s\) = 2.

Посчитаем, насколько оценщики согласны относительно третьего слова (3 b, 13 r). Для этого посчитаем долю пар оценщиков, которые согласны, среди всех возможных пар:

kappam.fleiss(zilo_classes[,-c(1:3)])
##  Fleiss' Kappa for m Raters
## 
##  Subjects = 106 
##    Raters = 16 
##     Kappa = 0.849 
## 
##         z = 95.7 
##   p-value = 0
kappam.fleiss(marginal_verbs[,-c(1:3)])
##  Fleiss' Kappa for m Raters
## 
##  Subjects = 59 
##    Raters = 121 
##     Kappa = 0.394 
## 
##         z = 452 
##   p-value = 0

(6) Посчитайте каппу Фляйса для сонетских данных.