十二、三图联动

1.准备输入数据

load("TCGA-LUAD_sur_model.Rdata")
library(survival)
library(survminer)
library(ggplotify)
library(cowplot)
library(Hmisc)
options(scipen=200)
# http://dni-institute.in/blogs/cox-regression-interpret-result-and-predict/
library(pheatmap)

2.挑选感兴趣的基因构建coxph模型

e=t(exprSet[c('hsa-mir-31','hsa-mir-196b','hsa-mir-766','hsa-mir-519a-1','hsa-mir-375','hsa-mir-187','hsa-mir-331','hsa-mir-101-1'),])
colnames(e)=c('miR31','miR196b','miR766','miR519a1','miR375','miR187','miR331','miR101')
dat=cbind(meta,e)

dat$gender=factor(dat$gender)
dat$stage=factor(dat$stage)

colnames(dat) 
#>  [1] "ID"            "event"         "death"         "last_followup"
#>  [5] "race"          "age"           "gender"        "stage"        
#>  [9] "time"          "age_group"     "miR31"         "miR196b"      
#> [13] "miR766"        "miR519a1"      "miR375"        "miR187"       
#> [17] "miR331"        "miR101"

用survival::coxph()函数构建模型

library(survival)
library(survminer)
s=Surv(time, event) ~ miR31+miR196b+miR766+miR519a1+miR375+miR187+miR331+miR101
model <- coxph(s, data = dat )
summary(model,data=dat)
#> Call:
#> coxph(formula = s, data = dat)
#> 
#>   n= 513, number of events= 125 
#> 
#>              coef exp(coef) se(coef)      z Pr(>|z|)   
#> miR31     0.07437   1.07720  0.04644  1.601   0.1093   
#> miR196b   0.04605   1.04713  0.03752  1.227   0.2197   
#> miR766   -0.03884   0.96190  0.12795 -0.304   0.7615   
#> miR519a1 -0.03553   0.96509  0.05922 -0.600   0.5485   
#> miR375   -0.11247   0.89363  0.05459 -2.060   0.0394 * 
#> miR187   -0.03989   0.96089  0.04793 -0.832   0.4052   
#> miR331   -0.08267   0.92066  0.12387 -0.667   0.5045   
#> miR101   -0.42612   0.65304  0.13917 -3.062   0.0022 **
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#>          exp(coef) exp(-coef) lower .95 upper .95
#> miR31       1.0772     0.9283    0.9835    1.1799
#> miR196b     1.0471     0.9550    0.9729    1.1270
#> miR766      0.9619     1.0396    0.7485    1.2361
#> miR519a1    0.9651     1.0362    0.8593    1.0839
#> miR375      0.8936     1.1190    0.8029    0.9945
#> miR187      0.9609     1.0407    0.8747    1.0555
#> miR331      0.9207     1.0862    0.7222    1.1736
#> miR101      0.6530     1.5313    0.4971    0.8578
#> 
#> Concordance= 0.662  (se = 0.029 )
#> Likelihood ratio test= 27.81  on 8 df,   p=0.0005
#> Wald test            = 28.49  on 8 df,   p=0.0004
#> Score (logrank) test = 29.28  on 8 df,   p=0.0003

3.模型可视化-森林图

options(scipen=1)
ggforest(model, data =dat, 
         main = "Hazard ratio", 
         cpositions = c(0.10, 0.22, 0.4), 
         fontsize = 1.0, 
         refLabel = "1", noDigits = 4)

4.模型预测

fp <- predict(model)
summary(model)$concordance
#>          C      se(C) 
#> 0.66232618 0.02855476
library(Hmisc)
options(scipen=200)
with(dat,rcorr.cens(fp,Surv(time, event)))
#>         C Index             Dxy            S.D.               n         missing 
#>      0.33767382     -0.32465235      0.05710951    513.00000000      0.00000000 
#>      uncensored  Relevant Pairs      Concordant       Uncertain 
#>    125.00000000  40702.00000000  13744.00000000 221924.00000000
# 若要找到最佳模型,我们可以进行变量选择,可以采用逐步回归法进行分析

3.自己预测自己

查看?predict.coxph的帮助文档会发现:type参数有不同的取值,type不同则得出的预测值意义也不相同 https://mp.weixin.qq.com/s/hOgiWzvkWZLNKX1LDvrAaw

#fp <- predict(model,dat,type="risk");boxplot(fp)
#fp <- predict(model,dat,type="expected") ;boxplot(fp)
#names(fp) = rownames(meta)
fp <- predict(model,dat) ;boxplot(fp)

4.三图联动

这里的难点在于三个图的横坐标顺序是一致的。本强迫症还想让三个图严格对齐,然而无功而返,由于热图拼图本来就比较难弄,导致patchwork、cowplot都搞不定,多次尝试后只能通过对grid.arrange的调整对齐一下,应该是有别的办法的,如有后续,将在简书中更新

fp_dat=data.frame(patientid=1:length(fp),
                  fp=as.numeric(sort(fp)))

sur_dat=data.frame(patientid=1:length(fp),
                   time=meta[order(fp),'time'] ,
                   event=meta[order(fp),'event']) 
#改变点的颜色(思路:先将0和1替换为alive和death,然后将因子的顺序改为death,alive)
sur_dat$event=ifelse(sur_dat$event==0,'alive','death')
sur_dat$event=factor(sur_dat$event,levels = c("death","alive"))

exp_dat = t(e[order(fp),])
###第一个图----     
p1=ggplot(fp_dat,aes(x=patientid,y=fp))+geom_point()+theme_bw();p1
#第二个图
p2=ggplot(sur_dat,aes(x=patientid,y=time))+geom_point(aes(col=event))+theme_bw();p2
#第三个图
mycolors <- colorRampPalette(c("green","black", "red"), bias = 1.2)(100)
p3=pheatmap::pheatmap(exp_dat,
                      col= mycolors,
                      scale = "row",
                      breaks = seq(-1,1,length.out = 100),
                      show_colnames = F,
                      cluster_cols = F)
p3
#拼图实现三图联动
library(ggplotify)
plots = list(p1,p2,as.ggplot(as.grob(p3)))
library(gridExtra)
lay1 = rbind(c(rep(1,7),NA),
             c(rep(2,8)),
             c(rep(3,8))) #布局矩阵
grid.arrange(grobs = plots, 
             layout_matrix = lay1,
             heigths = c(1, 2,3))

从上向下三个图分别表示:

1.每个病人的预测值,按照从小到大排序 2.每个病人的生存时间,颜色区分生死 3.热图,挑出的基因在每个样本中的表达量
*生信技能树课程笔记

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容