预后模型模块化代码分享(3):riskScore可视化

资源链接:
链接:https://pan.baidu.com/s/1HXCSOarJSSSI7qBWO_ZbEQ?pwd=xg77
提取码:xg77传送门:
预后模型模块化代码分享(1):数据读取与整理
预后模型模块化代码分享(2):Lasso-COX回归分析
预后模型模块化代码分享(4):nomogram-ROC曲线-DCA决策曲线

废话不多说,直接开始,打开Auto_riskScore_plot.R,首先处理上一个脚本中传递的数据,根据第一篇脚本中输入的时间类型自动处理生存时间,计算危险分数百分位:

if (max(sur$status)>1) {
  sur$status <- sur$status-1
}
if (time_type == "days") {
  data_risk$sur_time <- sur$days_to_death/365
}
if (time_type == "month") {
  data_risk$sur_time <- sur$days_to_death/12
}
data_risk$status <- sur$status
data_risk$id <- row.names(data_risk)
k <- length(data_risk)
data_risk <- arrange(data_risk,riskScore)
row.names(data_risk) <- data_risk$id
data_risk <- data_risk[,1:k]
q <- length(row.names(data_risk))
s <- 100/q
i <- 1
precent <- 1
while (i<=q){
  precent[i] <- i*s;
  i <- i+1
}
}

随后将precemt转为分组的变量risk_group,并利用grid包绘制拼接的散点图和生存时间分布图

data_risk$precent <- precent
dat1 <- data_risk[data_risk$precent <= 50,]
dat2 <- data_risk[data_risk$precent > 50,]
dat3 <- data_risk[data_risk$status==0,]
dat4 <- data_risk[data_risk$status==1,]
data_risk <- within(data_risk,{   ##gourp precent data
  risk_group <- NA
  risk_group[precent <= 50] <- 1
  risk_group[precent >50] <- 0
})

tiff(file="KM_Risk_score.tiff",width = 15,height = 15,units ="cm",compression="lzw",bg="white",res=300)
fit <- survfit(Surv(sur_time, status) ~ risk_group, data = data_risk)
diff <- survdiff(Surv(sur_time,status) ~ risk_group,data = data_risk,rho = 0)
res <- ggsurvplot(fit,data = data_risk,pval = T,
                  legend.title = "risk score",
                  legend.labs = c("high risk score","low risk score"),
                  risk.table = F, # Add risk table
                  linetype = "strata", # Change line type by groups
                  ggtheme = theme_bw(), # Change ggplot2 theme
                  fun = "pct") # Reverse plot
res$plot <- res$plot + labs(title = "Survival Curve of Risk score",x="Time (years)")+
  theme(plot.title = element_text(hjust = 0.5))
res
dev.off()

data_risk$status <- as.factor(data_risk$status)
tiff(file="plot_risk.tiff",width = 15,height = 15,units ="cm",compression="lzw",bg="white",res=300)
layout_1 <- grid.layout(nrow = 3, ncol = 1, heights = c(1,4.5,4.5)) 
pushViewport(viewport(layout = layout_1))  
grid.text("Risk score(AP) for muti-cox analysis", x = 0.5, y = 0.95, gp = gpar(col = "black", fontsize = 15))  # ???ӻ???????

plot1 <- ggplot(data_risk,aes(x=precent,y=sur_time,color=status)) +
  geom_point(cex=0.8)+
  geom_point(data=dat4,aes(x=precent,y=sur_time),colour="#EB7369",cex=1) +
  geom_point(data=dat3,aes(x=precent,y=sur_time),colour="#1CB4B8",cex=1) +
  labs(y = "Survival time(years)",x="Risk score precent")+
  theme(axis.title.y = element_text(size=12),legend.position = c(0.925,0.8))+
  scale_color_discrete(labels=c("death","live"))+
  geom_vline(aes(xintercept=50),linetype="dashed")

plot2 <- ggplot(data_risk,aes(x=precent,y=riskScore)) +
  geom_point(cex=0.5)+
  geom_point(data=dat2,aes(x=precent,y=riskScore),colour="#EB7369",cex=1) +
  geom_point(data=dat1,aes(x=precent,y=riskScore),colour="#1CB4B8",cex=1) +
  labs(y = "Risk score",x="Risk score precent")+
  theme(axis.title.y = element_text(size=12))+
  geom_vline(aes(xintercept=50),linetype="dashed")+
  geom_hline(aes(yintercept=median(data_risk$riskScore)),linetype="dashed")

print(plot1, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
print(plot2, vp = viewport(layout.pos.row = 3, layout.pos.col = 1))

dev.off()
rm(plot1,plot2,dat1,dat2,dat3,dat4,layout_1)

从上图可以看出,危险分数越大的样本,生存时间越短,这里以年为单位,所以一开时输入的天被转换为了年
在这里插入图片描述
最后绘制危险分数热图:

l <- length(data_risk)-6
data_heat <- data_risk[,1:l]
an_risk <- subset(data_risk,select=c("risk_group"))
row.names(an_risk) <- row.names(data_heat)
an_risk[an_risk==1] <- "low risk score"
an_risk[an_risk==0] <- "high risk score"

colnames(an_risk) <- c("group")
data_heat <- as.data.frame(t(data_heat))
ann_colors = list(group = c("high risk score"="#ff9289","low risk score"="#00dae0"))
tiff(file="risk_heapmap_risk.tiff",width = 16,height = 12,units ="cm",compression="lzw",
     bg="white",res=300)
pheatmap(data_heat,scale = "row",show_colnames = F,annotation_col = an_risk,annotation_colors = ann_colors,
         cluster_cols = F,cluster_rows = F,color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
dev.off()
rm(data_heat,an_risk,ann_colors)
rm(diff,fit,res)

欢迎各位读者批评指正!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都会一点的DJX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值