生信小白--关于批次效应的学习及实战

参考教程:
微信公众号:生信星球
批次效应处理实例:combat和removebatcheffect的对比
特别感谢:
人美心善爱护小白的花花老师
小洁忘了怎么分身

作为一个非常想搞事情的生信小白,我一直想做不同数据集合并分析,下面我就把我的两个数据集合并的心路历程给大家还原一下

希望大家提出意见或者问题,一起进步~

1. 批次效应(Batch Effects)

可以理解为:样本受到检测的实验室条件、试剂批次和人员差异的影响,对结果的准确性造成了影响

2.多组数据集合并分析的流程

(1)条件

  • 取材对象应为同一组织
  • 本方法适用于同芯片平台

(2)流程

  • 了解数据,比如判断原数据集是否为标准化数据
    (在进行操作之前,总得弄清数据是个什么样子的吧)
  • 提取老三套:表达矩阵、临床表型(也就是你的分组信息)、平台数据
  • 各数据集组间校正
    (有时候虽然作者对数据进行了标准化,但是不是我们想要的,还得需要再次normalization一下)
  • 合并矩阵,批次矫正
    两种方法:
    limma removeBatchEffect
    sva combat
  • 再次查看合并且去除批次差异的数据
    (没有前后对比怎么能确定批次差异矫正有效果呢)

3.我的流程

首先,了解数据

我想合并的两个数据集,取材相同,同一芯片平台
(GEO网站上都能找得到)

然后,读入数据,提取数据

rm(list = ls())
options(stringsAsFactors = F)
library(GEOquery)
library(stringr)
gse = "GSE79704"
eSet1 <- getGEO("GSE79704", 
                destdir = '.', 
                getGPL = F)
eSet2 <- getGEO("GSE83582", 
                destdir = '.', 
                getGPL = F)
#(1)提取表达矩阵exp
exp1 <- exprs(eSet1[[1]])
exp1[1:4,1:4]
exp2 <- exprs(eSet2[[1]])
exp2[1:4,1:4]
#将两个数据集行数调整一致,不然没办法合并
table(rownames(exp1) %in% rownames(exp2))
#TRUE 
#25560
length(intersect(rownames(exp1),rownames(exp2)))
#[1] 25560
exp1 <- exp1[intersect(rownames(exp1),rownames(exp2)),]
exp2 <- exp2[intersect(rownames(exp1),rownames(exp2)),]
#(2)提取临床信息
pd1 <- pData(eSet1[[1]])
pd2 <- pData(eSet2[[1]])
#(3)提取芯片平台编号
gpl1 <- eSet1[[1]]@annotation
gpl2 <- eSet2[[1]]@annotation
#两个gpl均为GPL19983

两者的boxplot如下:

exp1.png

exp2.png

然后我仔细思考了要不要先进行组间校正再合并

所以如下我进行了两条路线

(1)直接批次矫正

【1】合并数据
#开始合并
exp = cbind(exp1,exp2)
#合并group_list
group_list1 = c(rep('NN',20),rep('PP',12),rep('GPP',32))
group_list2 = c(rep('NN',12),rep('PP',12),rep('NN',8),rep('EP',30),rep('IP',40))
group_list = c(group_list1,group_list2)
table(group_list)
#group_list
#EP GPP  IP  NN  PP 
#30  32  40  40  24 

boxplot如下:

#boxplot
boxplot(exp,las=2,main='exp-before')
exp-before.png

cluster如下:

#有没有批次效应,看一下聚类的情况
dist_mat <- dist(t(exp))
clustering <- hclust(dist_mat, method = "complete")
plot(clustering,labels = group_list)
cluster-exp-before.png

PCA如下:

#PCA
  dat=as.data.frame(t(exp))
  library(FactoMineR)#画主成分分析图需要加载这两个包
  library(factoextra) 
  # pca的统一操作走起
  dat.pca <- PCA(dat, graph = FALSE)
  fviz_pca_ind(dat.pca,
               geom.ind = "point", # show points only (nbut not "text")
               col.ind = group_list, # color by groups
               #palette = c("#00AFBB", "#E7B800"),
               addEllipses = TRUE, # Concentration ellipses
               legend.title = "Groups"
  )
PCA-exp-before.png
【2-1】limma方法
#处理批次效应:limma
library(limma)
#?removeBatchEffect()

batch <- c(rep("A",64),rep("B",102))
y2 <- removeBatchEffect(exp, batch)

boxplot如下:


exp-limma.png

cluster如下:


cluster-exp-limma.png

PCA如下:


pca-exp-limma.png
【2-2】combat方法
#处理批次效应(combat)
library(sva)
?ComBat

batch <- c(rep("A",64),rep("B",102))
mod = model.matrix(~as.factor(group_list))

y = ComBat(dat=exp, batch=batch, mod=mod)
#Found2batches
#Adjusting for4covariate(s) or covariate level(s)
#Standardizing Data across genes
#Fitting L/S model and finding priors
#Finding parametric adjustments
#Adjusting the Data

boxplot如下:

exp-combat.png

cluster如下:


cluster-exp-combat.png

PCA如下:


pca-exp-combat.png

(2)先组间校正再批次校正

【1】组间校正
#归一化
exp1 = limma::normalizeBetweenArrays(exp1)
exp2 = limma::normalizeBetweenArrays(exp2)
boxplot(exp1,las=2,main='exp1-normalization')
boxplot(exp2,las=2,main='exp2-normalization')

boxplot如下:


exp1-normalization.png
exp2-normalization.png
【2】合并数据

boxplot如下:


exp-n-before.png

cluster如下:


cluster-exp-n-before.png

PCA如下:


PCA-exp-n-before.png
【3-1】limma方法

boxplot如下:


exp-n-limma.png

cluster如下:


cluster-exp-n-limma.png

PCA如下:


pca-exp-n-limma.png
【3-2】combat方法

boxplot如下:

exp-n-combat.png

cluster如下:


cluster-exp-n-combat.png

PCA如下:


pca-exp-n-combat.png

4.我把我提前组间校正的数据拿去咨询了花花老师,还是可以看出前后差异的,有时候聚类不成功也是正常的

我对比了一下发现两种方法效果是差不多的

所以总结一下

(1)先组间校正,再批次校正

(2)到底要不要组间校正

我之前看过很多人的分析,众说纷纭……

我个人的理解是,还得是具体实例具体分析。这个问题没有对错。

如果有异常样本(经花花老师校正这个不叫离群值!!!),可以选择去掉异常的样本或者直接组间校正

如果看着蛮规整的,均值相近,做不做归一化都是可以的

所以我是如何处理的呢,我没有处理组间校正,直接批次校正了

最后,再次感谢生信星球的教程跟花花老师超级耐心的指导(我都不知道烦了老师多少次……超级羞愧)~

欢迎大家提出问题或者自己的见解,我们一起探讨

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容