首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评估间可靠性:同时运行多个Cohen的Kappa (使用R)

评估间可靠性:同时运行多个Cohen的Kappa (使用R)
EN

Stack Overflow用户
提问于 2020-01-17 01:21:18
回答 1查看 541关注 0票数 1

我试图为多个教师段排列计算科恩的kapa值。在这个考试中,有六种独特的教师段组合.例如,教师1-段1有两种不同的评分者,并希望看到这两位教师的ICC 1-段1(和所有其他教师段置换)。

我有这样的数据集。

代码语言:javascript
复制
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')

我知道,如果我想得到科恩的卡帕只为一个教师部分小组,我会转换这样的数据,

代码语言:javascript
复制
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”))

这只会给我一个kapa值,对于那个特定的教师部分。

  1. ,我怎么能一次得到所有教师段排列的值?(每一组老师,段,有一个不同的观察者)?
  2. ,我如何以一种有意义的方式呈现这6个不同的Kapa值?我以前从未做过这样的事情;希望能从这里没有显示的有经验的stat folks.
  3. Although那里获得一些洞察力,评分者有序数和标称尺度的反应(1-4分),是的,没有。对于这些不同的尺度,我应该使用不同的kappa函数吗?从“精神病学”图书馆文献:“科恩的卡帕(科恩,1960年)和加权卡帕(科恩,1968年)可以用来寻找两个评分者在使用名义分数时的一致性。”

EN

回答 1

Stack Overflow用户

发布于 2020-01-17 04:21:49

这是我为你做的。你说你想计算科恩的Kappa值。因此,我决定在心理包中使用cohen.kappa(),而不是使用我不熟悉的icc()。我希望你不要介意。它们的关键是以一种可以一起运行cohen.kappa()的方式转换您的数据。看到您的one.permuation,我尝试创建一个以教师、段、主题和评分员(A、B、C、D和E)为列的数据框架。pivot_longer()pivot_wider()处理了这个问题。然后,我需要将数值移动到两列(逐行值排序)。我使用了Ananda的SOfun包。(Ananda是splitstackshape一书的作者。)然后,我通过老师和分段收集数据,并创建列表。对于每个包含数据帧的列表,我将数据帧转换为矩阵并应用cohen.kappa(),并使用tidy()获得了结果。最后,我使用unnest()来查看结果。

代码语言:javascript
复制
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  

icc版本

数据转换基本上是一样的。当您运行多个统计数据时,您需要更多地工作。icc()返回icclist对象。您希望从对象创建数据帧。

代码语言:javascript
复制
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     
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59780020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档