From d33c46499d8eda3e2ee9d2b1cab450c2f7e86415 Mon Sep 17 00:00:00 2001 From: ixxmu Date: Thu, 14 Sep 2023 16:01:17 +0000 Subject: [PATCH] =?UTF-8?q?R=E6=95=B0=E6=8D=AE=E6=8C=96=E6=8E=98=20|=20?= =?UTF-8?q?=E6=89=B9=E6=AC=A1=E6=95=88=E5=BA=94=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...72\224\347\232\204\345\244\204\347\220\206.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "docs/2023-09/R\346\225\260\346\215\256\346\214\226\346\216\230___\346\211\271\346\254\241\346\225\210\345\272\224\347\232\204\345\244\204\347\220\206.md" diff --git "a/docs/2023-09/R\346\225\260\346\215\256\346\214\226\346\216\230___\346\211\271\346\254\241\346\225\210\345\272\224\347\232\204\345\244\204\347\220\206.md" "b/docs/2023-09/R\346\225\260\346\215\256\346\214\226\346\216\230___\346\211\271\346\254\241\346\225\210\345\272\224\347\232\204\345\244\204\347\220\206.md" new file mode 100644 index 00000000..cac6dda0 --- /dev/null +++ "b/docs/2023-09/R\346\225\260\346\215\256\346\214\226\346\216\230___\346\211\271\346\254\241\346\225\210\345\272\224\347\232\204\345\244\204\347\220\206.md" @@ -0,0 +1,15 @@ +--- +title: "R数据挖掘 | 批次效应的处理" +date: 2023-09-14T16:00:20Z +draft: ["false"] +tags: [ + "fetched", + "生信小白要知道" +] +categories: ["Acdemic"] +--- +R数据挖掘 | 批次效应的处理 by 生信小白要知道 +------ +

在使用多个GEO数据集进行Bulk组织RNAseq数据分析的时候,常常会遇到批次效应的问题,今天分享两个去除Bulk组织中批次效应的方法。

什么是批次效应?

批次效应(Batch Effect)是指的是在实验过程中引入的非生物学的技术或实验变异,可能源自实验的不同运行批次、不同的实验人员、仪器的不同或者实验条件的变化等。

批次效应特点

  • 数据不一致性:批次效应导致同样的生物样本在不同批次中产生不一致的测量结果。
  • 掩盖生物学信号:批次效应可能掩盖了真实的生物学差异。
  • 增加噪声:批次效应增加了数据的噪声,降低了实验的灵敏度和准确性。
  • 降低可重复性:如果批次效应没有被适当地控制和校正,那么实验的可重复性和可比性将会降低。

批次效应解决

  • 批次随机化:在实验设计阶段,尽量随机分配样本到不同批次,以减小批次效应的影响。
  • 质量控制:对实验中不同批次的数据进行质量控制,包括检查异常值和离群值,以确保数据的质量。
  • 校正方法使用统计方法来校正批次效应。这包括ComBat、SVA、PCA校正等方法,可以在数据分析之前对数据进行批次校正。
  • 整合数据:对于多个批次的数据,可以采用数据整合的方法来合并不同批次的信息,例如单细胞RNA-seq数据的整合。

去除批次效应R语言实现

在GEO数据库中下载两个不同数据集的数据,GSE211167GSE229119

关于GEO数据的下载方法可以参考之前的推文

GEO数据库介绍 | 三种方式下载GEO数据

可以使用我下载好的数据

百度云链接:https://pan.baidu.com/s/1iVOmz_DyjroTqbZPt48frQ 提取码:b91f

数据加载

library(dplyr)
library(data.table)
GSE211167_tpm <- fread("./GSE211167_tpm_matrix.txt",data.table = F)
GSE229119_log2TPM <- fread("./GSE229119_log2TPM.txt",data.table = F)
GSE211167
GSE229119

数据预处理

由于下载的数据标准化方式不一样,所以需要先对数据进行预处理,主要涉及数据统一标准化、重新命名样本名以及数据的合并

关于R语言数据处理的学习也可以看之前的介绍。

R语言数据处理 | dplyr包的使用(一)
R语言数据处理 | dplyr包的使用(二)
R语言数据处理 | apply系列函数的区别和使用

GSE211167_tpm <- data.frame(t(GSE211167_tpm)) #转换行列
colnames(GSE211167_tpm) <- c(paste0("Data1_",1:26)) #样本重命名
GSE211167_tpm$gene <- rownames(GSE211167_tpm) #基因名

GSE229119_tpm <- GSE229119_log2TPM %>% select(-gene) #去除基因列
GSE229119_tpm <- data.frame(apply(GSE229119_tpm, 2function(x){2^(x)})) #数据转换成tmp值
colnames(GSE229119_tpm) <- c(paste0("Data2_",1:28))#样本重命名
GSE229119_tpm$gene <- GSE229119_log2TPM$gene #基因名

combine_data <- inner_join(GSE229119_tpm,GSE211167_tpm) #合并数据

norm_data <- combine_data %>% select(-gene) #去除基因名
norm_data <- data.frame(apply(norm_data, 2function(x){round(log2(x+1),2)})) #统一标准化
rownames(norm_data) <- combine_data$gene #命名行名

查看批次效应

可以使用箱线图来看一下批次效应,也可以使用pca图、热图等,比较常用的是箱线图

## 查看批次效应
## 各选10各样本,箱线图看批次效应
box_draw <- norm_data %>% select((paste0("Data1_",1:10)),(paste0("Data2_",1:10)))
boxplot(box_draw, col = "lightblue",las = 2)

可以看到两组数据存在明显的批次效应

limma包去除批次效应

limma包的removeBatchEffect函数可以用来去除批次效应。

## 使用limma的 removeBatchEffect 函数
library(limma)
# 样本分组信息,我这里随便分组的,根据情况可以调整
group_list <- c(rep("tumor",13),rep("normal",13),rep("tumor",14),rep("normal",14)) 
batch <- c(rep("Data1",26),rep("Data2",28)) #批次信息
design=model.matrix(~group_list)
Batch_limma <- removeBatchEffect(norm_data,batch = batch,design = design)

## 看一下去除之后的箱线图
Batch_limma_draw <- Batch_limma %>% data.frame() %>% select((paste0("Data1_",1:10)),(paste0("Data2_",1:10)))
boxplot(Batch_limma_draw, col = "lightblue",las = 2)
去除批次效应后

limma包去除批次效应,除了输入批次信息外,还需要样本分组信息。

sva包去除批次效应

sva包的ComBat函数专门用来去除批次效应,只需要输入批次信息,不需要分组信息,个人比较推荐这个。

library(sva)
batch <- c(rep("Data1",26),rep("Data2",28)) #批次信息
combat_data <- ComBat(norm_data, batch = batch)

## 看一下去除之后的
combat_data_draw <- combat_data %>% data.frame() %>% select((paste0("Data1_",1:10)),(paste0("Data2_",1:10)))
boxplot(combat_data_draw, col = "lightblue",las = 2)

以上就是两个方法去除批次效应,limma的优势是做差异分析的时候可以直接用,比较方便。sva包则需要单独做完再进行差异分析。

+
+原文链接