zl程序教程

您现在的位置是:首页 >  其他

当前栏目

3d版混淆矩阵可视化

2023-03-07 09:12:34 时间

关于临床预测模型的基础知识,小编之前已经写过非常详细的教程,包括了临床预测模型的定义、常用评价方法、列线图、ROC曲线、IDI、NRI、校准曲线、决策曲线等。

全都是免费获取的代码和数据:R语言临床预测模型合集

以上合集包括了临床预测模型绝大多数的内容,内容肯定比得上一个几千块的培训班!用以上教程完成一篇SCI绝对不是问题!

混淆矩阵大家应该都不陌生,但是3d版的混淆矩阵你见过吗?

今天的3d版混淆矩阵来自一位粉丝求助,图形如下:

doi:10.1007/s12072-021-10188-5

千万不要被这个图难住了,它其实非常简单,你把它的z轴去掉,看看是不是就是普通的混淆矩阵?

这个3d版不过是增加了一个维度,用来表示人数而已。

我们通过R语言可以轻松实现这个图,当然,Excel也很简单!3d柱状图嘛

我们就用这篇推文中的混淆矩阵为例:ROC阳性结果还是阴性结果?

上次用到的数据如下:

psych::headTail(df1)

    outcome  ca125         pred
1      肿瘤  51.88 猜他不是肿瘤
2      肿瘤  82.46   猜他是肿瘤
3      肿瘤 113.67   猜他是肿瘤
4      肿瘤  63.49   猜他是肿瘤
...    <NA>    ...         <NA>
27   非肿瘤  53.33 猜他不是肿瘤
28   非肿瘤  59.92 猜他不是肿瘤
29   非肿瘤  46.46 猜他不是肿瘤
30   非肿瘤  30.03 猜他不是肿瘤

这个结果变成混淆矩阵是下面这样的:

df1 %>% count(pred, outcome)

          pred outcome  n
1 猜他不是肿瘤  非肿瘤 15
2 猜他不是肿瘤    肿瘤  1
3   猜他是肿瘤  非肿瘤  5
4   猜他是肿瘤    肿瘤  9

2d混淆矩阵可视化

如果要可视化混淆矩阵,简单的2维非常简单,比如用ggplot2即可:

library(tidyverse)

ggplot(df1, aes(pred, outcome))+
  geom_tile(aes(fill=ca125))+
  geom_label(data = df1 %>% count(pred, outcome), aes(pred,outcome,label=n),size=12)+
  theme_minimal()+
  theme(legend.position = "none")

想要修改更多细节,大家自己动手即可,非常简单!

3d版混淆矩阵可视化

也是很简单,使用barplot3d这个包即可。

library(barplot3d)

注意这个包画图的顺序:从左到右,从前到后

# 把混淆矩阵结果放到1个向量里
inputdata <- c(15,5,1,9)

# 定义4个颜色
mycolors <- c("#00468BB2", "#ED0000B2", "#42B540B2", "#0099B4B2")

barplot3d(rows = 2,cols = 2, z = inputdata, # 一共4个数,2行,2列
          scalexy=8, # 让柱子胖一点
          topcolors=mycolors, # 柱子顶部的颜色
          sidecolors=mycolors, # 柱子的填充色
          xlabels = c("pred.No","pred.Yes"), 
          ylabels = c("No","Yes"),
          xsub = "Prediction",
          ysub = "Outcome",
          zsub = "Count"
          )

出图如下:

这个图是3d的,画出来之后会单独弹出一个窗口,你可以随意旋转,找到自己喜欢的角度保存即可!