一 、批次效应来源
在GEO数据集中,批次效应可以来自多个来源,包括但不限于以下几个方面:
实验时间:如果多个数据集是在不同的实验时间点进行的,可能存在批次效应。不同实验时间可能受到环境、技术或操作条件的影响,导致批次效应的存在。
实验批次:如果多个数据集是由不同的实验批次生成的,可能存在批次效应。实验批次之间可能存在实验操作、扩增、测序或处理方面的差异,从而引起批次效应。
数据生成实验室:不同的实验室可能存在技术平台、操作流程、实验人员等方面的差异,这些差异可能导致批次效应。
样本处理方法:如果样本在不同的处理方法下进行处理,如不同的样本采集、RNA提取、文库构建或测序平台,可能导致批次效应。
二、去批次效应的目的
合并和去除这些批次效应是为了减少技术差异对结果的影响,使得数据更可靠和可比。因此,在GEO数据集合并和去除批次效应时,需要考虑并控制这些批次效应的来源,以获得准确和可靠的分析结果。使用批次校正方法,如ComBat、limma、SVA等,对数据集进行校正。这些方法可以对每个样本的基因表达进行调整,以消除由于批次效应引起的差异。
三、代码示例
数据集合并
####GEO数据集合并
#导入数据集1
data1<-read.table("data1exp.txt", header = TRUE, sep = "\t")
#导入数据集2
data2<-read.table("data2/exp.txt", header = TRUE, sep = "\t")
#导入数据集3
data3<-read.table("data3/exp.txt", header = TRUE, sep = "\t")
####合并数据集
library(sva)
library(tidyverse)
merge_eset<-inner_join(data1,data2,by="X", suffix = c(".data1", ".data2")) #X是第一列名,需要将基因名放在第一列而不是成为行名
merge_eset<-inner_join(merge_eset,data3,by="X", suffix = c("", ".data3"))
####取列名---一直向下运行
rownames(merge_eset)<-merge_eset$Xmerge_eset<-merge_eset[,-1]#把第一列基因名放为行名
dim(merge_eset)#查看数据维度
exp<-as.matrix(merge_eset)
dimnames<-list(rownames(exp),colnames(exp))
data<-matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
dim(data)
class(data)
#返回"matrix""array"
进行去批次
#### 使用sva包计算批次效应
batchType <- c(rep(1,14),rep(2,6),rep(3,10)) #3个集合各自的样本量
#rep前面的数字代表样本排序,后面表示样本量
modType <- c(rep("normal",7),rep("Disease",7),rep("normal",3),rep("Disease",3),
rep("normal",5),rep("Disease",5)) #两个rep代表一个样本,正常多少例,疾病多少例
mod <- model.matrix(~as.factor(modType))
#使用Combat去批次
outTab <- data.frame(ComBat(data, batchType,mod, par.prior=TRUE))
#保存数据
write.table(outTab,file="cleandata.txt",sep="\t",quote=F,col.names=F) #保存后没有列名
write.table(outTab, "去批次-1+2+3.txt", sep = "\t", quote = FALSE, row.names = TRUE, col.names = T) #保存列名