单细胞测序并不一定需要harmony去除批次效应

大家好,今天我们分享的是单细胞的学习教程https://www.singlecellworkshop.com/analysis-tutorial.html  教程的作者使用了四个样本,但是没有使用harmony或者其他方法去整合 去除批次效应。


主要内容:

  • SCTransform流程代码及结果

  • harmony流程代码及结果

  • seurat单样本标准流程代码及结果

  • 三种方法结果比较

是不是这四个样本就不需要去批次效应呢?接下来我们探索一下

1 首先是把教程的代码跑一遍

# load Seurat package 
library(Seurat)dir.create("~/gzh/harmony_sct",recursive = TRUE)
setwd("~/gzh/harmony_sct/")
getwd()
list.files()# 1 不去除批次效应,教程的步骤----
{pfc2.data <- Read10X(data.dir = "raw-data/pfc-sample2")pfc3.data <- Read10X(data.dir = "raw-data/pfc-sample3")pfc5.data <- Read10X(data.dir = "raw-data/pfc-sample5")pfc7.data <- Read10X(data.dir = "raw-data/pfc-sample7")# create a new Seurat object for each sample# min.cells = 3, only genes detected in at least 3 cells will be included# min.features = 200, only cells with at least 200 genes detected will be includedpfc2 <- CreateSeuratObject(counts = pfc2.data, project = "pfc-demo", min.cells = 3, min.features = 200)pfc3 <- CreateSeuratObject(counts = pfc3.data, project = "pfc-demo", min.cells = 3, min.features = 200)pfc5 <- CreateSeuratObject(counts = pfc5.data, project = "pfc-demo", min.cells = 3, min.features = 200)pfc7 <- CreateSeuratObject(counts = pfc7.data, project = "pfc-demo", min.cells = 3, min.features = 200)pfc2# remove the raw data to save processing spacerm(pfc2.data, pfc3.data, pfc5.data, pfc7.data)# inspect the metadata for one of our objects using the 'head' functionhead(pfc2@meta.data)pfc2@meta.data$sample_number <- "2" pfc3@meta.data$sample_number <- "3" pfc5@meta.data$sample_number <- "5" pfc7@meta.data$sample_number <- "7" # merge multiple Seurat objectspfc <- merge(x = pfc2, y = list(pfc3, pfc5, pfc7))# remove individual objects to save processing spacerm(pfc2, pfc3, pfc5, pfc7)# inpect our new combined objectpfc# an important metadata slot to add in every experiment is the ratio of mitochondrial genes# detected in each cell - this can be used as a proxy for cell quality in most preparationspfc[["percent.mt"]] <- PercentageFeatureSet(object = pfc, pattern = "^mt-")# percent.mt cutoffs typically range from 5-10% depending on the sampleVlnPlot(pfc, features = c("percent.mt"), pt.size=0, y.max=15) pfc <- subset(pfc, subset = percent.mt < 5)VlnPlot(pfc, features = c("nFeature_RNA"), pt.size=0, y.max=2000)pfc <- subset(pfc, subset = nFeature_RNA > 600)# inspect our QC metrics againVlnPlot(pfc, features = c("nFeature_RNA","nCount_RNA","percent.mt"), pt.size=0)# this may take several minutes to execute, and progress will display in the consolepfc <- SCTransform(pfc)pfc <- RunPCA(pfc, npcs = 60)pfc <- FindNeighbors(pfc, dims = 1:60) pfc <- FindClusters(pfc, resolution = 0.7)pfc <- RunUMAP(pfc, dims = 1:60)DimPlot(pfc, label=T)DimPlot(pfc, group.by="sample_number")
}DefaultAssay(pfc)
Assays(pfc)

图片

图片

我们可以看到就算不去批次效应,结果也挺好的

02

2 然后使用harmony去除批次效应 看看效果


subset_data=pfcDefaultAssay(subset_data)='RNA'{
library(dplyr)DimPlot(subset_data)subset_data[["percent.mt"]] <- PercentageFeatureSet(subset_data, pattern = "^mt-")
VlnPlot(subset_data, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)subset_data = subset_data %>%Seurat::NormalizeData(verbose = FALSE) %>%  FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>%ScaleData(verbose = FALSE) %>%RunPCA(npcs = 30, verbose = FALSE)
ElbowPlot(subset_data, ndims = 30)
VlnPlot(subset_data, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)head(subset_data@meta.data)
library(stringr)
table(str_split(colnames(subset_data),pattern = "_",simplify = TRUE)[,2])
subset_data@meta.data$stim <-paste0('mice',str_split(colnames(subset_data),pattern = "_",simplify = TRUE)[,2])
#table(subset_data$stim)library('harmony')subset_data <- subset_data %>% RunHarmony("stim", plot_convergence = TRUE)
harmony_embeddings <- Embeddings(subset_data, 'harmony') 
#######################cluster
dims = 1:30
subset_data <- subset_data %>% RunUMAP(reduction = "harmony", dims = dims) %>% RunTSNE(reduction = "harmony", dims = dims) %>% FindNeighbors(reduction = "harmony", dims = dims)subset_data=FindClusters(subset_data,resolution =0.7)
DimPlot(subset_data,group)
head(subset_data@meta.data)head(pfc@meta.data)}

同样的分辨率下对比两次的结果

图片

图片

我们发现hamony之后多了两个亚群,但是样本总体分布好像影响并不大。所以我们看下harmony前后,每个亚群中的细胞数量变化

图片

总体看上去,harmony前后对大多数亚群影响并不大,且harmony前后有很多亚群多是可以互相重合的。(个人觉得之所以教程作者不去除批次效应是因为他所选的四个样本都是control组)

图片

如果想更详细的比较harmony前后的变化,我们可以从细胞命名、差异分析、拟时序分析等等结果来看啦~

那为什么作者只是使用了SCTtransform这个函数就可以?达到这么好的效果,是不是SCTtransform可以去除批次效应?——当然不是,不信你去看官网~

图片

3 .不死心的话,我们不使用SCTtransform,也不去除批次效应,只使用seurat标准流程试试

3#3 标准流程-----
head(subset_data@meta.data)
All=CreateSeuratObject(counts = subset_data@assays$RNA@counts,meta.data = subset_data@meta.data){VlnPlot(All, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)All = All%>%Seurat::NormalizeData(verbose = FALSE) %>%  FindVariableFeatures(selection.method = "vst"    ) %>%ScaleData(verbose = FALSE)All = RunPCA(All, npcs = 30, verbose = FALSE)ElbowPlot(All, ndims = 30)#######################clusterAll <- All %>% RunUMAP(reduction = "pca", dims = 1:30) %>% RunTSNE(reduction = "pca", dims = 1:30) %>% FindNeighbors(reduction = "pca", dims = 1:30)All<-All%>% FindClusters(resolution = 0.7) %>% identity()DimPlot(All,group.by ='stim' )+ggtitle("standard_pipeline")}
head(All@meta.data)

图片

结果看上去也还可以吧


我们对比一下三种方法:

图片

肉眼看不出来有多大区别吧

图片

有意思的是sctransform和标准流程都能得到17个亚群

图片

所以大家觉得我们需要harmnoy去除批次效应吗?

4 结论: 虽然不去批次效应也能拿到很好的结果,个人还是建议使用harmony,你觉得呢?

尽管在某些情况下即使不去除批次效应也能得到看似合理的结果,但这可能是偶然的,并且存在风险。批次效应可能掩盖或模拟出实际的生物信号,导致错误的生物学结论。因此,建议使用诸如Harmony这样的算法来校正批次效应,以提高数据分析的可靠性和准确性。

Harmony是一种用于多组数据整合的算法,它可以在保留生物学变异的同时,减少技术变异,特别是批次效应。通过对数据进行校正,Harmony可以帮助研究者更好地识别真实的生物学差异,而不是由实验条件引起的差异。

如果想更详细的比较harmony前后的变化,我们可以从细胞命名、差异分析、拟时序分析等等结果来看啦~如果大家对这个话题感兴趣我们可以开个直播聊聊~

微信公众号:生信小博士

感谢Jimmy老师的分享,此次推文的灵感来自Jimmy老师

猜你可能感兴趣:seurat个性化细胞注释并把细分亚群放回总群

图片

图片

看完记得顺手点个“在看”哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/247184.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基恩士软件的基本操作(六,KV脚本的使用)

目录 什么是KV脚本&#xff1f; KV脚本有什么用&#xff1f; 怎么使用KV脚本&#xff08;脚本不能与梯形图并联使用&#xff09;&#xff1f; 插入框脚本&#xff08;CtrlB&#xff09; 插入域脚本&#xff08;CtrlR&#xff09; 区别 脚本语句&#xff08;.T是字符串类…

python pyaudio实时读取音频数据并展示波形图

python pyaudio实时读取音频数据并展示波形图 下面代码可以驱动电脑接受声音数据&#xff0c;并实时展示音波图&#xff1a; import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import pyaudio import wave import os import op…

数据的力量:Web3 游戏运营指南

在充满活力的 Web3 游戏行业中&#xff0c;市场的起伏不定为开发者带来了挑战和机遇。利用数据的能力对于游戏开发者来说至关重要&#xff0c;能够实时监控游戏内的经济状况并分析玩家行为。这些功能可以帮助项目方获得宝贵的智慧洞察&#xff0c;优化游戏设计&#xff0c;提高…

网页文章采集工具-人工智能AI功能

简数采集器是一款支持人工智能AI功能的网页文章采集工具&#xff0c;它可以调用百度的文心一言AI对采集的数据进行分析&#xff0c;处理&#xff0c;内容创作等等&#xff0c;根据你的需求进行更加灵活的数据采集和处理。 文心一言人工智能AI功能使用方法&#xff1a; 1. 填写…

什么是美颜sdk?美颜sdk对比评测、技术评估

为了满足用户对于更美好画面的需求&#xff0c;各种美颜sdk应运而生。本文将深入探讨美颜sdk的概念&#xff0c;进行对比评测&#xff0c;并对其技术进行综合评估。 一、什么是美颜sdk&#xff1f; 美颜sdk使开发者们可以方便地在自己的应用中集成美颜功能&#xff0c;从而提…

软著项目推荐 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景&#x1f6a9; 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率&#xff08;Accuracy&#xff09;3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

线上超市小程序可以做什么活动_提升用户参与度与购物体验

标题&#xff1a;线上超市小程序&#xff1a;精心策划活动&#xff0c;提升用户参与度与购物体验 一、引言 随着移动互联网的普及&#xff0c;线上购物已经成为人们日常生活的一部分。线上超市作为线上购物的重要组成部分&#xff0c;以其便捷、快速、丰富的商品种类和个性化…

pbootcms建站

pbootcms建站 一、下载pbootcms二、安装1、进入宝塔面在网站栏&#xff0c;新建站点&#xff0c;将该址里面文件全部清再将下载的pbootcms上传至该地址。 三、修改关联数据库1、在根目录下/config打开database.php照如下修改这里我使用mysqli数据库。修改并使用自已创建的数据库…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…

2023经典软件测试面试题

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

RK3588+MCU机器人控制器解决方案

1 产品简介 XMP04A 是一款信迈科技基于 RK3588 设计的高性能、低功耗的边缘计算设备&#xff0c; 内置 NPU 算力可达 6.0TOPSINT8&#xff0c;以及具备强大的视频编解码能力&#xff0c;最高可支持 32 路 1080P30fps 解码和 16 路 1080P30fps 编码 &#xff0c;支持 4K12…