医学大数据|R|竞争风险模型:可视化与图像优化

前情回顾:

医学大数据|R|竞争风险模型:基础、R操作与结果解读-CSDN博客

代码复习,但是大家可见得知道图画的比较丑。

library("survival")
library("cmprsk")
library("mgus2")
data(mgus2)
#预处理
mgus2<-as.data.frame(mgus2)
data<-as.data.frame(mgus2)

mgus2$etime <- with(mgus2, ifelse(pstat==0, futime, ptime))  #当pstat==0时,etime=futime,否则etime=ptime 
#实际上这个地方,etime当发生竞争事件的时候,比如发生死亡,那么etime等于0-死亡时间
#当没有发生竞争事件的时候,etime等于0-跌落时间

mgus2$event <- with(mgus2, ifelse(pstat==0, 2*death, 1)) #当pstat==0时,event=2*death ,否则event=1
# 0 1 2 labels分别对应("censor", "pcm", "death")
event <- factor(event, 0:2)
单因素分析(cuminc)
cumic1<- cuminc(etime,event)


plot(cumic1,xlab = 'Month', ylab = '单因素的Fine-Gray检验',lwd=2,lty=1,
     col = c('red','blue'))
     
legend(0,800,
       c("PCM","death"))
print(cumic1)
cumic2<- cuminc(etime,event,mgus2$sex)
print(cumic2)
plot(cumic2,xlab = 'Month', ylab = '单因素的Fine-Gray检验',lwd=2,lty=1,
     col = c('red','blue','black','forestgreen'))


#多因素分析
dt<-na.omit(mgus2)
dt<-as.data.frame(dt)
cov <- data.frame(age = dt$age,
                  sex = ifelse(dt$sex=='M',1,0), ## 设置哑变量
                  hgb = dt$hgb) 
##构建多因素的竞争风险模型。此处需要指定failcode=1, cencode=0,
#分别代表结局事件赋值1与截尾赋值0,其他赋值默认为竞争风险事件2。

fit<- cuminc(dt$etime,dt$event,dt$sex)
summary(dt)
crr<-crr(dt$etime, dt$event, cov, failcode=1, cencode=0)
print(crr)
 

所以我们接下来进一步优化。

在上述的基础上,我们知道我们完成了结果呈现,我们可以从得出单因素结果开始,

把结果的数值导出

event <- data.frame(event_time = cumic1[[1]][[1]], event_c = cumic1[[1]][[2]])
death <- data.frame(death_time = cumic1[[2]][[1]], death_C = cumic1[[2]][[2]])

怎么选择x和y的画布的最小值和最大值呢,可以用summay或者table中的描述性统计的结果

table(event$event_time)

table(event$event_time)

结果如下:

0   2   4   5   6   8   9  10  11  12  13  14  16  17  21  22  23  29  30  33  34  35  36 
  1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2 
 38  39  42  44  45  51  52  56  57  60  61  62  63  67  69  70  73  74  76  79  80  81  83 
  2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2 
 84  86  90  91  93  97  98 101 102 109 111 114 116 118 121 123 124 128 135 138 142 147 150 
  2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2 
152 153 158 161 165 166 168 179 180 188 190 198 201 228 238 259 275 312 340 373 424 
  2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   1 

你会发现最大值为424,所以我们x最大值选择450k爱是

发现最大结果为0.16和0.8,因此我们选择最大的结果为0.8387

开始画原始的图

p1<-ggplot(event, aes(event_time, event_c)) +
  geom_line(color = "#ff4e00", linewidth = 0.7) +
  scale_color_manual(values = "#440154FF") +
  labs(x = "time", y = "单因素的Fine-Gray检验") +
  scale_y_continuous(limits = c(0,1),expand = c(0,0))+
  scale_x_continuous(limits = c(0,450),expand = c(0,0))+
  theme_bw() +
  theme(legend.position = "top")
print(p1)

summary(death$death_C)
p2<-ggplot(death, aes(death_time, death_C)) +
  geom_line(color = "#440154FF", linewidth = 0.7) +
  scale_color_manual(values = "#440154FF") +
  labs(x = "time", y = "单因素的Fine-Gray检验") +
  scale_y_continuous(limits = c(0,1),expand = c(0,0))+
  scale_x_continuous(limits = c(0,450),expand = c(0,0))+
  theme_bw() +
  theme(panel.background = element_rect(fill = NA),#去除背景这一步很关键,否则后续合并图像会导致背景覆盖不显示
        legend.position = "top")
print(p2)

首先我们要把这两张图画出来

print(p1)

print(p2)

1.假如你想画在两侧

cowplot::plot_grid(p1,p2,ncol = 2)

结果如下

2》我是想画在同一个画面里

##分别获取基于ggplot绘制的两张图象

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
pos <- c(subset(g1$layout, name == "panel", select = t:r))
library(gtable) # Arrange 'Grobs' in Tables
library(grid) # The Grid Graphics Package
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], 
                            pos$t, pos$l, pos$b, pos$l)
plot(g)

结果如下:

最后再进行美化就好了

整体代码复习如下:

rm(cumic)
library("survival")
library("cmprsk")
library("mgus2")
data(mgus2)
#预处理
mgus2<-as.data.frame(mgus2)
data<-as.data.frame(mgus2)

mgus2$etime <- with(mgus2, ifelse(pstat==0, futime, ptime))  #当pstat==0时,etime=futime,否则etime=ptime 
#实际上这个地方,etime当发生竞争事件的时候,比如发生死亡,那么etime等于0-死亡时间
#当没有发生竞争事件的时候,etime等于0-跌落时间

mgus2$event <- with(mgus2, ifelse(pstat==0, 2*death, 1)) #当pstat==0时,event=2*death ,否则event=1
# 0 1 2 labels分别对应("censor", "pcm", "death")
event <- factor(event, 0:2)
单因素分析(cuminc)
cumic1<- cuminc(etime,event)
plot(cumic1,xlab = 'Month', ylab = '单因素的Fine-Gray检验',lwd=2,lty=1,
     col = c('red','blue'))


event <- data.frame(event_time = cumic1[[1]][[1]], event_c = cumic1[[1]][[2]])
death <- data.frame(death_time = cumic1[[2]][[1]], death_C = cumic1[[2]][[2]])

table(event$event_time)
summary(event$event_c)

p1<-ggplot(event, aes(event_time, event_c)) +
  geom_line(color = "#ff4e00", linewidth = 0.7) +
  scale_color_manual(values = "#440154FF") +
  labs(x = "time", y = "单因素的Fine-Gray检验") +
  scale_y_continuous(limits = c(0,1),expand = c(0,0))+
  scale_x_continuous(limits = c(0,450),expand = c(0,0))+
  theme_bw() +
  theme(legend.position = "top")
print(p1)

summary(death$death_C)
p2<-ggplot(death, aes(death_time, death_C)) +
  geom_line(color = "#440154FF", linewidth = 0.7) +
  scale_color_manual(values = "#440154FF") +
  labs(x = "time", y = "单因素的Fine-Gray检验") +
  scale_y_continuous(limits = c(0,1),expand = c(0,0))+
  scale_x_continuous(limits = c(0,450),expand = c(0,0))+
  theme_bw() +
  theme(panel.background = element_rect(fill = NA),#去除背景这一步很关键,否则后续合并图像会导致背景覆盖不显示
        legend.position = "top")
print(p2)

cowplot::plot_grid(p1,p2,ncol = 2)


##分别获取基于ggplot绘制的两张图象
g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
pos <- c(subset(g1$layout, name == "panel", select = t:r))
library(gtable) # Arrange 'Grobs' in Tables
library(grid) # The Grid Graphics Package
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], 
                            pos$t, pos$l, pos$b, pos$l)
plot(g)








责任编辑:医学大数据刘刘老师:头部医疗大数据公司医学科学部研究员

邮箱:897282268@qq.com

久菜盒子工作室 我们是:985硕博/美国全奖doctor/计算机7年产品负责人/医学大数据公司医学研究员/SCI一区2篇/Nature子刊一篇/中文二区核心一篇/都是我们

主要领域:医学大数据分析/经管数据分析/金融模型/统计数理基础/统计学/卫生经济学/流行与统计学/

擅长软件:R/python/stata/spss/matlab/mySQL

团队理念:从零开始,让每一个人都得到优质的科研教育

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

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

相关文章

无法访问云服务器上部署的Docker容器(二)

说明&#xff1a;记录一次使用公网IP 接口地址无法访问阿里云服务接口的问题&#xff1b; 描述 最近&#xff0c;我使用Docker部署了jeecg-boot项目&#xff0c;部署过程都没有问题&#xff0c;也没有错误信息。部署完成后&#xff0c;通过下面的地址访问后端Swagger接口文档…

设计模式(二)单例模式

单例模式&#xff1a;确保一个类只有一个实例&#xff0c;并提供了全局访问点&#xff1b;主要是用于控制共享资源的访问&#xff1b; 单例模式的实现分为懒汉式和饿汉式。 懒汉式单例在需要时才会创建&#xff0c;而饿汉式单例则在类加载时立即创建实例&#xff1b; 单例模…

Web APIs知识点讲解(阶段二)

DOM-事件基础 一.事件 1.事件 目标&#xff1a;能够给 DOM元素添加事件监听 事件:事件是在编程时系统内发生的动作或者发生的事情&#xff0c;比如用户在网页上单击一个按钮 事件监听:就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函…

Adobe推出AI音乐创作工具原型;大型语言模型对编程的影响有限?

&#x1f989; AI新闻 &#x1f680; Adobe推出AI音乐创作工具原型 摘要&#xff1a;Adobe在布鲁克林的Hot Pod峰会上发布了一款名为“Project Music GenAI Control”的AI音乐创作工具原型。这款工具通过生成式人工智能技术&#xff0c;使用户可以无需专业的音频制作经验就能…

使用Node.js构建一个简单的聊天机器人

当谈到人工智能&#xff0c;我们往往会想到什么&#xff1f;是智能语音助手、自动回复机器人等。在前端开发领域中&#xff0c;我们也可以利用Node.js来构建一个简单而有趣的聊天机器人。本文将带你一步步实现一个基于Node.js的聊天机器人&#xff0c;并了解其工作原理。 首先…

tcp的三次握手和四次挥手?

一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端发起&#xff…

Docker容器(3)单容器管理

一、单容器 1.1概念简介 Docker三个重要概念: 仓库(Repository); 镜像(Image); 容器(Container). *Docker的三个重要概念是仓库(Repository)、镜像(Image)和容器(Container)**。具体如下&#xff1a; **镜像(Image)**&#xff1a;Docker镜像是创建容器的基础&#xff0c;它类似…

网络传输基本流程(封装,解包)+图解(同层直接通信的证明),报头分离问题,协议定位问题,协议多路复用

目录 网络传输基本流程 引入 封装 过程梳理 图解 报文 解包 过程梳理 图解 -- 同层直接通信的证明 总结 解包时的报头分离问题 举例 -- 倒水 介绍 自底向上传输时的协议定位问题 介绍 解决方法 协议多路复用 介绍 优势 网络传输基本流程 引入 首先,我们明确…

热榜排行爬虫详解

作为一个爬虫必须摸不一样的鱼&#xff0c;平时大家怎么看热榜&#xff0c;今天爬一个热榜数据&#xff0c;咱就在ied中读热榜。还是一个乌龙事件听我细细道来。 1&#xff0c;话不多说&#xff0c;今天图也不看了直接进入主题&#xff0c;打开网站首页抓个包 2&#xff0c;可…

MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实

2月26日&#xff0c;在MWC 2024世界移动通信大会上&#xff0c;美格智能正式宣布推出5G-A模组SRM817WE以及全新的5G-A FWA解决方案&#xff0c;包含5G-A CPE解决方案SRT858M、5G-A MiFi解决方案SRT878H和5G-A ODU解决方案SRT853MX&#xff0c;旨在进一步提升网络性能&#xff0…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目&#xff1a; MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接&#xff1a; https://arxiv.org/abs/2401.04081 代码仓库&#xff1a; GitHub - llm-random/llm-random 作为大型语言模型&#xff08;LLM&#xff09;基础架构的后…

Docker+Kafka+Kafka-ui安装与配置

前言 Docker、Kafka都是开发中常用到的组件。在自己的第三台电脑上去安装这些…所以写个博客记录一下安装过程。本文主要内容&#xff1a;Docker安装、kafka安装、kafka可视化配置。这次的电脑环境是Windows11&#xff0c;Intel处理器。 Docker安装 https://www.docker.com/p…

Nginx 解析漏洞复现

环境搭建 下载之后上传到虚拟机并解压 进入这个路径 (root?kali)-[~/vulhub-master/nginx/nginx_parsing_vulnerability]就能看到有docker-compose.yml 启动环境 正常显示 增加/.php后缀&#xff0c;被解析成PHP文件&#xff1a; 漏洞原因&#xff1a;开启了cgi.fix_pathin…

【Mysql】Navicat数据库勿删了mysql.infoschema@localhost,导致打不开数据库,如何修改

运行报错如下&#xff1a; 1449 . The user specified as a definer (mysql.infoschemaocalhost) does not exist该方法不需要重启mysql&#xff0c;或者重装&#xff1b;仅需要恢复删除的mysql.infoschemalocalhost用户 一、登录建立用户 mysql -uroot -pxxxxxx密码二、建立…

有哪些手机与电脑可以同步的简单好用笔记软件?

在我的日常工作、学习和生活中&#xff0c;笔记软件是我不可或缺的助手。无论是会议要点的记录、学习笔记的整理、还是日常生活的备忘录&#xff0c;一款好用笔记软件都能让这些信息井然有序&#xff0c;随时可查。特别是在忙碌的工作日&#xff0c;能够在电脑上整理工作笔记&a…

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中&#xff0c;我们需要判断某篇文章是否属于某个分类目录&#xff0c;或者是否拥有某个标签&#xff0c;那么就需要用到分类目录ID和标签ID&#xff0c;那么WordPress分类目录ID怎么看&#xff1f;如何查找WordPress标签ID&#xff1f;下面boke112百科就跟大家…

Linux(CentOS)学习

一、认识Linux 1、如何修改Linux时区 2、配置固定IP 3、重启网络服务 3、小技巧快捷键 4、环境变量设置 5、Linux文件的上传和下载 6、压缩和解压 二、基础命令 1、目录命令 (1、)查看目录内容&#xff08;ls&#xff09; 1、ls //查看当前目录内容 2、- a //显示隐藏内容 3…

亿道信息新三防平板EM-I10J,性能和价格成最大亮点

亿道信息近期推出了一款新三防平板电脑名为EM-I10J&#xff0c;这款设备上市的初衷是为了在满足客户作业需求的同时为其提供更合适的价格选择&#xff0c;但这并不意味着EM-I10J的实力可以被小觑。 外观上I10J与之前的I10U并无不同之处&#xff0c;同样是10.1英寸高清电容式触…

【go从入门到精通】什么是go?为什么要选择go?

go的出生&#xff1a; go语言&#xff08;或Golang&#xff09;是Google开发的开源编程语言&#xff0c;诞生于2006年1月2日下午15点4分5秒&#xff0c;于2009年11月开源&#xff0c;2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势&#xff0c;Go语言从底层原生支持…

基于springboot+vue的医院资源管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…