rm(list = ls())
suppressMessages(library(tidyverse))
load(file = "./datasets/df1.rdata")
::headTail(df1)
psych## 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 猜他不是肿瘤
20 三维混淆矩阵
混淆矩阵大家应该都不陌生,但是3d版的混淆矩阵你见过吗?
今天的3d版混淆矩阵来自一位粉丝,图形如下:
文章DOI:doi:10.1007/s12072-021-10188-5
千万不要被这个图难住了,它其实非常简单,你把它的z轴去掉,看看是不是就是普通的混淆矩阵?
这个3d版不过是增加了一个维度,用来表示人数而已。
我们通过R语言可以轻松实现这个图,当然,Excel也很简单!3d柱状图嘛
我们就用这篇推文中的混淆矩阵为例:ROC阳性结果还是阴性结果?
上次用到的数据如下:
这个结果变成混淆矩阵是下面这样的:
%>% count(pred, outcome)
df1 ## pred outcome n
## 1 猜他不是肿瘤 肿瘤 1
## 2 猜他不是肿瘤 非肿瘤 15
## 3 猜他是肿瘤 肿瘤 9
## 4 猜他是肿瘤 非肿瘤 5
20.1 2d混淆矩阵可视化
如果要可视化混淆矩阵,简单的2维非常简单,比如用ggplot2
即可:
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")
想要修改更多细节,大家自己动手即可,非常简单!
20.2 3d版混淆矩阵可视化
也是很简单,使用barplot3d
这个包即可。这个包需要本地安装。
注意这个包画图的顺序:从左到右,从前到后!
library(barplot3d)
# 把混淆矩阵结果放到1个向量里
<- c(15,5,1,9)
inputdata
# 定义4个颜色
<- c("#00468BB2", "#ED0000B2", "#42B540B2", "#0099B4B2")
mycolors
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的,画出来之后会单独弹出一个窗口,你可以随意旋转,找到自己喜欢的角度保存即可!