8.临床预测模型验证——交叉验证/Bootstrap法

news2024/11/15 14:05:12

基本概念

交叉验证:

将一定比例的数据挑选出来作为训练集,将其余未选中的样本作为测试集,先在训练集中构建模型,再在测试集中做预测。

内部验证:手动将样本随机分为训练集和测试集,先在训练集中构建模型,再在测试集中进行测试。

常用三种方法:

  1. Hold-Out Method 简单交叉验证;
  2. K-fold Cross Validation (K-CV),K折交叉验证;
  3.  Leave-One-Out Cross Validation(LOO-CV),留一法交叉验证,N折交叉验证。

简单交叉验证:

将原始的数据随机分成两组,一组作为训练集,一组作为测试集。

K折交叉验证:

将数据随机分为K个子集,对每个子集分别做一次测试集,其余的K-1组子集数据作为训练集,最终得到K个模型,用K个测试集的平均结果作为K-折交叉验证的性能指标。可以有效避免过度拟合及欠拟合状态的发生,最终得到的结果也比较有说服力。

注意:K一般不小于3

N折交叉验证:

假设原始数据有N个样本,每个样本作为测试集,其余的N-1个样本作为训练集,所以得到N个模型,用N个模型的平均结果作为此留一法交叉验证的性能指标。

相较于K折交叉验证,N折交叉验证的优势:

  1. 每次交叉验证,N-1个样本用于训练模型,接近原始数据分布,结果较为可靠;
  2. 在交叉验证过程中,没有随机因素影响最终结果,结果具有重现性。

外部验证:基于内部数据集建模完成之后,其他独立的研究团队开展的相同研究,其数据集作为外部数据的来源,进行模型的验证。

Bootstrap法

Bootstrap法是非参数统计方法,对样本进行重抽样,从而估计总体特征。优点:可以避免交叉验证造成的样本减少问题,也可以用于创造样本随机性。

优点:数据较小,难以有效划分训练集和测试集时效果显著,能从初始数据集中产生多个不同的训练集。

缺点:产生的数据集改变了初始数据集的分布,引入了估计偏差,因此在初始数据集样本量足够时,交叉验证法更常用

具体实操

二分类资料

案例:肺动脉栓塞风险模型

library(readxl)
data <- read_excel("data.xlsx")
data<-na.omit(data)
data<-as.data.frame(data)
data$group<-factor(data$group,levels = c(0,1),labels = c("No","Yes"))

利用最优子集法筛选出来的自变量,age,BMI,Tos,CA153,CDU,Transfusion,stage构建模型

form.bestglm<-as.formula(group~age+BMI+ToS+CA153+CDU+transfusion+stage)

若无具体的公式,也可以进行循环交叉验证及Bootstrap,确定最优的模型公式:

简单交叉验证

设置验证方法

train.control_1 <- trainControl(method="LGOCV",
                                p=0.7,
                                number = 1)

method=“LGOCV”,leave-group out cross-validation,为简单交叉验证。p指定训练集占的比例,这里为70%,number指定简单交叉次数。

set.seed(1)
LogMod1 <- train(form.bestglm, 
                    data=data, 
                    trControl=train.control_1, 
                    method='glm')

LogMod1

train()函数中formula输入公式,data为数据集,trControl指定相应的交叉算法(为上一步定义好的交叉方法),method指定进行广义线性分析

可以发现共有515个样本,7个预测变量,因变量两个水平,no和yes。训练集占70%,1次重复。准确率达到0.87,Kappa值为0.41。结果尚可

显示ROC的结果

train.control_2 <- trainControl(method="LGOCV",
                                p=0.7,
                                number = 1,
                                classProbs=TRUE,
                                summaryFunction=twoClassSummary)
set.seed(1)
LogMod2 <- train(form.bestglm, 
                    data=data, 
                    trControl=train.control_2, 
                    method='glm')
LogMod2 

 classProbs设置为TRUE,summaryFunction设置为twoClassSummary,表示显示ROC结果。

ROC曲线下面积为0.812,灵敏度为0.976,特异度为0.346

K折交叉验证

train.control_3 <- trainControl(method = "cv", 
                                number = 10)
set.seed(1)
LogMod3 <- train(form.bestglm, 
                    data=data, 
                    trControl=train.control_3, 
                    method='glm')
LogMod3
train.control_4 <- trainControl(method = "cv", 
                                number = 10,
                                classProbs=TRUE,
                                summaryFunction=twoClassSummary)
set.seed(1)
LogMod4 <- train(form.bestglm, 
                 data=data, 
                 trControl=train.control_4, 
                 method='glm')
LogMod4

需要将方法设置为cv,number=10,表示10折交叉验证

N折交叉验证

train.control_5 <- trainControl(method = "LOOCV")
LogMod5 <- train(form.bestglm, 
                 data=data, 
                 trControl=train.control_5, 
                 method="glm")
LogMod5
train.control_6 <- trainControl(method = "LOOCV",
                                classProbs=TRUE,
                                summaryFunction=twoClassSummary)
LogMod6 <- train(form.bestglm, 
                 data=data, 
                 trControl=train.control_6, 
                 method="glm")
LogMod6

LOOCV为留一法交叉验证。

Bootstrap交叉验证

train.control_7 <-trainControl(method = "boot",
                               number=1000)

set.seed(1)
LogMod7 <- train(form.bestglm, 
                    data=data, 
                    trControl=train.control_7, 
                    method="glm")
LogMod7

train.control_8 <-trainControl(method = "boot",
                               number=1000,
                               classProbs=TRUE,
                               summaryFunction=twoClassSummary)


set.seed(1)
LogMod8 <- train(form.bestglm, 
                    data=data, 
                    trControl=train.control_8, 
                    method="glm")
LogMod8

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

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

相关文章

MySQL面试题 | 11.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

vue2 pdfjs-2.8.335-dist pdf文件在线预览功能

1、首先先将 pdfjs-2.8.335-dist 文件夹从网上搜索下载&#xff0c;复制到public文件夹下. 2、在components下新建组件PdfViewer.vue文件 3、在el-upload 中调用 pdf-viewer 组件 4、在el-upload 中的 on-preview方法中加上对应的src路径 internalPreview(file) { //判断需要…

【Python】箱型图和热图绘制详解和示例

箱型图&#xff08;Box Plot&#xff09;和热图&#xff08;Heatmap&#xff09;是两种常用的数据可视化工具&#xff0c;它们各自有着不同的特点和用途。在写总结和文献时对数据的表达更加直观&#xff0c;本文对这两种图像的绘制进行详解和示例。 箱型图由一组数据的最小值、…

中国1981-2023年逐年每15天8km植被指数数据集

摘要 中国1981-2023年逐年每15天8km植被指数数据集来源于GIMMS NDVI数据&#xff0c;包括了1981年7月&#xff0d;2023年12月的长时间序列逐年每15天植被指数变化&#xff0c;格式为arcgis grid格式&#xff0c;投影为WGS84&#xff0c;其时间分辨率是15天&#xff0c;空间分辨…

【机组】算术逻辑运算单元实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a; 一、 实验目的…

Java NIO (二)NIO Buffer类的重要方法

1 allocate()方法 在使用Buffer实例前&#xff0c;我们需要先获取Buffer子类的实例对象&#xff0c;并且分配内存空间。需要获取一个Buffer实例对象时&#xff0c;并不是使用子类的构造器来创建&#xff0c;而是调用子类的allocate()方法。 public class AllocateTest {static…

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…

关于java的封装

关于java的封装 我们在前面的文章中&#xff0c;了解到了类和对象的知识&#xff0c;以及做了创建对象的时候对内存的分析&#xff0c;我们本篇文章来了解一下面向对象的三大基本特征之一&#xff0c;封装&#x1f600;。 一、初识封装 封装就好比&#xff0c;我们把一些物品…

如何在 Python3 中使用变量

介绍 变量是一个重要的编程概念&#xff0c;值得掌握。它们本质上是在程序中用于表示值的符号。 本教程将涵盖一些变量基础知识&#xff0c;以及如何在您创建的 Python 3 程序中最好地使用它们。 理解变量 从技术角度来说&#xff0c;变量是将存储位置分配给与符号名称或标…

YOLOv8改进 | 主干篇 | 低照度增强网络PE-YOLO改进主干(改进暗光条件下的物体检测模型)

一、本文介绍 本文给大家带来的改进机制是低照度图像增强网络PE-YOLO中的PENet,PENet通过拉普拉斯金字塔将图像分解成多个分辨率的组件,增强图像细节和低频信息。它包括一个细节处理模块(DPM),用于通过上下文分支和边缘分支增强图像细节,以及一个低频增强滤波器(LEF),…

<软考高项备考>《论文专题 - 71 风险管理(3)》

3 过程2-识别风险 3.1 问题 4W1H过程做什么是识别单个项目风险以及整体项目风险的来源&#xff0c;并记录风险特征的过程。作用:1、记录现有的单个项目风险&#xff0c;以及整体项目风险的来源:2、汇总相关信息&#xff0c;以便项目团队能够恰当地应对已识别的风险。为什么做…

重温经典struts1之DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 之前我们学习的Action类中&#xff0c;编写一个方法&#xff0c;重写父类的execute方法&#xff0c;接收页面发来的请求&#xff0c;而且&#xff0c;一个action中只能…

Jetson AGX Orin安装archiconda、Pytorch

想在Jetson AGX Orin创建一个虚拟环境&#xff0c;然后安装pytorch&#xff0c;过程中遇到了很多的坑&#xff0c;这篇文章主要用于记录过程~因为Orin本身是Arm架构&#xff0c;X86架构可以装Anaconda&#xff0c;对于ARM要装archiconda。 1.安装archiconda 1.1确定操作系统架…

FlinkSQL【分组聚合-多维分析-性能调优】应用实例分析

FlinkSQL处理如下实时数据需求&#xff1a; 实时聚合不同 类型/账号/发布时间 的各个指标数据&#xff0c;比如&#xff1a;初始化/初始化后删除/初始化后取消/推送/成功/失败 的指标数据。要求实时产出指标数据&#xff0c;数据源是mysql cdc binlog数据。 代码实例 --SET t…

【GCC】6 接收端实现:周期构造RTCP反馈包

基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…

java注释详解

1、Java 中的注释详解 概括&#xff1a;注释是增加一些说明&#xff0c;在编译后&#xff0c;注释会被抹掉&#xff0c;不起任何租用&#xff0c;只在书写代码的时候&#xff0c;对代码进行的一个说明 不管是那种编程语言&#xff0c; 代码的注释都是必备的语法功能&#xff…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

GitLab Runner 实现项目 CI/CD 发布

Gitlab Runner简介 Gitlab实现CICD的方式有很多&#xff0c;比如通过Jenkins&#xff0c;通过Gitlab Runner等&#xff0c;今天主要介绍后者。Gitlab在安装的时候&#xff0c;就默认包含了Gitlab CI的能力&#xff0c;但是该能力只是用于协调作业&#xff0c;并不能真的去执行…

Vulnhub-tr0ll-1

一、信息收集 端口收集 PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.2 | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_-rwxrwxrwx 1 1000 0 8068 Aug 09 2014 lol.pcap [NSE: writeable] | ftp-syst: | STAT: | FTP …

STM32F103标准外设库——GPIO 输入、输出 (五)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…