【问题标题】:Testing for sensitivity and specificity: how to summarise TP, FP, FN, and TN using R, dplyr/tidyverse测试敏感性和特异性:如何使用 R、dplyr/tidyverse 总结 TP、FP、FN 和 TN
【发布时间】:2021-05-04 14:49:49
【问题描述】:

我正在测试新方法的诊断价值,并想测试这种方法的敏感性和特异性。 假设我们有一个包含 200 名患者和对照组的数据集,测试结果从 1 到 8 不等。

set.seed(123)    
Df<-
    data.frame(id=1:200,
      group = sample(c("Patient", "Control"), 200, TRUE),
      test = sample(5, 200, TRUE))

我根据组变量和测试结果将“受访者”分组如下:

Df%>%
    group_by(group, test) %>% 
      summarise(Num=n()) %>% 
      spread(group, Num)%>%
      mutate(reference=test)

如何使用各自的测试结果作为阈值来总结各列中的真阳性、假阳性、假阴性和假阳性的数量? 我怀疑突变应该这样开始(如果使用 case_when):

mutate(TP=case_when(id.group=="Patient"&test>=reference~[..summarize conditional cells...], FP=case_when id.group=="Control"&test>=reference~[..summarize conditional cells...]), etc.  

但不知道如何总结条件单元格。 请你帮助我好吗? 提前致谢

【问题讨论】:

  • 那么你想要的究竟是什么? (使用随机数据时,请使用set.seed(),以便我们得到与您相同的随机值进行测试)
  • 嗨。谢谢你。现已添加。
  • TP、FP、FN、TN的计算公式是什么?您能显示预期输出的前几行吗?
  • 我想将值的数量总结为变量。比方说,我想知道对于 1 或更高的参考值有多少是真阳性。所以,条件是 group=="Patient"&test>=reference。参考行“1”的 TP 值应包含测试等于或高于 1 的“患者”的总和。
  • 对于“2”的参考值,列应为:TP=80,FP=99,FN=12,TN=9。对于“3”的参考值——如下:TP=67、FP=77、FN=32、TN=24等

标签: r dplyr


【解决方案1】:

如果我理解正确,

mutate(TP=rev(cumsum(Patient)),
       FP=rev(sum(Patient)-cumsum(Patient)),
       TN=rev(cumsum(Control)),
       FN=rev(sum(Control)-cumsum(Control))) %>%
  select(reference, TP, FP, TN, FN)

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2021-04-17
    • 1970-01-01
    • 2020-08-23
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2021-03-01
    相关资源
    最近更新 更多