转载果子学生信  https://mp.weixin.qq.com/s/Ph1O6V5RkxkyrKpVmB5ODA

前面我们从GDC下载了TCGA肿瘤数据库的数据,也能够把GDC下载的多个TCGA文件批量读入R

今天我们讲一下TCGA数据的标准化,以及差异分析,得到了标准化后的数据,我们就可以按照以前的帖子,做一系列操作

Y叔推荐的这个图有毒!

图有毒系列之2

多个基因在多亚组疾病中的展示

在得到了差异分析的结果后,我们可以完成热图,火山图,GO分析,KEGG分析,GSEA分析,就跟这个帖子中的一样。
来完成你的生信作业,这是最有诚意的GEO数据库教程

下面开始今天的教程:
首先加载上一次课获得的数据;

### 加载数据
load("expr_df.Rdata")

现在的数据是这个样子的

处理前

去掉ensemble ID的点号

library(tidyr)
expr_df_nopoint <- expr_df %>% 
  tidyr::separate(gene_id,into = c("gene_id"),sep="\\.") 

现在的数据是这个样子的

处理后

去掉点号,是为了用gtf文件。
gtf文件的获取和作用在这里
GTF文件有什么用啊?别的不谈,最起码能提lncRNA

加载gtf文件,这是目前我们能接触的最大文件,有260万行。

load(file = "gtf_df.Rda")

提取mRNA

mRNA_exprSet <- gtf_df %>% 
  dplyr::filter(type=="gene",gene_biotype=="protein_coding") %>% #筛选gene,和编码指标
  dplyr::select(c(gene_name,gene_id,gene_biotype)) %>% 
  dplyr::inner_join(expr_df_nopoint,by ="gene_id") %>% 
  tidyr::unite(gene_id,gene_name,gene_id,gene_biotype,sep = " | ")

最终得到19668行,这是编码基因的个数,现在的数据是这个样子的

编码RNA

提取lncRNA

这里很有争议,而我的理由是,即使是编码基因,也会出现非编码转录本,而长链非编码RNA,指的是转录本,所以不能用gene的编码与否来界定

ncRNA <- c("sense_overlapping","lincRNA","3prime_overlapping_ncRNA",
           "processed_transcript","sense_intronic",
           "bidirectional_promoter_lncRNA","non_coding",
           "antisense_RNA") LncRNA_exprSet <- gtf_df %>% 
  dplyr::filter(type=="transcript",transcript_biotype %in% ncRNA) %>% #注意这里是transcript_biotype
  dplyr::select(c(gene_name,gene_id,transcript_biotype)) %>% 
  dplyr::distinct() %>% #删除多余行
  dplyr::inner_join(expr_df_nopoint,by ="gene_id") %>% 
  tidyr::unite(gene_id,gene_name,gene_id,transcript_biotype,sep = " | ")

最终得到25530个非编码转录本,数据是这个样子的

非编码RNA

数据标准化

标准化和差异分析都是用Deseq2这个包来完成,首先要构建dds对象,构建这个对象需要两个文件,第一是输入数据,我们已经有了,第二个是分组文件metadata,他至少由两列构成,一列是样本名称,一列是分组信息。

首先把样本名称变成数据框格式

metadata <- data.frame(TCGA_id =colnames(expr_df)[-1])

分组信息包含在TCAG_id的第14,15字符很有用,他指示了样本是癌症还是癌旁或者是转移 病灶

官网解释如下,01-09是癌症,10-19是正常,20-29是癌旁

Tumor types range from 01 - 09, normal types from 10 - 19 and control samples from 20 - 29

TCGA barcode的详细信息如下:

同时我们要注意,即使是肿瘤组织,01-09意义各不相同,比如,01代表原发灶,02代表转移灶,详细信息如下:

我们用table这个函数统计一下脑胶质瘤GBM样本的分类

table(substring(metadata$TCGA_id,14,15))

有154个是原发灶,有13个是转移灶,很奇怪是吧,没有癌旁。但是这个是能理解的,人的大脑正常组织是有用的,不同于肝脏这类奇怪多一块少一块无所谓,切取大脑正常组织是没有伦理的。实际上TCGA里面还有一部分肿瘤是没有癌旁的,比如,淋巴瘤。

这一部分没有正常对照的肿瘤如何进行差异分析呢,一种方法是,使用GTEx数据库中的正常组织,这个我们留一个坑,以后再讲。

但是,今天我们的活还是要做,我们就用复发和非复发来区分即可。

sample <- ifelse(substring(metadata$TCGA_id,14,15)=="01","cancer","recur")
## 这里的factor是为了dds的需要
metadata$sample <- as.factor(sample)

此时metadata是这个样子的

构建dds的两个文件全部准备好,我们开始下一步

mRNA标准化

这一步是为了代码复用,把counts文件统一命名

mycounts <- mRNA_exprSet

构建dds对象,如果mycounts中的TCGA_id是行名,tidy这个参数设置为FASLE

dds <-DESeqDataSetFromMatrix(countData=mycounts, 
                             colData=metadata, 
                             design=~sample,
                             tidy=TRUE)

Deseq2分析,这里面有很多步骤都自己运行了,这一步十分耗时,取决于样本数以及电脑内存大小,我的16g内存电脑运行5分钟,而我的学员们有的人要运行20个小时。甚至,如果,你分析的是乳腺癌,1000多个样本,小电脑根本过不去,此时,你可以考虑升级一下装备。

dds <- DESeq(dds)

这个数据很重要,而且有些人获得也不容易,所以,需要保存一下,方便以后使用。

save(dds,file="mRNA_exprSet_dds_sample.Rdata")

vst标准化,这一步跟上一步一样,速度取决于样本量和电脑

vsd <- vst(dds, blind = FALSE)

为什么选择vst呢?看这个
转录组的高级分析前该如何标准化数据?
Deseq2标准化的原理是什么,youtube上的StatQuest小哥视频说的特别好,可以看看这个帖子
DESeq2的标准化方法

这时候,Deseq2还内置了主成分分析来看一下样本分布

plotPCA(vsd, "sample")

从图上我们可以看出,原发灶和转移灶,并不能完美分开,生物学意义就是,转移灶不是新的类型的肿瘤,他实际上还是脑胶质瘤,后续可能发生的结果是,下游额差异分析接结果不好,可能的解决方法是,找出配对的原发灶和转移灶来分析。我们看结果来说话。

获取标准化后的数据,这一步还会自动过滤掉不符合规定的基因,这时候,数据明显被标准化了

mRNA_exprSet_vst <- as.data.frame(assay(vsd))

标准化之后

保存一下这个数据,调整一下格式,就可以用于本文开头说的那一系列操作。

save(ncRNA_exprSet_vst,file = "ncRNA_exprSet_vst.Rda")

差异分析

这里用到前面保存的dds,使用results函数提取

res <- results(dds, tidy=TRUE) 

我们看到这个数据,有foldchange值,有pvlaue,那么筛选差异基因,热图,火山图,GO,KEGG分析,GSEA分析就顺理成章啦。

TGCA数据的标准化以及差异分析--转载的更多相关文章

  1. 吴裕雄 python 机器学习——数据预处理标准化MaxAbsScaler模型

    from sklearn.preprocessing import MaxAbsScaler #数据预处理标准化MaxAbsScaler模型 def test_MaxAbsScaler(): X=[[ ...

  2. 吴裕雄 python 机器学习——数据预处理标准化StandardScaler模型

    from sklearn.preprocessing import StandardScaler #数据预处理标准化StandardScaler模型 def test_StandardScaler() ...

  3. 吴裕雄 python 机器学习——数据预处理标准化MinMaxScaler模型

    from sklearn.preprocessing import MinMaxScaler #数据预处理标准化MinMaxScaler模型 def test_MinMaxScaler(): X=[[ ...

  4. dplyr-高效的数据变换与整理工具--转载

    1.背景简介 在数据分析工作中,经常需要对原始的数据集进行清洗.整理以及变换.常用的数据整理与变换工作主要包括:特定分析变量的选取.满足条件的数据记录的筛选.按某一个或几个变量排序.对原始变量进行加工 ...

  5. Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去(转载)

    转载自:https://blog.csdn.net/raintungli/article/details/70807376 当Executor进行reduce运算的时候,生成运算结果的临时Shuffl ...

  6. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载

     在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...

  7. HBase 数据迁移方案介绍(转载)

    原文链接:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  8. 数据类型和Json格式(转载)

    作者: 阮一峰 日期: 2009年5月30日 1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数 ...

  9. Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

随机推荐

  1. git reset与git revert的区别

    http://alpha-blog.wanglianghome.org/2010/07/30/git-partial-rollback/ reset(版本撤回) 格式 git reset [-q] [ ...

  2. 利用AMPScript获取Uber用户数据的访问权限

    现代项目开发和资产管理方法正在不停地快速变化.在这场创新和扩张的竞赛中,新资产被迅速部署并暴露于公共互联网,已有资产也在不断发展. 要跟上这个不断变化的攻击面是很难的,更不用说保护这些应用程序和系统了 ...

  3. Cocos Creater 监听程序到后台和重新到前台

    cocos creator前后台切换当玩家在玩游戏时,突然接了一个电话,此时游戏会被切到后台待机,所有的声音播放都会停止,等打完电话,回到游戏,游戏又会被切回前台来,需要手动播放声音.可使用如下代码 ...

  4. scanf函数的返回值

    #include <stdio.h> int main() { ]; ]); printf("%d\n", n); ; } 此刻注意scanf函数里面的格式限定,该代码 ...

  5. Python语言——基础01-环境安装、注释、变量

    开篇导言: 今天开始进行python学习的笔记更新,以后我都用截图的方式更新,方便不麻烦,界面美观,今天学习更新的python学习内容是环境安装.注释.变量的内容 关注我博客的童鞋从现在开始也可以跟着 ...

  6. Emmet:HTML/CSS代码快速编写神器教程

    Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...

  7. python迭代器的原理及应用

    ''''什么是迭代器?迭代的工具1.什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的while True: print('hello world')像上面做这种单纯的重复并不是 ...

  8. Liunx系统升级自带的Python版本

    一.查看系统信息 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root@localhost ~]# ...

  9. sitecore8.2 基于站点来查询item

    树形结构: /sitecore /content /foo-site /home /my-account /bar-site /home /my-account /baz-site /home /my ...

  10. svn基础了解

    Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的 ...