手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)
校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线。
一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值的差距
另外一种是calibration函数重抽样绘制连续的校准图
今天我们来演示第一种,手动绘制的好处在于加深你对绘图的理解,而且能个性化的进一步处理图形。第一种绘图本质就是我们的折线图,上一章《R语言绘制带误差和可信区间的折线图》我们已经介绍了怎么绘制折线图,只要求出相关数据就可以了。
我们先导入数据,继续使用我们的早产数据,
library(ggplot2)
library(rms)
bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)
这是一个关于早产低体重儿的数据(公众号回复:早产数据,可以获得该数据),低于2500g被认为是低体重儿。数据解释如下:low 是否是小于2500g早产低体重儿,age 母亲的年龄,lwt 末次月经体重,race 种族,smoke 孕期抽烟,ptl 早产史(计数),ht 有高血压病史,ui 子宫过敏,ftv 早孕时看医生的次数,bwt 新生儿体重数值。
我们先把分类变量转成因子
bc$race<-ifelse(bc$race=="black",1,ifelse(bc$race=="white",2,3))
bc$smoke<-ifelse(bc$smoke=="nonsmoker",0,1)
bc$race<-factor(bc$race)
bc$ht<-factor(bc$ht)
bc$ui<-factor(bc$ui)
建立回归方程
fit<-glm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,family = binomial("logit"),data = bc)
得出预测概率
pr1 <- predict(fit,type = c("response"))#得出预测概率
p = pr1
使用order函数对P值排序,这里注意一下,order§排的是位置
sor <- order(p)
P值按order来排列
p <- p[sor]
Y值也按order来排列
y = bc[, "low"]
y <- y[sor]
把P值分为10个等分区间
groep <- cut2(p, g = 10)
计算每个等分的P值和Y值
meanpred <- round(tapply(p, groep, mean), 3)
meanobs <- round(tapply(y, groep, mean), 3)
绘图
plot(meanpred, meanobs)
修饰一下,好像稍微好看了点
plot(meanpred, meanobs,xlab = "Predicted risk", ylab = "Observed risk", pch = 16, ps = 2, xlim = c(0, 1), ylim = c(0, 1), cex.lab = 1.2, cex.axis = 1.1, las = 1)
abline(0, 1, col = "grey", lwd = 1, lty = 1)
我们还可以和上一篇文章《R语言绘制带误差和可信区间的折线图》一样算出它的标准误,以便进一步计算可信区间
计算可信区间后可以进一步绘图
ggplot(matres, aes(x=meanpred, y=meanobs)) + geom_errorbar(aes(ymin=meanobs-1.96*se, ymax=meanobs+1.96*se), width=.02)
添加对角线
ggplot(matres, aes(x=meanpred, y=meanobs)) + geom_errorbar(aes(ymin=meanobs-1.96*se, ymax=meanobs+1.96*se), width=.02)+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1)+expand_limits(x = 0, y = 0) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))+geom_point()+xlab("预测概率")+ylab("实际概率")
进一步修饰
ggplot(matres, aes(x=meanpred, y=meanobs)) + geom_errorbar(aes(ymin=meanobs-1.96*se, ymax=meanobs+1.96*se), width=.02)+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1)+expand_limits(x = 0, y = 0) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))+geom_point(size=3, shape=21, fill="white")+xlab("预测概率")+ylab("实际概率")
使用PredictABEL包的plotCalibration函数来验证一下我们计算的正确性
library(PredictABEL)
plotCalibration(data = bc,cOutcome = 2,#结果在第几行就选几predRisk = pr1,groups = 10,rangeaxis = c(0,1))
和我们手工计算完全一致,证明我们算得没有问题。目前也比较流行使用重抽样的方法获取可信区间,将在今后章节介绍。OK,本期到此结束。需要全部代码的请公众号回复:代码。
手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)相关推荐
- stata手动绘制logistic回归预测模型校准曲线(Calibration curve)校准曲线(1)
校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线. 一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值 ...
- 校准曲线(calibration curve)是什么?如何绘制校准曲线(calibration curve)?如何通过过校准曲线进行分析?什么是高估?什么是低估?
校准曲线(calibration curve)是什么? 如何绘制校准曲线(calibration curve)? 如何通过过校准曲线进行分析? 什么是高估? 什么是低估? 注意:横纵坐标的差异,但是本 ...
- Topic 14. 临床预测模型之校准曲线 (Calibration curve)
点击关注,桓峰基因 桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 57篇原创内容 公众号 前言 Calibr ...
- 生存资料校准曲线calibration curve的绘制
本文首发于公众号:医学和生信笔记 " 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生物 ...
- 二分类资料校准曲线calibration curve的绘制
本文首发于公众号:医学和生信笔记 " 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生物 ...
- R语言基于dcurves包绘制COX回归临床决策曲线
因为R的rmda包做不了COX回归临床决策曲线,很多朋友都是通过ggdca包来绘制COX回归临床决策曲线,最近很多粉丝使用ggdca包来绘制COX回归临床决策曲线出现问题过来问我,我绘制的时候没发现什 ...
- [PyTorch]手动实现logistic回归(只借助Tensor和Numpy相关的库)
文章目录 实验要求 一.生成训练集 二.数据加载器 三.手动构建模型 3.1 logistic回归模型 3.2 损失函数和优化算法 3.3 模型训练 四.训练结果 实验要求 人工构造训练数据集 手动实 ...
- 手动绘制R语言Logistic回归模型的外部验证校准曲线(Calibration curve)(2)
校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线. 一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值 ...
- R语言与临床模型预测——LASSO回归,单因素多因素cox,差异表达分析,Venn图,森林图,列线图,矫正曲线,ROC全套代码及解析——第十三部分 校准曲线 本专栏可免费答疑
1.下载数据 2. 匹配基因 3. 基因去重复 4.匹配临床数据 5.批量cox回归分析 6.差异表达基因筛选 7.取交集,选出预后相关的差异表达基因 8.森林图绘制 9.lasso回归进一步排除具有 ...
最新文章
- vmware ESXI6.7 设置 Nvidia 显卡直通
- Python学习之序列
- 用SQL语句添加删除修改字段
- fd_set struct
- vscode php断点,VSCode中设置断点调试PHP(示例代码)
- 爬虫遇到路径转换的解决方案
- 关于CMS垃圾回收器的几个问题
- C#可逆加密-Rijndael算法
- 编辑画面,element-ui的单选框组选中值以及画面选择样式无法切换,但是绑定的v-model值已发生变化
- WinPhone 开发(4)-----快速恢复应用程序上一次的会话状态
- c语言盆子接球游戏,适合幼儿园孩子的70个感统训练游戏(开发右脑)
- android手机 usb hub,巧用USB HUB扩展OTG端口 让手机平板更超能
- 惠普ZBook 14u G5(3XG37PA)电脑 Hackintosh 黑苹果efi引导文件
- ps图层混合模式的含义
- python自动化:uiautomation、pyautogui操作会计记账系统(6):打印会计凭证
- 性能优化之cpu的 us和sy
- 【每日早报】20200113
- 基于goEasy消息推送的扫码登录
- k线图的93个卖出形态
- 让你的部属“跑起来”的十大方法
热门文章
- 恒生电子发布2023金融科技趋势研究报告,探索数智金融时代技术创新
- 计算机投诉信英语作文,投诉信英语作文(通用5篇)
- iphone阅读模式翻页_iphone6s阅读模式怎么关闭
- SpringBoot+JPA+thymeleaf 菜单分级展示
- 盒马“开吃”火锅行业,海底捞们还有机会“捞钱”吗?
- 如何使用git在gitee建立仓库并上传开源文件以及会遇到的问题
- 贺利氏收购瑞士安格-贺利氏全部股份 成为全球最大贵金属公司
- 详谈 UNIX 环境进程异常退出
- 海报设计PSD模板——抖音Glitch故障艺术风格
- Linux下搭建TPshop商城(阿里云)