利用重抽样获取mgcv包的广义可加模型函数曲线的可信区间(3)
自采样目前广泛应用与统计学中,其原理很简单就是通过自身原始数据抽取一定量的样本(也就是取子集),通过对抽取的样本进行统计学分析,然后继续重新抽取样本进行分析,不断的重复这一过程N(大于500次以上)次,然后得到N个统计结果,然后进行区间分析,得到最终结果。
上一章我们介绍了BOOT重抽样获取C指数的可信区间,今天我们来介绍利用sample函数重抽样获取广义可加模型函数曲线的可信区间,这可是一个非常实用的技能,假设我们想了解某连续变量和结果之间的关系,可以使用mgcv包获得两者之间的曲线关系,但是mgcv不能做出95%可信区间,我们可以通过重抽样获取其可信区间。这可是很多的付费课程,付费软件的功能哦。
废话不多说了,我们先导入R包和数据
library(mgcv)
library(data.table)
library(ggplot2)
ac2<-read.csv("E:/r/test/xiyan.csv",sep=',',header=TRUE)
这是一个很简单的数据(公众号回复:吸烟数据,可以获得数据),age_w1是吸烟患者的年龄,cursmoke为患者是否吸烟。假设我们想了解年龄和吸烟状态存在的非线性关联。
建立模型
mgam.lr1<-gam(cursmoke~s(age_w1,k=3),family = binomial(link = "logit"),data = ac2)
summary(mgam.lr1)
P小于0.05表明存在非线性关系,绘图
plot(mgam.lr1,se=T)
该图表示年龄小的时候,吸烟状态变化很小,超过60岁以后变化很快,这样看不是很好理解,我们把它改成吸烟概率更加好理解,我们新建一个数据,把结果装进来
newdat<-as.data.table(expand.grid(age_w1=seq(from=min(ac2$age_w1,na.rm = T),to=max(ac2$age_w1,na.rm = T),
length.out = 1000)))
新建好数据后,在新数据上生成预测概率
newdat$yhat<-predict(mgam.lr1,newdata=newdat,type="response")
绘图
ggplot(newdat,aes(age_w1,yhat))+geom_line()+xlab("year")+ylab("吸烟概率")
上图可知,随着患者年龄增加,吸烟概率降低,有不少粉丝问我,怎么把Y轴改成百分比显示,下面我们来改一下
ggplot(newdat,aes(age_w1,yhat))+geom_line()+scale_y_continuous(labels = scales::percent)+xlab("year")+ylab("吸烟概率")+coord_cartesian(xlim = range(newdat$age_w1),ylim = c(0,.4),expand = F)
OK,已经改好了,60岁的时候30%的吸烟概率,到了80岁只有10%了,接下来我们进行重抽样获取可信区间,我们打算重抽样500次,先建立一个空矩阵
nboot<-500
out<-matrix(NA_real_,ncol = nboot,nrow =nrow(newdat))
建立好以后就可以重抽样了,为了可重复,要设一个种子
set.seed(12345)
建立循环重抽样
这个过程有点费电脑,时间根据你的电脑速度来定,最近读了张敬信老师的向量化编程,深有启发,到时试试能不能用向量化编程来实现。
数据很大,上图只是一部分,求出数据后,剩下的就简单多了,我们看一下我们采样值和系统预测值是否存在偏差
mean(abs(newdat$yhat-rowMeans(out)))
由此可知偏差非常小,接下来就是生成可信区间数据
最后绘图
OK,到此全部完成,但是后台很多人私信问我BOOT重抽样怎么进行内部验证,看了今天内容应该就会了吧。留个问题给大家想想,假如我们用BOOT重抽样,上面的图应该怎么做?
原创不易,需要文章全部代码的朋友,请把本文章转发朋友圈集10个赞,截图发给我,嫌麻烦的也可以在这里下载:https://download.csdn.net/download/dege857/85404235
OK,本章内容结束,觉得有用的话请多多分享哟。
利用重抽样获取mgcv包的广义可加模型函数曲线的可信区间(3)相关推荐
- 利用广义可加模型对分类数据进行曲线拟合
收到粉丝投稿要求我做个这样的图,来自于2017年发表在Eur Urol期刊(SCI IF=17.9分).The Impact of Local Treatment on Overall Surviva ...
- R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间(2)
bootstrap自采样目前广泛应用与统计学中,其原理很简单就是通过自身原始数据抽取一定量的样本(也就是取子集),通过对抽取的样本进行统计学分析,然后继续重新抽取样本进行分析,不断的重复这一过程N(大 ...
- 统计学习导论_统计学习导论 | 读书笔记15 | 广义可加模型
ISLR 7.7 广义可加模型 要点: 0.广义可加模型介绍 1.用于回归问题的GAM -- 多元线性回归的推广 2.用于分类问题的GAM -- 逻辑回归的推广 3.GAM的优点与不足 0. Gene ...
- Unity中利用C#语言控制Line Renderer绘制自己想要的函数曲线
利用Line Renderer组件绘制自己想要的函数曲线 前言 首先声明我是一名Unity爱好者,目前小白,把最近研究的记录下来,方便以后参考,有不足 支撑希望大家共同探讨. unity版本为2017 ...
- 广义可加模型GAM在python上的复现
转自: 比较新的一篇GAM在python上的简易复现 https://blog.csdn.net/qq_41103204/article/details/104679779 目录 1 安装pyGAM ...
- R语言mgcv包时间序列分析在空气污染与健康领域的应用(3)---模型自由度选择
广 义 相 加 模 型 ( generalized additional model,GAM)是对传统广义线性模型的非参数拓展,可有效处理解释变量与效应变量间复杂的非线性关系.GAM 目前已广泛应用于 ...
- R语言mgcv包时间序列分析在空气污染与健康领域的应用(1)
在空气污染与健康研究领域,经常需要用时间序列方法将随时间变化的污染物暴露资料和随时间变化的事件发生数资料联系起来,分析人群健康结局与暴露水平之间的关系. 时间序列分析是根据系统观测得到的时间序列数据, ...
- ❤️解决非线性回归问题的机器学习方法总结:多项式线性模型、广义线性(GAM)模型、回归树模型、支持向量回归(SVR)模型
文章目录 前言 多项式回归模型 概念解释: sklearn实现多项式回归模型: 广义线性可加(GAM)模型 概念解释: pygam实现广义线性可加模型: GAM模型的优点与不足: 回归树模型 概念解释 ...
- R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理、使用ggplot2可视化预测值和实际值的曲线进行对比分析
R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理.使用ggplot2可视化预测值和实际值的曲线进行对比分析 目录
- R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)
R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function) 目录
最新文章
- “评IDC,送免费主机”活动,主机无任何限制,无广告
- 工业电脑中PCI、CPCI、PXI插槽的区别
- 计算机里的音乐都是什么名字,PAPI
- openLDAP的编译安装以及配置
- 九度 题目1548:平面上的点
- C# 8.0的三个令人兴奋的新特性 1
- 解决微服务在docker上部署后无法连接数据库的问题
- 爬虫爬评书吧_200行代码实现一个有声听书网爬虫下载器
- nginx1.8.1反向代理、负载均衡功能的实现
- win10 + bazel-0.20.0 + tensorflow-1.13.1 编译tensorflow GPU版本的C++库
- linux日常检查,Linux日常检查的shell
- 数据库IO性能知识整理
- LINUX服务器安全加固方法整理
- matlab功率放大器,基于MATLAB的C类功率放大器设计
- SpringBoot整合WebSocket案例
- HackMyvm(六)Noob持续更新
- BIOS和EFI启动过程
- [大赛推荐]短视频开发大赛,万元现金大奖等你来拿
- 桌面上的计算机图片怎么复制,电脑桌面上怎么截图呢??请问如何在电脑屏幕上截屏?...
- 小猪的猪栏文章类目导航