Kappa应用于评估者的所有成对组合,并存储结果

时间:2019-01-19 15:50:51

标签: r functional-programming tidyverse

为实现可视化,我需要计算所有七个评估者组合/对的加权kappa。因此,如果我使用带有七个列的一些示例数据:

ex <- structure(list(`1` = c(1, 1, 2, 1, 2, 1, 1, 1, 2, 3, 1, 1, 1, 
1, 1, 1, 2, 1, 2, 2), `2` = c(1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 
2, 1, 1, 2, 2, 1, 2, 2, 2), `3` = c(1, 1, 2, 1, 2, 1, 1, 1, 2, 
3, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2), `4` = c(1, 1, 2, 2, 2, 1, 2, 
2, 2, 3, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2), pa = c(1, 2, 1, 2, 3, 
1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 1, 3, 2), ta = c(2, 2, 2, 
1, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 3), ka = c(1, 
1, 2, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2)), row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))

我想获得一个捕获所有列组合上的irr::kappa2输出的结构。像这样的结构:

out <- data.frame("1_2"=irr::kappa2(ex[c(1,2)]),
"1_3"=irr::kappa2(ex[c(1,3)]),"1_4"=irr::kappa2(ex[c(1,3)]),....

(用于列的所有唯一组合)。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

一种解决方案是将函数kappa2的整个输出结构存储到列表的元素中,并为每个可能的列组合包含一个元素:

# initialization
out_list <- list()
column <- 1

# cycle for storing kappa2's output structure
for (i in 1:(ncol(ex)-1)){
    for (j in (i+1):ncol(ex)){
        out_list[[column]] <- irr::kappa2(ex[,c(i,j)])
        # renaming the elements
        names(out_list)[column] <- paste0(i, "_", j)
        column <- column + 1
    }
}

如果只希望每对列的Kappa值(如注释中所述),则可以使用以下代码(与以前非常相似):

# initialization
# the number of columns of "out" is from mathematics
out <- as.data.frame(matrix(0, nrow = 1, ncol = ncol(ex) * (ncol(ex)-1) / 2))
column <- 1

# cycle for calculation kappa
for (i in 1:(ncol(ex)-1)){
    for (j in (i+1):ncol(ex)){
        out[1,column] <- irr::kappa2(ex[,c(i,j)])$value
        colnames(out)[column] <- paste0(i, "_", j)
        column <- column + 1
    }
}