基于cvms的混淆矩阵可视化咨询:测序技术与策略的FPR/TPR分析
混淆矩阵工具选择与可视化方案建议
工具选择
cvms完全能满足你的需求:它本身就支持按分组(比如SNVs/INDELs、测序技术/分析策略)生成混淆矩阵,还能直接算出TPR/FPR,可视化也自带分组功能,用起来省事。- 备选工具:
caret:老牌机器学习工具包,能生成基础混淆矩阵,但可视化得自己折腾,不如cvms直观。yardstick:tidyverse家族的工具,适合和dplyr/purrr配合批量算指标,要是你需要自定义分析流程可以用,但可视化得手动整合。
多矩阵与嵌套可视化方案
你的场景(2种分析策略×2种测序技术×2种变异类型)用嵌套分组的混淆矩阵可视化最适合,不用单独做多个矩阵,cvms一步就能搞定:
- 整理数据:把所有样本的真实标签、预测结果、分组信息(分析策略、测序技术、变异类型)放到同一个数据框里,列名建议设成
truth(真实变异类型)、prediction(预测结果)、strategy(graph/linear)、sequencing(PacBio/Illumina)、variant_type(SNVs/INDELs)。 - 批量算指标:用
cvms::calculate_confusion_matrix()配合dplyr::group_by(),按strategy、sequencing、variant_type分组,一次性算出所有组的TPR、FPR。 - 嵌套可视化:调用
cvms::plot_confusion_matrix(),设置grouping = c("strategy", "sequencing"),就能生成按分析策略和测序技术嵌套的子矩阵,每个子矩阵对应SNVs或INDELs的结果,还能直接把TPR/FPR标在图上。
示例代码(适配你的数据结构)
library(cvms) library(dplyr) # 模拟你的基准测试数据格式 benchmark_data <- tibble( truth = rep(c("SNV", "INDEL", "Negative"), each = 100), prediction = sample(c("SNV", "INDEL", "Negative"), 300, replace = TRUE), strategy = rep(c("graph", "linear"), each = 150), sequencing = rep(c("PacBio", "Illumina"), 75), variant_type = rep(c("SNVs", "INDELs", "Negative"), each = 100) ) # 分组计算混淆矩阵和指标(过滤阴性样本,只保留变异类型组) confusion_results <- benchmark_data %>% group_by(strategy, sequencing, variant_type) %>% filter(variant_type != "Negative") %>% calculate_confusion_matrix(truth = truth, prediction = prediction) # 生成嵌套可视化图,显示TPR和FPR plot_confusion_matrix(confusion_results, grouping = c("strategy", "sequencing"), add_percentages = TRUE, add_counts = TRUE, metrics = c("TPR", "FPR"), metric_position = "bottom")
额外提示
- 如果想单独对比SNVs和INDELs的TPR/FPR差异,可以把结果整理成柱状图,用
ggplot2画:x轴是“策略+测序技术”的组合,y轴是指标值,颜色区分变异类型,这样差异一目了然。 - 注意确保
truth和prediction的类别完全一致,不然会计算出错;如果有阴性样本(非变异),记得分组时过滤掉,不然会影响SNVs/INDELs的TPR/FPR计算准确性。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

