我有一个数据框,其中包含来自两个评估者的数据,以测试4种不同测试的可靠性:
test1_rater1<-c(1,4,3,2,3,4,1,2,2,3)
test2_rater1<-c(1,3,3,3,2,3,1,1,2,1)
test3_rater1<-c(1,4,3,4,4,2,3,1,3,4)
test4_rater1<-c(1,3,4,2,3,2,1,2,3,2)
test1_rater2<-c(1,3,3,4,3,4,3,2,1,3)
test2_rater2<-c(1,3,1,3,1,3,3,1,1,1)
test3_rater2<-c(1,3,3,2,4,2,3,4,3,4)
test4_rater2<-c(2,3,4,4,3,2,3,2,3,2)
mydata<-data.frame(test1_rater1,test2_rater1,test3_rater1,test4_rater1,test1_rater2,test2_rater2,test3_rater2,test4_rater2)
# For the kappa statistic, I used:
cohen.kappa(cbind(test1_rater1,test1_rater2))
cohen.kappa(cbind(test2_rater1,test2_rater2))
cohen.kappa(cbind(test3_rater1,test3_rater2))
cohen.kappa(cbind(test4_rater1,test4_rater2))
在我的数据框中是来自80多个不同测试的数据,这个解决方案很安静...我想了解一个列表然后使用lapply函数,但我没有工作。有更短的方法吗?
谢谢,Nat
答案 0 :(得分:3)
第一步是tidy您的数据:不是每对测试和评估者都有一列,而是有// in objectA class's function
GameObject objB = Instantiate(objectB, gameObject.transform.position, Quaternion.identity);
objB.parentPos = transform.position;
// and if you just want to know who Instantiated it, use this line:
objB.parentGameObj = gameObject;
// in objectB class
public Vector3 parentPos;
public GameObject parentGameObj;
列,然后是test
和{{ 1}}。您可以使用dplyr和tidyr软件包进行重组:
rater1
现在您可以在每个测试中执行Cohen-kappa计算。这将需要一个函数将rater2
对象转换为数据框。你可以使用这个功能:
library(dplyr)
library(tidyr)
rearranged_data <- mydata %>%
mutate(row = row_number()) %>%
gather(column, value, -row) %>%
separate(column, c("test", "rater")) %>%
spread(rater, value)
head(rearranged_data)
#> row test rater1 rater2
#> 1 1 test1 1 1
#> 2 1 test2 1 1
#> 3 1 test3 1 1
#> 4 1 test4 1 2
#> 5 2 test1 4 3
#> 6 2 test2 3 3
如果您使用kappa
安装我的broom package的最新版本,则可以使用library(broom)
tidy_kappa <- function(x) {
broom::fix_data_frame(x$confid, newcol = "type")
}
方法,因为我刚刚将这样的方法添加到包中。
现在,您可以使用dplyr&#39; devtools::install_github("dgrtwo/broom")
和tidy
执行cohen.kappa
测试:
group_by
无论你有多少次测试,这种方法都会有效,每次测试会产生两行(一行有未加权的kappa,另一行有加权:就像do
函数的输出一样)。请注意,此输出格式对于绘图或进一步分析结果非常有用:
library(psych)
results <- rearranged_data %>%
group_by(test) %>%
do(tidy_kappa(cohen.kappa(cbind(.$rater1, .$rater2))))
results
#> Source: local data frame [8 x 5]
#> Groups: test
#>
#> test type lower estimate upper
#> 1 test1 unweighted kappa 0.08574000 0.4594595 0.8331789
#> 2 test1 weighted kappa 0.07284356 0.5238095 0.9747755
#> 3 test2 unweighted kappa -0.10654813 0.3333333 0.7732148
#> 4 test2 weighted kappa -0.09877879 0.4444444 0.9876677
#> 5 test3 unweighted kappa 0.19876127 0.5833333 0.9679054
#> 6 test3 weighted kappa -0.39241493 0.3577982 1.1080113
#> 7 test4 unweighted kappa 0.21116862 0.5714286 0.9316885
#> 8 test4 weighted kappa -0.02324226 0.4444444 0.9121311