美文网首页
GTEx与TCGA数据整理

GTEx与TCGA数据整理

作者: 找兔子的小萝卜 | 来源:发表于2023-03-06 13:01 被阅读0次
    ####让报错变成英文 方便google
    Sys.setenv(LANGUAGE = "en")
    #禁止chr转成factor
    options(stringsAsFactors = FALSE)
    ###清空环境
    rm(list=ls())
    ##加载包  这个包是用来加快数据读取的
    library(data.table)
    library(dplyr)
    library(tidyverse)
    ###读取胃癌的临床信息
    stad.phe=fread("TCGA-STAD.GDC_phenotype.tsv",header = T, sep = '\t',data.table = F)
    ###查看一下数据类型
    class(stad.phe)#"data.frame"
    ###读取表达谱信息  rnaseq的数据
    stad.fkpm=fread("TCGA-STAD.htseq_fpkm.tsv",header = T, sep = '\t',data.table = F)
    ###查看列名 方便merger的合并列设置
    colnames(stad.fkpm)
    ####读取探针信息 ,目的是为了将ensemble名字转为基因名
    stad.pro=fread("gencode.v22.annotation.gene.probeMap",header = T, sep = '\t',data.table = F)
    ##查看一下数据
    colnames(stad.pro)
    ###我们只要前两列进行转换
    stad.pro=stad.pro[,c(1,2)]
    colnames(stad.pro)
    ###用merge函数将探针转化的信息和表达谱信息进行合并
    stad.fkpm.pro=merge(stad.pro,stad.fkpm,by.y ="Ensembl_ID",by.x = "id" )
    dim(stad.fkpm.pro)  # 60483   409
    rownames(stad.fkpm.pro)=stad.fkpm.pro$gene #把基因名转换为行名
    stad.fkpm.pro=distinct(stad.fkpm.pro,gene,.keep_all = T)#去重复
    dim(stad.fkpm.pro) #去重复以后的数目  58387   409
    stad.fkpm.pro <- column_to_rownames(stad.fkpm.pro,"gene")#相当于把gene列移动 转换为行名
    ##此时,已构建好表达矩阵
    
    
    ###因为tcga数据中有癌和癌旁,所以我们先根据临床信息把癌和癌旁区分一下
    View(stad.phe)  #临床信息中行名与表达矩阵的列名相同
    x=stad.phe$submitter_id.samples
    rownames(stad.phe)=stad.phe$submitter_id.samples
    ##通过查看临床信息,我们发现在sample_type.samples列中,Primary Tumor为癌,Solid Tissue Normal为癌旁
    x2=stad.phe$sample_type.samples
    table(stad.phe$sample_type.samples)#癌组织443个 癌旁组织101个
    ##将癌组织和癌旁组织提取出来
    stad.phe.t=filter(stad.phe,sample_type.samples=="Primary Tumor")
    stad.phe.n=filter(stad.phe,sample_type.samples=="Solid Tissue Normal")
    #样本信息中行数为544 而表达矩阵列数为408 说明有100多个样本没有表达矩阵 
    #看一下临床信息与实际表达矩阵的交集
    z1=intersect(rownames(stad.phe.t),colnames(stad.fkpm.pro))#肿瘤的临床信息与表达矩阵的交集 375个
    z2=intersect(rownames(stad.phe.n),colnames(stad.fkpm.pro))#癌旁的临床信息与表达矩阵的交集 32个 说明很多组织测序不成功
    stad.t=stad.fkpm.pro[,z1]##所有癌组织的表达矩阵
    stad.n=stad.fkpm.pro[,z2]##所有癌旁组织的表达矩阵
    ##改变一下stad.t和stad.n的列名 方便查看
    colnames(stad.n)=paste0("N",1:32)#癌旁的列名重新命名
    colnames(stad.t)=paste0("T",1:375)#肿瘤的列名重新命名
    stad.exp=merge(stad.n,stad.t,by.x = 0,by.y = 0)##合并
    colnames(stad.exp)
    stad.exp <- column_to_rownames(stad.exp,"Row.names")#58387 407
    #表达矩阵的数据完成
    save(stad.exp,file='stas.exp.Rdata')
    library(data.table)
    ###读取gtex的表达矩阵,注意解压和不解压都是可以读取的
    ##电脑内存小的话,会出现error。。。。
    memory.limit(size=100000)##我也不知道科不科学。。#60498  7863
    gtex.exp=fread("gtex_RSEM_gene_fpkm",header = T, sep = '\t',data.table = F)
    save(gtex.exp,file='gtex.exp.Rdata')
    ###
    dim(gtex.exp) #60498  7863
    gtex.exp[1:5,1:5]
    ###读取gtex的临床样本注释信息
    gtex.phe=fread("GTEX_phenotype",header = T, sep = '\t',data.table = F)
    ##查看一下
    View(gtex.phe)
    ###读取gtex的基因注释信息 也就是探针信息
    gtex.pro=fread("probeMap_gencode.v23.annotation.gene.probemap",header = T, sep = '\t',data.table = F)
    dim(gtex.pro)  #60498     6
    ####我们比较一下v23和v22的差异  一个是60498  一个是60483
    ###现在我们先合并gtex的基因信息
    ###合并之前先看一下列名  找到共同的合并列
    colnames(gtex.pro)
    colnames(gtex.exp)
    gtex.pro=gtex.pro[,c(1,2)]
    ###我们发现sample和id是共同的列
    head(gtex.pro)
    head(gtex.exp)
    gtex.exp[1:4,1:4]
    gtex.fkpm.pro=merge(gtex.pro,gtex.exp,by.y ="sample",by.x = "id" )#60498 7864
    ###取一波交集  目的是为了决定之后的gtex和stad合并是按照symbol还是enseble来合并
    length(intersect(gtex.pro$id,stad.pro$id))  #42566
    length(intersect(rownames(stad.exp),gtex.fkpm.pro$gene)) #57993
    ###我们可以看到 如果按照基因合并会有57793个交集  如果按照Ensembl却只有42566个,所以最后还是按照gene来合并
    ###现在要提取正常的胃组织的表达矩阵,我们要根据gtex的临床信息来匹配胃组织的sample
    colnames(gtex.phe)
    rownames(gtex.phe)=gtex.phe$Sample
    table(gtex.phe$_primary_site)
    colnames(gtex.phe)=c("Sample","body_site_detail (SMTSD)","primary_site","gender","patient","cohort")
    colnames(gtex.phe)
    table(gtex.phe$primary_site)#stomach 209
    gtex.phe.s=filter(gtex.phe,primary_site=="Stomach")
    x1=intersect(rownames(gtex.phe.s),colnames(gtex.fkpm.pro))
    gtex.s=gtex.fkpm.pro[,c("gene",x1)]
    rownames(gtex.s) <- gtex.s$gene
    gtex.s1 <- distinct(gtex.s,gene,.keep_all = T)
    gtex.s2 <- column_to_rownames(gtex.s1,"gene")
    ###我们发现一共有209个胃组织
    ###我们从官网可以看到gtex是按照log2(fpkm+0.001)处理的  stad是按照log2(fpkm+1),所以我们在合并之前 先要把他们的处理方式变成一样。
    gtex.s3=2^gtex.s2
    log2(0.001)   #-9.965784
    gtex.s5=log2(gtex.s3-0.001+1)
    colnames(gtex.s5)=paste0("G",1:174)
    ###现在数据的处理方式都相同了 就有可比性了 将gtex的胃组织的数据与tcga的数据进行合并
    all.data=merge(gtex.s5,stad.exp,by= 0) #57793 582
    all.data <- column_to_rownames(all.data,"Row.names")
    save(all.data,file = 'all.data.Rdata')
    我也晕了。。。
    
    
    
    
    library(limma)##去除批次效应
    nromalized.data=normalizeBetweenArrays(all.data)
    as.data.frame()
    ?normalizeBetweenArrays
    ##http://www.gsea-msigdb.org/gsea/index.jsp GSEA网址
    ###############另外一种gmt
    BiocManager::install("GSEABase")
    library(GSEABase)
    library(clusterProfiler)
    library("devtools")
    install_github("GSEA-MSigDB/GSEA_R")
    library(GSEA)
    library(dplyr)
    kegggmt2 <- read.gmt("c2.cp.kegg.v7.4.symbols.gmt")#12797 2
    kegg_list = split(kegggmt2$gene, kegggmt2$term)
    library(GSVA)
    ?gsva
    #method:gsva;zscore;ssgsea(计算免疫浸润)
    expr=as.matrix(expr)
    kegg2 <- gsva(nromalized.data, kegg_list, kcdf="Gaussian",method = "gsva",parallel.sz=0)
    #mx.diff False:正态分布(差异度不明显)( True:双峰分布(差异度更大,更明显。)
    
    
    #########################自定义的基因集 
    gene.set=read.table("5.4.GENE.SET.txt",
                        header =F,sep = '\t',quote = '')
    kegg.123=read.table("5.4.GENE.NAME.txt",
                        header =F,sep = '\t',quote = '')
    gene.set1=as.matrix(gene.set)
    gene.set2=t(gene.set1) #转置以后每一列代表一个通路
    gmt=list() #GSCA输入需要list
    for (i in 1:19) {
      y=as.character(gene.set2[,i]) 
      b=which(y=="")
      gmt[[i]]=y[-b]
    }
    names(gmt)=kegg.123$V1
    gmt=gmt[-19]
    
    View(gmt)
    getwd()
    
    
    
    library(GSVA)
    
    es.dif.nromalized <- gsva(nromalized.data, gmt, mx.diff=TRUE,kcdf="Poisson",parallel.sz=8)
    es.max.nromalized <- gsva(nromalized.data, gmt, mx.diff=FALSE)
    #把每个样本对应的通路的基因集都计算出来了 
    
    ? data.frame
    annotation_col = data.frame(
      Tissuetype =c(rep("Stomach",174),rep("Solid Tissue Normal",32),rep("Tumor",375)),
      Database =c(rep("gtex",174), rep("TCGA",407))
    )
    
    rownames(annotation_col)=colnames(es.max.nromalized)
    
    pheatmap::pheatmap(es.max.nromalized, #热图的数据
                       cluster_rows = F,#行聚类
                       cluster_cols =F,#列聚类,可以看出样本之间的区分度
                       annotation_col = annotation_col,
                       show_colnames=F,
                       scale = "row", #以行来标准化,这个功能很不错
                       color =colorRampPalette(c("green", "black","red"))(100))
    
    
    ###############特定基因分析
    exprSet.all.r=all.data[c("RORC", "RORB", "RORA"),]
    
    exprSet.all.r=t(exprSet.all.r)
    exprSet.all.r=as.data.frame(exprSet.all.r)
    
    x=c(rep("GTEX",174),rep("N",32),rep("T",375))
    exprSet.all.r$Type=x
    
    exprSet.rorc=exprSet.all.r[,c(1,4)]
    exprSet.rorc$Gene=rep("RORC")
    colnames(exprSet.rorc)[1]="Relative Expression"
    exprSet.rorb=exprSet.all.r[,c(2,4)]
    exprSet.rorb$Gene=rep("RORB") 
    colnames(exprSet.rorb)[1]="Relative Expression"
    exprSet.rora=exprSet.all.r[,c(3,4)] 
    exprSet.rora$Gene=rep("RORA") 
    colnames(exprSet.rora)[1]="Relative Expression"
    x.all=rbind(exprSet.rorc,exprSet.rorb,exprSet.rora)
    colnames(x.all)
    library(ggsignif)
    library(ggpubr)
    library(ggplot2)
    p <- ggboxplot(x.all, x = "Gene", y = "Relative Expression",
                   color = "Type", palette = "Type",
                   add = "Type")
    p + stat_compare_means(aes(group = Type))
    
    table(x.all$Gene)
    my_comparisons <- list(c("RORA","RORB"), c("RORA","RORC"),c("RORB", "RORC"))
    
    
    p +geom_signif(comparisons = my_comparisons,
                   step_increase = 0.2,map_signif_level = F,
                   test = t.test,size=0.8,textsize =4)
    ?geom_signif
    x.c.b=cbind(exprSet.rorc,exprSet.rorb)
    GSEA
    GSVA
    GO/KEGG
    colnames(x.c.b)=c("RORC","Type","Gene", "RORB","Type","Gene" )
    x.c.b=x.c.b[,c(1,4)]
    library(ggplot2)
    library(ggpubr)
    ## Loading required package: magrittr
    p1 <- ggplot(data = x.c.b, mapping = aes(x = RORC, y = RORB)) +
      geom_point(colour = "red", size = 2) +
      geom_smooth(method = lm, colour='blue', fill='gray') #添加拟合曲线
    p1
    p1 + stat_cor(method = "pearson", label.x = -0.4, label.y = 0.2) #添加pearson相关系数
    

    相关文章

      网友评论

          本文标题:GTEx与TCGA数据整理

          本文链接:https://www.haomeiwen.com/subject/ufsmldtx.html