Inter-Rater Reliabilty: Запуск нескольких каппа Коэна одновременно (с использованием R) - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь вычислить значения капы Коэна для нескольких перестановок сегмента учителя. В этом экзамене есть шесть уникальных комбинаций учитель-сегмент. Например ,acher1-segement1 имеет двух разных оценщиков и хотел бы видеть I CC этих двух оценщиков для этого teacher1-segement1 (и всех других перестановок сегмента учителя).

У меня есть такой набор данных.

full.data <- read_table2('Rater teacher segment subject1    subject2    subject3
A   1   1   1   4   1
B   1   1   3   4   3
B   2   2   2   3   2
C   2   2   1   4   1
D   3   1   4   4   4
E   3   1   4   3   4
D   4   2   3   3   3
A   4   2   4   3   4
B   5   2   4   3   4
A   5   2   5   3   5
D   6   1   5   3   5
E   6   1   5   3   5')

Я знаю, что если бы я хотел получить капу Коэна только для одной группы сегментов учителей, я бы преобразовал такие данные, как это,

one.permuation<- read_table2('Rater RaterA-teacher1-segment1    RaterB-teacher1-segment1
subject1    1   3
subject2    4   4
subject3    1   3')

and then run,
library(irr)
print(icc(myRatings, model=“twoway”, type=“consistency”, unit=“average”))

Что дало бы мне просто ОДНА ценность капы для этого конкретного сегмента учителя.

  1. Как я могу получить значения для всех перестановок сегмента учителя одновременно? (у каждой группы учителей, сегментов, есть разные наблюдатели)?
  2. Как мне представить эти 6 различных значений Капы таким образом, который имеет смысл? Я никогда не делал что-то подобное раньше; надеясь получить некоторую информацию от опытных специалистов по статистике.
  3. Хотя здесь это не показано, оценщики имеют как порядковый, так и номинальный отклик по шкале (1-4 балла) и [да, нет]. Должен ли я использовать разные функции каппа для этих разных типов весов? Из документации библиотеки «Psych»: «Каппа Коэна (Cohen, 1960) и взвешенная каппа (Cohen, 1968) могут использоваться для нахождения согласия двух оценщиков при использовании номинальных баллов».

1 Ответ

2 голосов
/ 17 января 2020

Вот то, что я пытался для вас. Вы сказали, что хотите вычислить значения Каппа Коэна. Поэтому я решил использовать cohen.kappa() в пакете психики, а не icc(), с которым я не знаком. Я надеюсь, вы не против этого. Ключевым моментом было преобразование ваших данных таким образом, чтобы вы могли запускать cohen.kappa() все вместе. Увидев ваше one.permuation, я попытался создать фрейм данных, в котором в качестве столбцов указаны учитель, сегмент, предмет и оценщики (A, B, C, D и E). pivot_longer() и pivot_wider() справились с этим. Затем мне нужно было переместить числовые значения c в два столбца (сортировка значений по строкам). Я использовал пакет SOfun Ананды Махто. (Ананда является автором пакета splitstackshape.) Затем я собираю данные по учителям и сегментам и создаю списки. Для каждого списка, который содержит фрейм данных, я преобразовал фрейм данных в матрицу и применил cohen.kappa() и получил результаты с tidy(). Наконец, я использовал unnest(), чтобы увидеть результаты.

library(tidyverse)
library(psych)
library(devtools)
install_github("mrdwab/SOfun")
library(SOfun)
library(broom)

pivot_longer(full.data, cols = subject1:subject3,
             names_to = "subject", values_to = "rating_score") %>% 
pivot_wider(id_cols = c("teacher", "segment", "subject"),
             names_from = "Rater", values_from = "rating_score") %>%
as.matrix %>% 
naLast(by = "row") %>% 
as_tibble %>% 
select(-c(subject, C:E)) %>% 
type_convert() %>% 
group_by(teacher, segment) %>%
nest() %>% 
mutate(result = map(.x = data,
                    .f = function(x) cohen.kappa(as.matrix(x)) %>% tidy())) %>% 
unnest(result)

#  teacher segment           data type       estimate conf.low conf.high
#     <dbl>   <dbl> <list<df[,2]>> <chr>         <dbl>    <dbl>     <dbl>
# 1       1       1        [3 x 2] unweighted    0.25   -0.0501     0.550
# 2       1       1        [3 x 2] weighted      0.571  -0.544      1    
# 3       2       2        [3 x 2] unweighted    0       0          0    
# 4       2       2        [3 x 2] weighted      0.571  -1          1    
# 5       3       1        [3 x 2] unweighted    0       0          0    
# 6       3       1        [3 x 2] weighted      0       0          0    
# 7       4       2        [3 x 2] unweighted    0       0          0    
# 8       4       2        [3 x 2] weighted      0       0          0    
# 9       5       2        [3 x 2] unweighted    0.25   -0.0501     0.550
#10       5       2        [3 x 2] weighted      0.571  -0.544      1    
#11       6       1        [3 x 2] unweighted    1       1          1    
#12       6       1        [3 x 2] weighted      1       1          1  

i cc версия

Преобразование данных в основном то же самое. Вам нужно работать немного больше, когда вы запускаете несколько статистик. icc() возвращает icclist объект. Вы хотите создать фреймы данных из объекта.

library(irr)

pivot_longer(full.data, cols = subject1:subject3,
             names_to = "subject", values_to = "rating_score") %>% 
pivot_wider(id_cols = c("teacher", "segment", "subject"),
            names_from = "Rater", values_from = "rating_score") %>%
as.matrix %>% 
naLast(by = "row") %>% 
as_tibble %>% 
select(-c(subject, C:E)) %>% 
mutate_at(vars(A:B), .funs = list(~as.numeric(.))) %>% 
group_by(teacher, segment) %>%
nest() %>% 
mutate(result = map(.x = data,
                    .f = function(x) enframe(unlist(icc(x, 
                                                        model = "twoway",
                                                        type = "consistency", 
                                                        unit = "average"))) %>% 
                                     pivot_wider(names_from = "name",
                                                 values_from = "value"))) %>% 
unnest(result)


 teacher segment     data subjects raters model type  unit  icc.name value r0    Fvalue df1   df2   p.value conf.level lbound ubound
  <chr>   <chr>   <list<d> <chr>    <chr>  <chr> <chr> <chr> <chr>    <chr> <chr> <chr>  <chr> <chr> <chr>   <chr>      <chr>  <chr> 
1 1       1        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) 0.75  0     4      2     2     0.2     0.95       -8.74~ 0.993~
2 2       2        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) 0.75  0     4      2     2     0.2     0.95       -8.75  0.993~
3 3       1        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) 4.99~ 0     1      2     2     0.5     0.95       -38    0.974~
4 4       2        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) -8.3~ 0     0.999~ 2     2     0.5     0.95       -38    0.974~
5 5       2        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) 0.88~ 0     8.999~ 2     2     0.1     0.95       -3.33~ 0.997~
6 6       1        [3 x 2] 3        2      twow~ cons~ aver~ ICC(C,2) 1     0     Inf    2     2     0       0.95       1      1     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...