差异分析流程(一)数据预处理

参考链接:
https://www.bioconductor.org/packages/devel/workflows/vignettes/RNAseq123/inst/doc/limmaWorkflow_CHN.html
https://cloud.tencent.com/developer/article/1422739

1. 加载包

if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
if (!require("airway", quietly = TRUE)) #使用数据集
  BiocManager::install("airway")
if (!require("org.Hs.eg.db", quietly = TRUE)) #注释基因
  BiocManager::install("org.Hs.eg.db")
if (!require("clusterProfiler", quietly = TRUE)) #ID转换
  BiocManager::install("clusterProfiler")
if (!require("edgeR", quietly = TRUE)) #过滤低表达基因
  BiocManager::install("edgeR")

2. 导入数据

options(stringsAsFactors = F)
library(airway)
data(airway)
# 获取基因counts矩阵
expr <- assay(airway)
expr[1:5,1:5]

在这里插入图片描述

#获取分组信息
group_list <- colData(airway)$dex
group_list

在这里插入图片描述

3. 注释基因

参考链接:http://www.360doc.com/content/19/0506/00/30846661_833639624.shtml

#查看支持的ID转换类型
keytypes(org.Hs.eg.db)

在这里插入图片描述

#转换ID
geneid<-bitr(rownames(expr), fromType='ENSEMBL', toType='SYMBOL', OrgDb='org.Hs.eg.db', drop = TRUE) #去除空值
geneid

在这里插入图片描述

#注释ID
expr = expr[ rownames(expr) %in% geneid[ , 1 ], ]
geneid = geneid[ match(rownames(expr), geneid[ , 1 ] ), ]
rownames(expr)<-geneid$SYMBOL
expr[1:5,1:5]

在这里插入图片描述

  • 常用ID
    1)Ensemble id: 欧洲生物信息数据库提供,一般以ENSG开头,后边跟11位数字。如TP53基因:ENSG00000141510
    2)Entrez id: 美国NCBI提供,通常为纯数字。如TP53基因:7157
    3)Symbol id: 文献中报道的基因名称。如TP53基因的symbol id为TP53
    4)Refseq id: NCBI提供的参考序列数据库:可以是NG、NM、NP开头,分别代表基因,转录本和蛋白质。如TP53基因的某个转录本信息可为NM_000546
  • 基因组注释包: http://bioconductor.org/packages/release/BiocViews.html

4. 去重

table(duplicated(rownames(expr))) #统计重复基因数目
#对重复基因名取平均表达量
if(sum(duplicated(rownames(expr)))>0) #判断是否有重复基因
  expr<-avereps(expr,ID=rownames(expr)) 

在这里插入图片描述

  • 去重前:
    在这里插入图片描述
  • 去重后:
    在这里插入图片描述

5. 过滤低表达基因

  • 查看样本表达基因数目
apply(expr,2,fivenum)
apply(expr,2, function(x) sum(x>1)) 

在这里插入图片描述
从五个分位数统计量可以发现,每个样本含有部分表达值为0的基因,需要过滤
在这里插入图片描述
从上图可以发现平均每个样本被检测到的基因数量是15600左右

  • 过滤方法1
    过滤所选用的阈值具有主观性
#过滤在所有样本都是零表达的基因
expr=expr[apply(expr,1, function(x) sum(x>1) > 1),] 
dim(expr)
apply(expr,2,fivenum)

在这里插入图片描述
过滤了31%的低表达基因
在这里插入图片描述

  • 过滤方法2
x <-edgeR::DGEList(counts=expr)          #构建DEGList对象
keep.exprs <- edgeR::filterByExpr(x, group=group_list)#判断基因是否低表达
x <- x[keep.exprs,, keep.lib.sizes=FALSE]#过滤
head(keep.exprs)
dim(x)

在这里插入图片描述
在这里插入图片描述
ps:
 1)默认选取最小的组内的样本数量为最小样本数,保留至少在这个数量的样本中有10个或更多序列片段计数的基因
 2)对基因表达量进行过滤时使用CPM值而不是表达计数,以避免对总序列数大的样本的偏向性

  • 可视化
    使用的是过滤方法2得到的数据
#得到数据
library(RColorBrewer)
x <-edgeR::DGEList(counts=expr,group=factor(group_list))#构建DGE对象
L <- mean(x$samples$lib.size)/10^6
M <- median(x$samples$lib.size)/10^6
lcpm <- cpm(x, log=TRUE, prior.count=2)#log2(CPM + 2/L)
lcpm.cutoff <- log2(10/M + 2/L) 	   #过滤阈值
nsamples <- ncol(x)             	   #提取样本数
col <- brewer.pal(nsamples, "Paired")  #颜色

在这里插入图片描述
lib.size为各个样本的总read counts

par(mfrow=c(1,2)) #一式两图
#过滤前图形
plot(density(lcpm[,1]), col=col[1], lwd=2, ylim=c(0,0.26), las=2, main="", xlab="")
abline(v=lcpm.cutoff, lty=3) #阈值线
for (i in 2:nsamples){
den <- density(lcpm[,i])
lines(den$x, den$y, col=col[i], lwd=2)
}
title(main="A. Raw data", xlab="Log-cpm") #标题和x轴名称
legend("topright",colnames(x), text.col=col, bty="n",cex=0.5) #图例
#过滤后图形
keep.exprs <- edgeR::filterByExpr(x, group=group_list)#判断基因是否低表达
x <- x[keep.exprs,, keep.lib.sizes=FALSE]#过滤
lcpm <- cpm(x, log=TRUE, prior.count=2)
plot(density(lcpm[,1]), col=col[1], lwd=2, ylim=c(0,0.26), las=2, main="", xlab="")
title(main="B. Filtered data", xlab="Log-cpm")
abline(v=lcpm.cutoff, lty=3)
for (i in 2:nsamples){
den <- density(lcpm[,i])
lines(den$x, den$y, col=col[i], lwd=2)
}
legend("topright",colnames(x), text.col=col, bty="n",cex=0.5)

在这里插入图片描述
注: 卡阈值方法

6. 无监督聚类MDS图

参考链接:https://blog.csdn.net/yanta0/article/details/84798062

  • 基本思想: 将高维坐标中的点投影到低维空间中,保持点彼此之间的相似性尽可能不变,而点与点之间的距离和对象之间的相似度高度相关
  • 目的:
    1)展示出样品间的相似性和不相似性
    2)定性检测差异表达基因数目,越相似则差异基因越少
    3)检查有无分组错误情况出现
  • 理想情况: 样本会在不同的实验组内很好的聚类,且可以鉴别出远离所属组的样本
par(mfrow=c(1,1))
lcpm <- cpm(x, log=TRUE)
col.group <- group_list
levels(col.group) <- brewer.pal(nlevels(col.group), "Set1")
col.group<-droplevels(col.group) #去除不使用的水平因子
col.group <- as.character(col.group)
plotMDS(lcpm, labels=group, col=col.group)
title(main="Sample groups")

在这里插入图片描述
在这里插入图片描述

7. 保存数据

保留的是使用过滤方法1得到的数据

save(group_list,expr,file="expr.RData")
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值