机器学习系列--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")

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏任务系统实现思路

文章目录 一、需求介绍二、数据库设计3、代码部分实现 一、需求介绍 1、首先任务的类型不同&#xff0c;可以分为&#xff1a;日常任务、成长任务、活动任务等等。 2、当达到任务目标时&#xff0c;自动发放任务奖励。 3、任务需要后台可配置&#xff0c;例如&#xff1a;任务…

深度学习框架Pytorch学习笔记

由于工作原因&#xff0c;需要使用到深度学习pytorch框架&#xff0c;所以&#xff0c;跟随视频学习了深度学习框架的使用方法 1、安装pytorch 在windows下使用pytorch&#xff0c;首先找到anaconda官网&#xff0c;安装64位windows版本&#xff0c;然后使用清华的源替换掉an…

FileZilla的使用及主动模式与被动模式[FileZilla]

目录 一.FileZilla的简介 二.FileZilla的安装及准备工作 三.FileZilla使用 四.主动模式与被动模式 主动模式&#xff08;Active Mode&#xff09;&#xff1a; 被动模式&#xff08;Passive Mode&#xff09;&#xff1a; 如何在FileZilla中选择模式&#xff1a; 今天的到…

C++初阶(类中的默认成员函数)

呀哈喽&#xff0c;我是结衣 今天给大家带来的是类里面的默认成员函数&#xff0c;一共有六个默认的成员函数哦&#xff0c;包括构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;运算符重载函数&#xff0c;const成员函数&#xff0c;那么正篇开始。 文章目…

Qt QAction添加图片

QAction用的时候&#xff0c;时常需要添加图片&#xff0c;如上图所示&#xff0c;代码如下所示&#xff1a; 测试的图片格式包含png,jpg,bmp,svg&#xff0c;其他未测试

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

如何快速通过PMP考试?

2024年的第一次PMP考试时间暂定在3月10日&#xff0c;有备考计划的考生们都在如火如荼的展开备考学习&#xff0c;那么对于一部分工作公交忙抽不出时间来学习的考生来说&#xff0c;能够快速高效的通过PMP考试是身份重要的。 想要快速通过PMP考试需要有的条件最少要满足两个&a…

公司电脑文件防泄密|防止内部终端核心文件数据 \ 资料外泄

PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 为了防止公司电脑文件泄密&#xff0c;可以采取以下措施&#xff1a; 文件加密&#xff1a;对重要文件进行加密是一种有效的防泄密方法。通过使用加密算法&#xff0c;…

在电脑上恢复删除 Word 文档文件的 7 个有效方法

最近遇到系统崩溃不要惊慌&#xff0c;向下滚动以了解克服这种情况的有效解决方案。 在现代社会&#xff0c;数据恢复领域发展令人惊叹&#xff0c;我们可以使用令人难以置信的工具免费恢复已删除的Word文档&#xff0c;而无需任何技术技能。Geekersoft公司的奇客数据恢复是轻…

intellij IDEA开发工具的使用(打开/关闭工程;删除类文件;修改类/包/模块/项目名称;导入/删除模块)

1&#xff0c;打开工程 打开IDEA&#xff0c;会看到如下界面 1栏目里是自己曾经打开过的project&#xff08;工程&#xff09;&#xff0c;直接点击就好。如果需要打开其他工程&#xff0c;则点击open&#xff0c;会出下以下界面。 选择需要加载的project&#xff08;工程&…

2023年终总结:耕辍断续应犹在,碌而不暇仍少年

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

Atlas 2.2.0 安装部署

Apache Atlas 是一套可扩展、可延伸的核心基础治理服务&#xff0c;使企业能够切实有效地满足 Hadoop 中的合规性要求&#xff0c;并允许与整个企业数据生态系统集成。 Apache Atlas 提供开放的元数据管理和治理功能&#xff0c;使企业能够建立数据资产目录&#xff0c;对这些…

【华为机试】2023年真题B卷(python)-冠亚军排名-奖牌榜排名

一、题目 题目描述&#xff1a; 2012伦敦奥运会即将到来&#xff0c;大家都非常关注奖牌榜的情况&#xff0c;现在我们假设奖牌榜的排名规则如下. 1.首先gold medal数量多的排在前面 2.其次silver medal数量多的排在前面 3.然后bronze medal数量多的排在前面 4.若以上三个条…

2024主流的免费电脑数据恢复软件EasyRecovery

EasyRecovery绿色版是一款非常专业的电脑数据恢复工具。它可以全面恢复删除丢失数据&#xff0c;能对电脑误删文件恢复、格式化硬盘数据恢复、手机U盘数据恢复等&#xff0c;能恢复包括文档、表格、图片、音视频等各种文件&#xff0c;此版本经过处理&#xff0c;可永久免费使用…

Unity关于动画混合树(Blend Tree)的使用

在动画与动画的切换过程中&#xff0c;常因为两个动画之间的差距过大&#xff0c;而显得动画的切换很不自然。 这时候就需要动画混合树Blend Tree这个功能。使用混合树可以将多个动画混合在一起&#xff0c;例如在处理角色的移动中&#xff0c;走动画与跑动画切换的时候&#x…

【docker】—— Docker 简介

目录 &#xff08;一&#xff09;容器技术发展史 1、Jail 时代 2、云时代 3、云原生时代 &#xff08;二&#xff09;编排与容器的技术演进之路 1、DockerClient 2、RUNC&Shim 3、CRI-Containerd 4、CRI-O 5、Containerd &#xff08;三&#xff09;Docker 简介…

前后台分离开发

前后台分离开发 简介 前后台分离开发&#xff0c;就是在项目开发过程中&#xff0c;对于前端代码的开发由专门的前端开发人员负责&#xff0c;后端代码则由后端开发人员负责&#xff0c;这样可以做到分工明确、各司其职&#xff0c;提高开发效率&#xff0c;前后端代码并行开…

路在脚下——我的 2023 年终总结

写下这个题目的时候&#xff0c;我刚从外面跑步&#xff08;有积雪&#xff0c;边走边跑&#xff09;近 8 公里回来。一是寻找一下灵感&#xff0c;二是“排解”一下负能量。 今年这个形势&#xff0c;实话说大家都挺不容易的。但是&#xff0c;正如本山大叔所说&#xff0c;“…

Python中如何使用_new_实现单例模式

单例模式是一个经典设计模式&#xff0c;简要的说&#xff0c;一个类的单例模式就是它只能被实例化一次&#xff0c;实例变量在第一次实例化时就已经固定。 在Python中常见的单例模式有None&#xff0c;这就是一个很典型的设计&#xff0c;通常使用 if xxx is None或者if xxx …

【HarmonyOS】鸿蒙开发简介与项目基础配置演示

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…