校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线。
一般分为两种,一种是通过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)相关推荐

  1. stata手动绘制logistic回归预测模型校准曲线(Calibration curve)校准曲线(1)

    校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线. 一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值 ...

  2. 校准曲线(calibration curve)是什么?如何绘制校准曲线(calibration curve)?如何通过过校准曲线进行分析?什么是高估?什么是低估?

    校准曲线(calibration curve)是什么? 如何绘制校准曲线(calibration curve)? 如何通过过校准曲线进行分析? 什么是高估? 什么是低估? 注意:横纵坐标的差异,但是本 ...

  3. Topic 14. 临床预测模型之校准曲线 (Calibration curve)

    点击关注,桓峰基因 桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 57篇原创内容 公众号 前言 Calibr ...

  4. 生存资料校准曲线calibration curve的绘制

    本文首发于公众号:医学和生信笔记 " 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生物 ...

  5. 二分类资料校准曲线calibration curve的绘制

    本文首发于公众号:医学和生信笔记 " 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生物 ...

  6. R语言基于dcurves包绘制COX回归临床决策曲线

    因为R的rmda包做不了COX回归临床决策曲线,很多朋友都是通过ggdca包来绘制COX回归临床决策曲线,最近很多粉丝使用ggdca包来绘制COX回归临床决策曲线出现问题过来问我,我绘制的时候没发现什 ...

  7. [PyTorch]手动实现logistic回归(只借助Tensor和Numpy相关的库)

    文章目录 实验要求 一.生成训练集 二.数据加载器 三.手动构建模型 3.1 logistic回归模型 3.2 损失函数和优化算法 3.3 模型训练 四.训练结果 实验要求 人工构造训练数据集 手动实 ...

  8. 手动绘制R语言Logistic回归模型的外部验证校准曲线(Calibration curve)(2)

    校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线. 一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值 ...

  9. R语言与临床模型预测——LASSO回归,单因素多因素cox,差异表达分析,Venn图,森林图,列线图,矫正曲线,ROC全套代码及解析——第十三部分 校准曲线 本专栏可免费答疑

    1.下载数据 2. 匹配基因 3. 基因去重复 4.匹配临床数据 5.批量cox回归分析 6.差异表达基因筛选 7.取交集,选出预后相关的差异表达基因 8.森林图绘制 9.lasso回归进一步排除具有 ...

最新文章

  1. vmware ESXI6.7 设置 Nvidia 显卡直通
  2. Python学习之序列
  3. 用SQL语句添加删除修改字段
  4. fd_set struct
  5. vscode php断点,VSCode中设置断点调试PHP(示例代码)
  6. 爬虫遇到路径转换的解决方案
  7. 关于CMS垃圾回收器的几个问题
  8. C#可逆加密-Rijndael算法
  9. 编辑画面,element-ui的单选框组选中值以及画面选择样式无法切换,但是绑定的v-model值已发生变化
  10. WinPhone 开发(4)-----快速恢复应用程序上一次的会话状态
  11. c语言盆子接球游戏,适合幼儿园孩子的70个感统训练游戏(开发右脑)
  12. android手机 usb hub,巧用USB HUB扩展OTG端口 让手机平板更超能
  13. 惠普ZBook 14u G5(3XG37PA)电脑 Hackintosh 黑苹果efi引导文件
  14. ps图层混合模式的含义
  15. python自动化:uiautomation、pyautogui操作会计记账系统(6):打印会计凭证
  16. 性能优化之cpu的 us和sy
  17. 【每日早报】20200113
  18. 基于goEasy消息推送的扫码登录
  19. k线图的93个卖出形态
  20. 让你的部属“跑起来”的十大方法

热门文章

  1. 恒生电子发布2023金融科技趋势研究报告,探索数智金融时代技术创新
  2. 计算机投诉信英语作文,投诉信英语作文(通用5篇)
  3. iphone阅读模式翻页_iphone6s阅读模式怎么关闭
  4. SpringBoot+JPA+thymeleaf 菜单分级展示
  5. 盒马“开吃”火锅行业,海底捞们还有机会“捞钱”吗?
  6. 如何使用git在gitee建立仓库并上传开源文件以及会遇到的问题
  7. 贺利氏收购瑞士安格-贺利氏全部股份 成为全球最大贵金属公司
  8. 详谈 UNIX 环境进程异常退出
  9. 海报设计PSD模板——抖音Glitch故障艺术风格
  10. Linux下搭建TPshop商城(阿里云)