【问题标题】:R: perform Cohen's Kappa test between all possible combination of variablesR:在所有可能的变量组合之间执行 Cohen 的 Kappa 检验
【发布时间】:2020-03-18 22:39:56
【问题描述】:

我有以下数据框:

structure(list(test1 = c(0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1), 
    test2 = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1), test3 = c(0, 
    0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1), test4 = c(1, 0, 1, 1, 1, 
    1, 0, 1, 0, 1, 0, 1), test5 = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 
    1, 0, 1), test6 = c(0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

每个变量/列对应于一个测试(test1、test2、test3、test4...),并具有每个观察的测试结果(1 或 0)。

我想计算所有可能变量对的 Kappa 统计量,并将这些组合的结果放在数据框中,如

structure(list(...1 = c("test1-test2", "test1-test3", "test1-test4", 
"test2-test1"), `z-score` = c(NA, NA, NA, NA), kappa = c(NA, 
NA, NA, NA), `p-value` = c(NA, NA, NA, NA)), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame"))
> 

有人可以帮我吗?

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    您的数据:

    test <- structure(list(test1 = c(0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1), 
        test2 = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1), test3 = c(0, 
        0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1), test4 = c(1, 0, 1, 1, 1, 
        1, 0, 1, 0, 1, 0, 1), test5 = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 
        1, 0, 1), test6 = c(0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1)), row.names = c(NA, 
    -12L), class = c("tbl_df", "tbl", "data.frame"))
    

    使用 combn 获取所有可能的比较:

    PAIRS = combn(names(test),2)
    

    使用 irr 并遍历组合:

    library(irr)
    all_results = apply(PAIRS,2,function(i){
    result = kappa2(test[,i], "unweighted")
    data.frame(
    'comparison'=paste(i,collapse="-"),
    'z-score'=result$statistic,
    'kappa'=result$value,
    'p-value'=result$p.value
    )
    })
    

    结果在一个列表中,我们将它们组合成一个data.frame

    all_results =  do.call(rbind,all_results)
    
        comparison     z.score       kappa      p.value
    1  test1-test2 -0.09897433 -0.02857143 0.9211586502
    2  test1-test3  0.58554004  0.16666667 0.5581846494
    3  test1-test4 -0.82807867 -0.23529412 0.4076259477
    4  test1-test5 -0.09897433 -0.02857143 0.9211586502
    5  test1-test6  0.58554004  0.16666667 0.5581846494
    6  test2-test3  0.58554004  0.16666667 0.5581846494
    7  test2-test4  1.65615734  0.47058824 0.0976899593
    8  test2-test5  3.46410162  1.00000000 0.0005320055
    9  test2-test6  0.58554004  0.16666667 0.5581846494
    10 test3-test4 -1.22474487 -0.33333333 0.2206713619
    11 test3-test5  0.58554004  0.16666667 0.5581846494
    12 test3-test6  3.46410162  1.00000000 0.0005320055
    13 test4-test5  1.65615734  0.47058824 0.0976899593
    14 test4-test6 -1.22474487 -0.33333333 0.2206713619
    15 test5-test6  0.58554004  0.16666667 0.5581846494
    

    【讨论】:

      【解决方案2】:

      您将需要安装 irr 软件包(尽管您可以将其替换为任何其他版本的测试)。我将您的原始数据集命名为dfr1,将生成的数据集命名为dfr2。这将遍历所有列名并从每个测试中检索结果:

      dfr2 <- data.frame(pair = as.character(), z_score = as.numeric(), kappa = as.numeric(), p_value = as.numeric())
      for(i in 1:ncol(dfr1)){
        for(j in 1:ncol(dfr1)){
         if(i != j){
           tst <- irr::kappa2(dfr1[,c(i,j)])
           dfr2 <- rbind(dfr2, data.frame(pair = paste0(names(dfr1[,c(i,j)]), collapse = "-"),
                                          z_score = tst$statistic,
                                          kappa = tst$value,
                                          p_value = tst$p.value))
         } 
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多