机器学习系列--R语言随机森林进行生存分析(1)

随机森林(Breiman 2001a)(RF)是一种非参数统计方法,需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术,通过拟合一组树来稳定预测精度模型估计。随机生存森林(RSF)(Ishwaran和Kogalur,2007;Ishwaraan,Kogalur、Blackstone和Lauer(2008)是Breimans射频技术的延伸从而降低了对时间到事件数据的有效非参数分析。
在这里插入图片描述
R语言随机森林进行生存分析需要使用到randomForestSRC包,是对Breimans随机森林的统一处理用于生存、回归和分类问题。randomForestSRC包还有一个用于做图的ggRandomForests包,搭配使用,今天咱们来介绍一下怎么使用randomForestSRC包进行随机森林生存分析,内容有点多,咱们分2章来介绍。
咱们先导入数据和R包

library(ggRandomForests)
library(randomForestSRC)
library(ggplot2)
library("dplyr")
pbc<-read.csv("E:/r/test/pbc2.csv",sep=',',header=TRUE)

在这里插入图片描述
这是一个胆管炎数据(公众号回复:胆管炎数据2,可以获得数据),years:生存时间,status:结局指标,是否死亡,treatment是否DPCA治疗,age年龄,sex性别,ascites是否有腹水,hepatom是否有肝肿大,spiders是否有蜘蛛痣,edema水肿的级别,bili胆红素,chol胆固醇,albumin白蛋白,copper尿酮,alk碱性磷酸酶,sgot:SGOT评分,trig甘油三酯,platelet血小板,prothrombin凝血酶时间,stage组织学分型
我们对数据处理一下,把treatment这个变量变成因子

pbc$treatment<-factor(pbc$treatment)

接下来咱们把数据分成两组,有treatment数据的为测试组,treatment数据缺失的为对照组。

pbc.trial <- pbc %>% filter(!is.na(treatment))
pbc.test <- pbc %>% filter(is.na(treatment))

我们先用生存分析做一遍,等下可以和随机森林进行比较,接下来我们用gg_survival对测试组生成生存分析的数据,这个函数挺方便使用的,生成了生存分析的详尽数据

gg_dta <-gg_survival(interval = "years",censor = "status",by = "treatment",data = pbc.trial,conf.int = 0.95)

在这里插入图片描述
绘图

plot(gg_dta) +labs(y = "Survival Probability", x = "Observation Time (years)",color = "Treatment", fill = "Treatment") +theme(legend.position = c(0.2, 0.2)) +coord_cartesian(y = c(0, 1.01))

在这里插入图片描述
或者绘制成这种累积风险图

plot(gg_dta, type = "cum_haz") +labs(y = "Cumulative Hazard", x = "Observation Time (years)",color = "Treatment", fill = "Treatment") +theme(legend.position = c(0.2, 0.8)) +coord_cartesian(ylim = c(-0.02, 1.22))

在这里插入图片描述
咱们还可以进行断点分层分析,假如咱们对bili这个指标分层4个层(0, 0.8, 1.3, 3.4, 29)

pbc.bili <- pbc.trial
pbc.bili$bili_grp <- cut(pbc.bili$bili, breaks = c(0, 0.8, 1.3, 3.4, 29))
plot(gg_survival(interval = "years", censor = "status", by = "bili_grp",data = pbc.bili), error = "none") +labs(y = "Survival Probability", x = "Observation Time (years)",color = "Bilirubin")

在这里插入图片描述
接下来咱们进行随机森林的生存分析,nsplit定义的是随机拆分数,一般默认10次,na.action这里如果选择na.impute就是对缺失数据进行插补,如果选择na.omit就是对缺失数据删除,importance = TRUE这里会计算重要的变量并且进行排序

rfsrc_pbc <- rfsrc(Surv(years, status) ~ ., data = pbc.trial,nsplit = 10, na.action = "na.impute",tree.err = TRUE,importance = TRUE)

查看下基本信息,默认ntree是1000颗数,No. of variables tried at each split: 5这里表示每次都随机取5个变量用于截点。在每个节点,当终端节点包含三个或更少的观测值时停止。Rfsrc函数采用了一个随机logrank分割规则,该规则从nsplit=10中随机选择分割点值。

rfsrc_pbc

在这里插入图片描述
程序选择63.2%的样本做估计,剩余36.8%作为袋外数据(OOB)用于测试。gg_error函数对随机林(rfsrc_pbc)对象进行操作以提取错误作为森林中树木数量的函数的估计。

plot(gg_error(rfsrc_pbc))

在这里插入图片描述
我们可以看到100颗数后,误差已经很稳定了。gg_rfsrc函数可以提取随机森林中袋外数据(OOB)的估计值

out<- gg_rfsrc(rfsrc_pbc)

在这里插入图片描述
进一步绘图

ggRFsrc <- plot(gg_rfsrc(rfsrc_pbc), alpha = 0.2) +theme(legend.position = "none") +labs(y = "Survival Probability", x = "Time (years)") +coord_cartesian(ylim = c(-0.01, 1.01))
ggRFsrc

在这里插入图片描述
对治疗组和未治疗组进行分类绘图

plot(gg_rfsrc(rfsrc_pbc, by = "treatment")) +theme(legend.position = c(0.2, 0.2)) +labs(y = "Survival Probability", x = "Time (years)") +coord_cartesian(ylim = c(-0.01, 1.01))

在这里插入图片描述
使用验证组就行数据评估

rfsrc_pbc_test <- predict(rfsrc_pbc, newdata = pbc.test,na.action = "na.impute",importance = TRUE)

绘图

plot(gg_rfsrc(rfsrc_pbc_test), alpha=.2) +#scale_color_manual(values = strCol) +theme(legend.position = "none") +labs(y = "Survival Probability", x = "Time (years)") +coord_cartesian(ylim = c(-0.01, 1.01))

在这里插入图片描述
因为咱们选的是treatment缺失的为验证集,这里就不能分组了。
随机林不是一种简约方法,而是使用数据集中所有可用的变量以构建响应预测器。此外,与参数模型不同,随机森林不会要求明确说明协变量对响应的函数形式。因此对于随机森林模型的变量选择,没有明确的p值/显著性检验。相反,RF通过分割规则确定哪些变量对预测有贡献优化,最佳选择分离观察的变量。
下面来做变量的重要性,VIMP方法使用一种预测误差方法,包括依次对每个变量进行“noising-up”。 由于VIMP是排列前后OOB预测误差的差异VIMP值表示错误指定会降低森林中的预测准确性。VIMP接近零表示该变量对预测准确性没有任何贡献,并且负值表示当变量被错误指定时预测精度提高。

plot(gg_vimp(rfsrc_pbc)) +theme(legend.position = c(0.8, 0.2)) +labs(fill = "VIMP > 0")

在这里插入图片描述
本期先介绍到这里,未完待续。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS之元素转换

我想大家在写代码时有一个疑问&#xff0c;块级元素可以转换成其他元素吗&#xff1f; 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display&#xff1a;block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下&#xff1a; <!DO…

Blender:从新手到专家的全方位指南

Blender&#xff0c;这款强大的开源3D建模和渲染软件&#xff0c;已经成为了CG行业的标准工具之一。它不仅拥有丰富的教程资源&#xff0c;而且还在不断发展和完善中。尽管Blender的教程主要集中在国外网站和YouTube上&#xff0c;但其全面的功能和易用性使它成为许多人的首选工…

springcloud微服务篇--6.网关Gateway

一、为什么需要网关&#xff1f; 网关功能&#xff1a; 身份认证和权限校验 服务路由、负载均衡 请求限流 在SpringCloud中网关的实现包括两种&#xff1a; gateway zuul Zuul是基于Servlet的实现&#xff0c;属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的Web…

初始Java

前言&#xff1a; 从今天开始&#xff0c;我们就进入Java的学习了&#xff0c;前期有很多语法是和C语言相同的&#xff0c;所以有些细节肯能会跳过&#xff08;希望各位有一门语言基础&#xff0c;最好是C&#xff09;。 配置环境变量&#xff1a; 在使用Java编译之前&#xf…

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前&#xff0c;我们需要先用ffmpeg连接到rtmp服…

副业类小报童热门专栏TOP15

今天介绍15个副业小报童&#xff0c;可以说是当前小报童平台&#xff0c;副业类专栏的天花板内容了 这些专栏&#xff0c;都有免费内容可以查看&#xff0c;而且还是3天无理由退款的&#xff0c;完全可以尝试着订阅一波 关键单价都非常亲民&#xff0c;怎么都不亏&#xff01…

蓝桥杯嵌入式KEY

1.按键原理图 2.按键GPIO引脚设置成输入&#xff0c;上拉模式 3.设置TIM4时钟源为外部时钟源 PSC为80-1 Period为10000-1 打开NVIC 中断时间为10ms 4.在bsp文件中添加interrupt.c文件 5.按键单击代码 6.长按键 7.按键过程和显示过程

2024新年快乐烟花代码

一、前言 很快就是2024年了&#xff0c;让我们好好告别2023&#xff0c;迎接2024。 凡是过往皆是序章&#xff0c;所有未来皆为可盼。在2023年里也许你踏足山藏&#xff0c;拥有花的铺簧书的风光&#xff0c;也许你进入低谷&#xff0c;经历了一个人的兵荒马乱。但没关系&…

第二部分 离散型随机变量

目录 求分布律里的未知数 例1 例2 根据X的分布律写Y的分布律 例3 根据(X,Y)的分布律写Z的分布律 例4 根据(X,Y)的分布律写边缘分布律 例5 X与Y相互独立时的联合分布律 例6 根据分布律求期望、方差 例7 求分布律里的未知数 例1 已知X的分布律为 X-202P0.40.3k ,试求k 解 0.40…

Linux 安装 mysql【使用yum源进行安装】

配置yum 源 首先&#xff0c;去到mysql网站&#xff0c;找到它的rpm的资源包 “mysql80-community-release-el9-5.noarch.rpm” 我们将其下载下来&#xff0c;然后配置yum源&#xff08;下面两种方式二选一即可&#xff09; ① 使用xftp传输&#xff0c;然后配置yum源 rpm …

【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 敏捷开发&#xff08;Agile Development&#xff09; 详细介绍&#xff1a; 优缺点&#xff1a; 优点&#xf…

OSG 关于MVPW变换

目录 1、模型 Model 2、观察矩阵 ViewMatrix 4、窗口矩阵变化 5、总结 在osg中观察矩阵接口设置如下: 其中eye是相机的世界坐标位置,center是相机观察的位置,up是相机向上向量。 在计算机的三维世界中&#xff0c;相机如同我们的眼睛&#xff0c;捕捉眼前的每一副画面&#xff…