代码+视频,R语言手动绘制连续线条的校准曲线(Calibration curve)(3)

news2024/11/25 19:34:40

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

在这里插入图片描述
在这里插入图片描述
我们既往已经通过多篇文章介绍了等分的校准曲线绘制,今天来视频介绍一下上图这种连续的,线条样的校准曲线绘制

手动绘制R语言连续线条的校准曲线(Calibration-curve)

library(ggplot2)
library(rms)
bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)
head(bc,6)
#公众号:零基础说科研,公众号回复:早产数据,可以获得数据
#公众号回复:代码,可以获得我自写gg函数
# 这是一个关于早产低体重儿的数据(公众号回复:早产数据,可以获得该数据),低于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)

#对数据进行比例划分
set.seed(123)
tr1<- sample(nrow(bc),0.6*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#60%数据集
bc_test<- bc[-tr1,]#40%数据集

#我们先按RMS包的方法来画图,等下做个比较

#建立模型
fit1<-lrm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,
          x = TRUE, y = TRUE,
          data = bc_train )
#绘图
cali <- calibrate(fit1, B = 400) 
plot(cali)

#这张图有3条线,ideal就是校准曲线,bisa是对ideal进行的一个校正。
#下面我们来手动绘制ideal这条校准曲线,我们先用常规方法生成一个模型

fit<-glm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,
         family = binomial("logit"),data = bc_train)
options(digits = 3, scipen=999)

#生成模型的预测值
predicted <- predict(fit,type = c("response")) 

#对预测值进行排序,并按区间抽样排列
p <- sort(predicted) 
p<-as.numeric(p)
predy <- seq(p[5], p[nrow(bc_train) - 4], length = 50) #from , to , by 

#
smo <- lowess(predicted, as.numeric(fit$y), iter = 0) #LOWESS平滑你和,使用局部加权多项式回归,iter为迭代次数
plot(smo)

##
#看到了没有,校准曲线已经初具雏形了,现在有两个方法对它进行处理,使用ggplot绘图功能直接拟合或者对这条线进行预测插值。
#我先使用ggplot绘图绘图试一下,这个适合数据比较紧凑的数据
plotdat<-as.data.frame(smo)
ggplot(plotdat, aes(x, y))+ 
  geom_line(aes(x = x, y = y), linewidth=1,col="blue")+
  annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "black",size=1)+ theme_minimal()+theme_bw()

#再来就是使用插值法对它插值
calibrated.orig <- approx(smo, xout = predy, ties = function(x) x[1])$y 

##插值后就可以绘图了
plot(predy, calibrated.orig, type = "l", lty=1, xlim = c(0,1), ylim = c(0,1), col= "blue")
abline(0, 1, lty = 2)
legend <- list(x=0 + .55*diff(c(0,1)), y=0 + .32*diff(c(0,1)))
legend(legend, c("Apparent","Ideal"), lty=c(3,1,2), bty="n")

##美化一下
plot(predy, calibrated.orig, type = "l", lty=1,lwd=2, xlim = c(0,0.8), ylim = c(0,0.8), col= "blue")
abline(0,1,col="black",lty=2,lwd=2)
legend(0.55,0.35,
       c("Apparent","Ideal"),
       lty=c(2,1),
       lwd=c(2,1),
       col=c("black","blue"),
       bty="n")

###基于这个原理,我们可以应用到其他模型上,比如我们的随机森林模型,我们先导入数据,并对数据进行整理
library(randomForest)
library(pROC)
library(foreign)
#公众号回复:银行客户数据,可以获得数据
bc <- read.spss("E:/r/test/bankloan_cs.sav",
                use.value.labels=F, to.data.frame=T)
bc<-bc[,c(-1:-3,-13:-15,-5)]
head(bc,6)
bc$default<-as.factor(bc$default)

#对数据进行7:3划分
set.seed(1)
index <- sample(2,nrow(bc),replace = TRUE,prob=c(0.7,0.3))
traindata <- bc[index==1,]
testdata <- bc[index==2,]

#建立随机森林模型
def_ntree<- randomForest(default ~age+employ+address+income+debtinc+creddebt
                         +othdebt,data=traindata,
                         ntree=500,important=TRUE,proximity=TRUE)

#生成预测概率,并对Y值概率进行提取
def_pred<-predict(def_ntree, newdata=traindata,type = "prob")##生成概率
def_pred<-as.data.frame(def_pred)
p<-def_pred$`1`

#对P值排序并对预测值抽取序列
p1 <- sort(p) 
predy <- seq(p1[5], p1[as.numeric(nrow(traindata)) - 4], length = 50)  #对X取值

#对预测的X和Y进行lowess回归拟合
smo <- lowess(p, as.numeric(def_ntree$y)-1, iter = 0)
plot(smo)

#这个数据不够刚才的连续
plotdat<-as.data.frame(smo)
ggplot(plotdat, aes(x, y))+ 
  geom_line(aes(x = x, y = y), linewidth=1,col="blue")+
  annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "black",size=1)+ theme_minimal()+theme_bw()


#我们使用插值法试一下
calibrated.orig <- approx(smo, xout = predy, ties = mean)$y # calibrated.orig
plot(predy, calibrated.orig, type = "l", lty=1,  col= "blue")
abline(0, 1, lty = 2)
legend <- list(x=0 + .55*diff(c(0,1)), y=0 + .32*diff(c(0,1)))
legend(legend, c("Apparent","Ideal"), lty=c(3,1,2), bty="n")

#美化一下
plot(predy, calibrated.orig, type = "l", lty=1,lwd=2, xlim = c(0,1), ylim = c(0,1), col= "blue")
abline(0,1,col="black",lty=2,lwd=2)
legend(0.55,0.35,
       c("Apparent","Ideal"),
       lty=c(2,1),
       lwd=c(2,1),
       col=c("black","blue"),
       bty="n")

##
source("E:/r/test/ggfit.R")
#公众号:零基础说科研,公众号回复:早产数据,可以获得数据
#公众号回复:代码,可以获得我自写gg函数
#和我们的gg2一样,不管模型,我们绘制单独的校准曲线需要data, p, y 这3个指标,
#就是:数据集,预测概率和结果变量,plot=T的话自动绘图,不然就是生成绘图数据,需要手动绘图。
gg5(bc_train,predicted,bc_train$low,plot=T)

gg5(data=traindata,p=p,y=traindata$default,plot=T)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝1688京东店铺所有商品数据接口(item_search_shop接口系列,可测试)

淘宝、1688和京东都提供了API接口供开发者调用&#xff0c;以获取店铺和商品的详细数据。对于您提到的item_search_shop接口系列&#xff0c;这主要是用于获取店铺所有商品的数据。然而&#xff0c;具体的接口名称和功能可能会因平台而异&#xff0c;且可能随着平台的更新而有所…

IE浏览器清理缓存工具

有些项目可能因为浏览器缓存导致使用异常&#xff0c;比如登陆异常。这里提供清除浏览器痕迹的工具&#xff0c;以IE浏览器为例&#xff0c;痕迹的默认存放位置为&#xff1a; C:\Users\Ro\AppData\Local\Microsoft\Windows\Temporary Internet Files 新建bat或者cmd批处理文件…

关于光模块SFP-10G-SR、SFP-10G-LRM和SFP-10G-LR的对比分析

万兆光模块是万兆网络搭建领域中的重要组成部分&#xff0c;是传输万兆速率必要组件。随着网络速率和容量需求的增加&#xff0c;目前万兆光模块的应用量非常大。而在万兆光模块中&#xff0c;短距离光模块的出货量居首&#xff0c;本文将详细介绍3款短距离万兆光模块SFP-10G-S…

SpringBoot集成Skywalking链路追踪

安装skywaling 参考&#xff1a;Centos7搭建 SkyWalking 单机版-CSDN博客 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 1. 在IDEA中使用skywalking agent 在VM options中填入如下信息 -javaagent后是…

三招轻松拯救:如何恢复删除的微信聊天记录?

“很急&#xff01;&#xff01;&#xff01;之前的聊天记录没了&#xff0c;但对于我来说很重要。聊天记录最久的是一年前&#xff0c;苹果的&#xff0c;如果没有备份数据还能恢复吗&#xff1f;用什么方法&#xff1f;谢谢了。” 微信聊天记录承载着我们的日常交流和重要信…

C中自定义类型——结构体

一.前言 在C语言中&#xff0c;不仅有int、char、short、long等内置类型&#xff0c;C语言还有一种特殊的类型——自定义类型。该类型可以由使用者自己定义&#xff0c;可以解决一些复杂的个体。 二.结构体 2.1结构体的声明 我们在利用结构体的时候一般是用于描述一些有多种…

使用Nodejs + express连接数据库mongoose

文章目录 先创建一个js文档安装 MongoDB 驱动程序&#xff1a;引入 MongoDB 模块&#xff1a;设置数据库连接&#xff1a;新建一个表试试执行数据库操作&#xff1a;关闭数据库连接&#xff1a; 前面需要准备的内容可看前面的文章&#xff1a; Express框架搭建项目 node.js 简单…

Kivy 学习2

from kivy.app import App from kivy.uix.button import Button from kivy.uix.floatlayout import FloatLayout from kivy.graphics import Rectangle, Colorclass FloatLayoutApp(App):def build(self):def update_rect(layout, *args):设置背景尺寸&#xff0c;可忽略layout…

java实现TCP交互

服务器端 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.PriorityQueue; import java.util.Scanner;public class TCP_Serv…

2023年MathorCup数学建模D题航空安全风险分析和飞行技术评估问题解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 D题 航空安全风险分析和飞行技术评估问题 原题再现 飞行安全是民航运输业赖以生存和发展的基础。随着我国民航业的快速发展&#xff0c;针对飞行安全问题的研究显得越来越重要。2022 年 3 月 21 日&#xff0c;“3.21”空难的发生…

Python —— 简述

Houdini Python | 笔记合集 - 知乎 Houdini内置三大语言&#xff1a; 表达式&#xff0c;主要用于节点参数控制&#xff0c;可实现跨模块控制&#xff1b;vex&#xff0c;速度最快&#xff08;比表达式和Python快一个数量级&#xff09;&#xff0c;非常适合密集型计算环境&…

uni-app实现分页--(2)分页加载,首页下拉触底加载更多

业务逻辑如下&#xff1a; api函数升级 定义分页参数类型 组件调用api传参

Pytest精通指南(02)对比Unittest的差异

文章目录 前言用例编写规则不同用例前置与后置条件不同断言功能不同测试报告失败重跑机制参数化用例分类执行Unittest 前后置示例Pytest 前后置示例总结 前言 在Python中&#xff0c;unittest和pytest是两个主流的测试框架&#xff1b; 它们都旨在支持自动化测试、使用断言验证…

AI的尽头真的是能源吗?

引言 近日&#xff0c;英伟达黄仁勋、OpenAI奥特曼等科技界大佬也表达了AI被能源制约的焦虑。 黄仁勋在一次公开演讲中指出&#xff0c;AI未来发展与光伏和储能紧密相连。他强调&#xff0c;不应仅仅关注计算力&#xff0c;而是需要更全面地考虑能源消耗问题。黄仁勋表示&…

PostgreSQL入门到实战-第十七弹

PostgreSQL入门到实战 PostgreSQL表联接(一)官网地址PostgreSQL概述PostgreSQL中Join命令理论更新计划 PostgreSQL表联接(一) 各种PostgreSQL联接&#xff0c;包括内部联接、左侧联接、右侧联接和完全外部联接 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…

亚马逊的核心壁垒:物流

物流为美国电商市场渗透及格局的核心影响因素&#xff0c;也是亚马逊的核心壁垒所在。 从行业规模来看&#xff0c;美国电商渗透率低于中国&#xff0c;主要由于 两国地理及人口密度差异导致美国物流履约难度更大&#xff0c;此外美国更发达的实 体零售业和更为严苛的电商政策…

[Linux][环境变量][进程地址空间]详细解读

目录 1.环境变量1.基本概念2.常见环境变量3.查看环境变量的方法4.测试PATH5.测试HOME6.和环境变量相关的命令7.环境变量的组织方式8.通过代码如何获取环境变量9.通过系统调用获取或设置环境变量10.环境变量通常是具有全局属性 2.进程地址空间0.这里的地址空间&#xff0c;是物理…

【感谢】心怀感恩,共赴知识之旅——致每一位陪伴我突破百万总访问量的您

小伙伴朋友们&#xff1a; 此刻&#xff0c;我怀着无比激动与深深感激的心情&#xff0c;写下这篇特别的博文。今天&#xff0c;我的CSDN总访问量成功突破了百万大关&#xff0c;这不仅是一个数字的跨越&#xff0c;更是你们对我的支持、信任与鼓励的有力见证。在此&#xff0…

CNN家族的族谱!

没有过时的技术&#xff0c;只是看什么样的应用场景&#xff0c;某些场景下&#xff0c;老技术也能焕发光彩&#xff01; 发展历程 CNN思想起源——喵星人的视觉系统 20世纪60年代左右&#xff0c;加拿大神经科学家David H. Hubel和Torsten Wisesel发现了猫的视觉中枢里存在感…

SAP_ABAP_MM_PO审批_队列实践SMQ1

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型-CSDN博客文章浏览阅读1k次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/java_zhong1990/article/det…