Posted on

0.需求

TCGA里的数据tumor多normal少,想要挑选出配对样本进行差异分析。(并不是说必须挑配对样本才能做哦,直接做也是可以的),筛选配对样本解决方案很多种,这边只是一种,本文主要记录配对数据的ggplot2实现。

1.数据

这里使用的数据是本人Xena broower 下载的TCGA-LUAD表达矩阵。

library(ggplot2)

rm(list = ls())

exp<- read.table("G:/TCGA/tcga/LUAD/HiSeqV2",row.names = 1,header = T)

dim(exp)

## [1] 20530 576

exp[1:4,1:4]

##TCGA.69.7978.01 TCGA.62.8399.01 TCGA.78.7539.01 TCGA.50.5931.11

##ARHGEF10L 9.9898 10.4257 9.6264 8.6835

##HIF3A 4.2598 11.6239 9.1362 9.4824

##RNF17 0.4181 0.0000 1.1231 0.8221

##RNF10 10.3657 11.5489 11.6692 11.7341

head(colnames(exp))

## [1] "TCGA.69.7978.01" "TCGA.62.8399.01" "TCGA.78.7539.01" "TCGA.50.5931.11" "TCGA.73.4658.01" "TCGA.44.6775.01"

从TCGA ID里可以找到tumor和normal的分组,统计它们的数量:

table(stringr::str_sub(colnames(exp),14,15)<10)

##

## FALSE TRUE

## 59 517

2.代码实现

配对样本的共同点是病人ID(前12位)一致,根据这个来匹配即可。

先拆分成tumor和normal两个矩阵,根据ID的14和15位来拆

library(stringr)

exp_nor = exp[,str_sub(colnames(exp),14,15) > 10]

exp_tum = exp[,str_sub(colnames(exp),14,15)<=10]

有normal样本的病人的ID,是normal组样本ID的前12位,也是exp_nor的行名。

patient = str_sub(colnames(exp_nor),1,12)

然后将tumor矩阵中与patient相匹配的样本名选出来,能匹配到的就会被挑出来。

k = str_sub(colnames(exp_tum),1,12) %in% patient;table(k)

## k

## FALSE TRUE

## 459 58

exp_tum = exp_tum[,k]

可以把表达矩阵拼回去咯:

exp2 = cbind(exp_tum,exp_nor)

dim(exp2)

## [1] 20530 117

就相当于把表达矩阵按列取子集了,tumor和normal各九个样本,后面可以拿来做配对样本的差异分析

3.特定基因配对T检验即可视化

data<-data.frame( t(exp2[which(rownames(exp2)=="TP53"),]))

data$group<-ifelse(str_sub(rownames(data),14,15) < 10,"Tumor","Normal")

data$patient<-str_sub(rownames(data),1,12)

自定义ggplot2主题,可修改参数

if(T){mytheme <- theme(plot.title = element_text(size = 15,color="black",hjust = 0.5),
                       axis.title = element_text(size = 15,color ="black"), 
                       axis.text = element_text(size = 15,color = "black"),
                       panel.grid.minor.y = element_blank(),
                       panel.grid.minor.x = element_blank(),
                       panel.grid=element_blank(),
                       legend.position = "none",
                       legend.text = element_text(size = 15),
                       legend.title= element_text(size = 15)
)} 
box_paired <- ggplot(data, aes(x = group,y = TP53,fill= group)) +
  geom_boxplot(aes(fill = group),width= 0.5) +
  geom_point(shape=1, size= 3, alpha=1) +
  geom_line(aes(group = patient), colour="grey20", linetype="solid",size=1, alpha=0.5)+ 
  scale_fill_manual(values = c("#1CB4B8", "#EB7369"))+
  scale_y_continuous(limits=c(6, 15),breaks =seq(6,14,2),expand = c(0, 0) )+
  labs(y="TP53 expression",x=NULL,title = "")+
  theme_bw()+ mytheme 

当然还可以添加paired ttest,使用t.test把结果添加到图中,或者使用ggggpubr包的stat_compare_means函数直接添加。

8 Replies to “TCGA中配对样本的可视化”

  1. 我输入的data frame是这样的,
    id group score
    50 tumor 34.6830
    51 tumor 55.9853
    1 tumor 12.0592
    2 tumor 2.5433

    没有报错,没有图
    当输入plot(“box_paired”) 后报错如下
    Error in plot.window(…) : ‘ylim’值不能是无限的
    In addition: Warning messages:
    1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
    2: In min(x) : no non-missing arguments to min; returning Inf
    3: In max(x) : no non-missing arguments to max; returning -Inf

  2. 老师您好,跟您请教下,以上代码运行正常,但是没有出现图形是什么情况呀。是否是样品ID不配对?

        1. 图是赋在box_paired 变量中,你得意思是输了box_paired 后没有图?应该不会的,如果有错误会报错的

    1. 你好,那是必须的 当然前提在于样本量足够,一般TCGA里面配对样本就只有几十个,也足够了,可以配对和两组T检验都做一下

发表评论

邮箱地址不会被公开。 必填项已用*标注