差异分析

一、什么是差异分析

差异分析简单来说就是我们通过一组实验后,实验组中所提取的总mRNA 较 对照组提取的总mRNA有显著性提高或者是降低的部分mRNA,寻找这部分有差异的mRNA就被称为差异分析

在常见的差异分析中,有几个比较常用的库下面来介绍一下

1.GEO数据库

GEO数据库可以理解为一个实验原始数据的储存库。

如图所示,这是一个 研究某基因 对酮酸脱氢酶活性是否有促进性的实验。

image

GSE号:是这组实验的编号,在GEO每个不同的实验编号唯一,用于检索。

GPL号:实验芯片平台,在GEO数据库的实验信息,往往是通过基因芯片高通量测序的方式测量转录组。简单来讲就是基因芯片中包含了这个实验测量了哪些基因的表达量

GSM号:是每一种样品处理方式的编号,一组实验中(一个GSE号)往往有多种处理(GSM号),例如,在研究pH压迫某微生物生长时,当你设置了5个梯度,则在一个GSE号中至少会有5个GSM号,即五种处理方式。如果设置了3个重复,则会有15个GSM号,GSM在GEO数据库中也是唯一的,可以通过GSM来唯一检索。

表达矩阵:表达矩阵中包含了每种处理下,样品被提取出的总mRNA的表达情况。简单来讲就是测量的“值域”,而平台信息就是测量的“定义域”

二、如何进行差异分析

1.下载原始文件

下载表达矩阵文件

image

下载实验芯片平台信息

image

在处理样本量比较小的情况下,可以手动记录一下,每个GSM号对应的处理方式

2.将原始数据导入你的R中并且进行格式化处理

分析过程中依赖的包:limma,stringr

library(limma)
library(stringr)


# 首先设置你的工作目录
setwd("E:/Project/R/差异分析") 
  
# 导入表达矩阵
expmatrix_data <- read.table("GSE115269_series_matrix.txt", header = TRUE, skip = 64)

# 导入平台文件 
pla_data <- read.table("GPL18233-21178.txt", sep = "\t", header = T)

在表达矩阵导入中,因为我用的表达矩阵从第65行开始才是矩阵数据,所以设置了skip。

image

# 格式化平台文件(将转录组编号列提出,只保留ENSMUST编号)
mRNA_assigment <- pla_data[, "mrna_assignment"]   

pattern <- "ENSMUST\\d*"

for (i in 1:length(mRNA_assigment)){ 
  # 用正则表达式循环替换单元格内的内容
  mRNA_assigment[i] <- str_match(string = mRNA_assigment[i], pattern = pattern)
}

pla_data[, "mrna_assignment"] <- mRNA_assigment

# 让平台文件以ID列重排序
pla_data <- pla_data[order(pla_data[, 'ID']), ]

格式化的目的是从上图到下图,

image
image

即让多个转录组编号转成一个,并且让平台文件按基因编号排序,这样处理是为了后续富集分析的方便。可能会出现转录组缺失的情况,因为多个编号转成了一个。

# 将样品处理方式导入R --手动 这里写样品的处理方式,不同实验有所不同
samp_treat <- c("DJ-1+/+_01", "DJ-1+/+_02", "DJ-1+/+_03", "DJ-1-/-_01", "DJ-1-/-_02", "DJ-1-/-_03")

# 以csv文件保存格式化后的平台注释文件
write.table(pla_data, "pla_data.csv", row.names = T, col.names = T, sep = ",")

因为R使用不熟练的原因,后续富集部分操作可能需要在excel中进行,故导出格式化后的平台注释文件。

# 格式化表达矩阵
rownames(expmatrix_data) <- expmatrix_data[, "ID_REF"]

expmatrix_data <- expmatrix_data[, -1]

colnames(expmatrix_data) <- samp_treat

expmatrix_data <- log2(expmatrix_data) 

格式化目的是上图到下图

image

image

3.用limma包进行差异分析


# 根据样本处理方式设计design矩阵
group_list <- c(rep("Control", 3), rep("Treatment", 3)) 

design <- model.matrix(~0 + factor(group_list))

colnames(design) = levels(factor(group_list))

rownames(design) = colnames(expmatrix_data)

设置design矩阵的目的是为了对样本分组,但model.matrix函数的构造原理不是很清楚,这个需要进一步学习。总之就是构造出下图一样的分组。

image

image

这个design矩阵是含有level信息的。

# 模型拟合及分析
fit <- lmFit(expmatrix_data, design)

# 前面是分子(实验组),后面是分母(对照组)
contrast.matrix <- makeContrasts("Treatment-Control", levels = design) 
fit2 <- contrasts.fit(fit, contrast.matrix) 
fit2 <- eBayes(fit2) 
expDiff_data <- topTable(fit2, coef = 1, n = Inf) %>% na.omit()

# 保存差异分析结果文件
write.table(expDiff_data, "expDiff.csv", row.names = TRUE, col.names = TRUE, sep = ",")

分析后得到的expDiff_data如图所示

image

后续操作转至excel

打开expDiff.csv文件

image

将expDiff.csv文件列名调整好,并且将第一列转为数字格式,进行升序排序

然后将平台信息中的,转录组编号复制至expDiff.csv文件中,注意检查基因编号是不是相同的。

最后得到expDiff.csv文件如图所示

image

Fold change 表示 实验组基因表达量 与 对照组基因表达量 的比值

image