编辑代码

# 创建数据框
data <- data.frame(
  Study = c("Tingna Wu/2021", "D. B. Sibandze/2022", "Peiyun Liu/2024", "Lishu Zhang/2024", 
          "Suting Chen/2023", "Jiayuan Ye/2024", "Xiaocui Wu/2023", "Zhongpeng Yang/2024",
          "Hongtai Zhang/2024", "Hui Lv/2024", "Trinh Thi Bich Tram", "Weiwei Gao/2024", 
          "Yu TAO/2024", "Guang Zhang/2023", "Andrea Maurizio Cab", "Huiwen Zheng/2024", 
          "Xiaoke Sun/2023", "Yifan Guo/2023", "Priti Kambli/2024", "Guocan Yu/2024", 
          "Qiang Zhang/2024", "K. Nilgiriwala/2023"),
  TP = c(14, 51, 69, 57, 160, 10, 77, 61, 53, 8, 50, 82, 85, 48, 102, 25, 43, 9, 7, 108, 61, 54),
  FP = c(0, 3, 3, 6, 4, 0, 25, 0, 3, 0, 0, 1, 0, 0, 0, 4, 0, 1, 0, 3, 1, 0),
  TN = c(0, 10, 42, 54, 41, 46, 23, 0, 17, 0, 0, 1, 160, 0, 0, 27, 10, 437, 0, 21, 80, 12),
  FN = c(20, 21, 4, 2, 22, 0, 5, 1, 56, 0, 22, 11, 5, 2, 2, 47, 5, 3, 13, 17, 21, 8)
)

# 计算敏感性和特异性
data$Sensitivity <- data$TP / (data$TP + data$FN)
data$Specificity <- data$TN / (data$TN + data$FP)
data$Accuracy <- (data$TP + data$TN) / (data$TP + data$TN + data$FP + data$FN)

# 创建图形窗口
par(mfrow = c(2, 2))  # 2x2布局

# 1. 敏感性和特异性点图
plot(1:nrow(data), data$Sensitivity, 
     type = "p", 
     col = "blue",
     ylim = c(0, 1),
     xlab = "Study Index",
     ylab = "Value",
     main = "Sensitivity and Specificity",
     xaxt = "n")
points(1:nrow(data), data$Specificity, col = "red")
abline(h = 0.5, lty = 2, col = "gray")
legend("bottomright", 
       legend = c("Sensitivity", "Specificity"),
       col = c("blue", "red"),
       pch = 1)

# 2. TP vs FP 散点图
plot(data$FP, data$TP,
     xlab = "False Positive",
     ylab = "True Positive",
     main = "TP vs FP",
     col = "blue")

# 3. 条形图显示各组成部分
barplot(t(as.matrix(data[, c("TP", "FP", "TN", "FN")])),
        beside = FALSE,
        col = c("green", "red", "blue", "yellow"),
        main = "Test Results Distribution",
        xlab = "Study Index",
        ylab = "Count",
        legend.text = c("TP", "FP", "TN", "FN"))

# 4. 准确率条形图
barplot(data$Accuracy,
        main = "Accuracy by Study",
        ylab = "Accuracy",
        ylim = c(0, 1),
        col = "lightblue")

# 重置图形参数
par(mfrow = c(1, 1))

# 打印统计摘要
cat("\nSummary Statistics:\n")
cat("Mean Sensitivity:", mean(data$Sensitivity), "\n")
cat("Mean Specificity:", mean(data$Specificity), "\n")
cat("Mean Accuracy:", mean(data$Accuracy), "\n")

# 打印诊断矩阵
cat("\nDiagnostic Matrix Summary:\n")
cat("Total TP:", sum(data$TP), "\n")
cat("Total FP:", sum(data$FP), "\n")
cat("Total TN:", sum(data$TN), "\n")
cat("Total FN:", sum(data$FN), "\n")