bioinfoer

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

360

主题
发表于 昨天 09:35 | 查看: 4| 回复: 1

背景

用R代码画出文章PMID: 21606424里的图。

使用场景

根据肿瘤大小分组,以存活时间作为输入,计算死亡率。

展示死亡率与肿瘤大小的关系。

还可以用来展示转移率与肿瘤大小的关系。

输入数据及处理

x = read.csv("easy_input.csv")
head(x)
## 第一列Survival里的1为死亡事件,其它当一类处理,你可以按照实现的标记灵活处理一下。

x前几行如下:

## 第二列Time的时间单位是月,5年即60个月。
## 5年之后死的,5年内是活的,把超过5年之后死的改为活的。
x$Survival[x$Survival == 1 & x$Time > 60 ] = 0
head(x)

## 或者按步长为2切,然后group_by,用这个group变量,画图Tumor.size改成这个group,就可以是按照2mm来算了,要多少mm算一组都可以。
#x$group = cut(x$Tumor.size, seq(0, 50, 2), seq(0, 50-1, 2) + 1) %>% as.character %>% as.numeric

## 按照Tumor size切分,计算死亡率,及0.95的置信区间
require(dplyr)
y <- group_by(x, Tumor.size) %>%
  summarize(ratio = mean(Survival == 1),
            int95 = qt(0.975, length(Survival)-1) * sd(Survival==1)/sqrt(length(Survival))) 
head(y)

y前几行如下:

开始画图

require(ggplot2)

p1 <-ggplot(y, aes(Tumor.size, ratio)) +
     geom_ribbon(aes(ymin=ratio-int95, ymax=ratio+int95), fill="grey") + 
     geom_line() + xlab("Tumor Size (mm)") +
     ylab("5-Year XXX Mortality") + theme_minimal()
p1

这个图不够平滑,因为Tumor.size是正整数的,都是离散点。

可以使用Local Regression,也就是LOESS来处理,使之平滑。

#可以试着更改一下span参数,指定多少的smoothing span
span <- 0.5
loess_ratio <- loess(ratio ~ Tumor.size, data=y, span=span) 
loess_ci <- loess(int95 ~ Tumor.size, data=y, span=span) 

y$ratiop = predict(loess_ratio)
y$int95p = predict(loess_ci)

p2 <-ggplot(y, aes(Tumor.size, ratiop)) +
     geom_ribbon(aes(ymin=ratiop-int95p, ymax=ratiop+int95p), fill="grey") + 
     geom_line() + xlab("Tumor Size (mm)") +
     coord_cartesian(xlim = c(0,51),ylim = c(0,0.3)) + #设置坐标轴范围
     scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) +#让x和y轴都从0开始
     theme_bw() + #去除背景色
     theme(panel.grid =element_blank()) + #去除网格线
     theme(panel.border = element_blank()) + #去除外层边框
     theme(axis.line = element_line(colour = "black")) + #坐标轴画成黑色
     ylab("5-Year XXX Mortality")
p2
ggsave("mortality.pdf",width = 6,height = 4)

p2画出来就非常好看了

把没做smoothing的叠加上去看看:

p2 + geom_ribbon(aes(ymin=ratio-int95, ymax=ratio+int95), fill="steelblue", alpha=.3) + 
     geom_line(aes(Tumor.size, ratio), color='red') + xlab("Tumor Size (mm)") +
     ylab("5-Year XXX Mortality") + theme_minimal()

收藏回复 显示全部楼层 道具 举报

发表于 昨天 09:38

文中所用数据可以关注公众号“生信喵实验柴”
1.png
发送关键词“20250401”获取

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|bioinfoer ( 萌ICP备20244422号 )

GMT+8, 2025-4-3 16:43 , Processed in 0.097552 second(s), 34 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表