Seurat | 强烈建议收藏的单细胞分析标准流程(基础质控与过滤)(一)

news2024/11/17 7:36:17

1. 写在前面

作为现在最火scRNAseq分析包,Seurat当之无愧。😘
本期开始我们介绍一下Seurat包的用法,先从基础质控过滤开始吧。🥳

2.用到的包

rm(list = ls())
library(Seurat)
library(tidyverse)
library(SingleR)
library(celldex)
library(RColorBrewer)
library(SingleCellExperiment)

3. 示例数据

3.1 读取10X文件

这里我们提供一个转成gene symbols的可读文件,如果大家拿到的是Ensemble ID,可以用之前介绍的方法进行转换。

adj.matrix <- Read10X("./soupX_pbmc10k_filt")


3.2 创建Seurat对象

srat <- CreateSeuratObject(adj.matrix,project = "pbmc10k") 
srat


3.3 查看Seurat对象

str(srat)

4. 提取meta.data

这里我们提取一下meta.data,顺便查看一下表头,主要是三列: 👇

  • dataset ID
  • UMI/cell (nCount_RNA);
  • detected genes/cell (nFeature_RNA)。
meta <- srat@meta.data
head(meta)

5.添加信息

5.1 添加线粒体基因信息

不知道大家还记得线粒体基因吗???🤒
scRNA-seq中,线粒体基因高表达往往代表细胞状态不佳。🧐

srat[["percent.mt"]] <- PercentageFeatureSet(srat, pattern = "^MT-")

head(srat$percent.mt)


5.2 添加核糖体基因信息

这里我们试一下添加核糖体基因的信息。👀

srat[["percent.rb"]] <- PercentageFeatureSet(srat, pattern = "^RP[SL]")

head(srat$percent.rb)

6. 去除双细胞

scRNAseq理想情况是每个barcode下只有一个细胞,但在实际情况中会有两个多个细胞共用一个barcode,我们称之为doublets。🫠

识别并去除doublets的方法很多,常用的有:👇

  • Scrublet;
  • doubletCells;
  • cxds;
  • bcds;
  • Hybrid;
  • DoubletDetection;
  • DoubletFinder;
  • Solo;
  • DoubletDecon

这里推荐大家使用DoubletFinder,我们就不进行演示了,以后再做具体介绍。🤗

因为我们事先使用Scrublet做过处理了,这里就直接导入准备好的文件吧。

doublets <- read.table("./scrublet_calls.tsv",header = F,row.names = 1)
colnames(doublets) <- c("Doublet_score","Is_doublet")
srat <- AddMetaData(srat,doublets)
head(srat[[]])

7. 可视化

7.1 小提琴图

这里我们用VlnPlot探索一下特征的分布情况。

VlnPlot(srat, 
        fill.by = "feature", # "feature", "ident"
        features = c("nFeature_RNA","nCount_RNA","percent.mt","percent.rb"),
        ncol = 4, pt.size = 0.1) +
  theme(plot.title = element_text(size=10))


7.2 散点图

这里利用散点图,我们看一下不同变量间的相关性

FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.mt")


FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")


FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.rb")


FeatureScatter(srat, feature1 = "percent.rb", feature2 = "percent.mt")


FeatureScatter(srat, feature1 = "nFeature_RNA", feature2 = "Doublet_score")

Note!

  • 这里我们可以看到高线粒体基因与低UMI计数相关,可以理解为死细胞。 🫠
  • 再看一下核糖体基因与线粒体基因,显著负相关。 😉
  • doublet基因表达数之间也有一定的相关性

8. 添加信息

8.1 过滤

接着我们定义一下过滤条件,将质量差非单细胞的数据剔除掉。🫵

srat[['QC']] <- ifelse(srat@meta.data$Is_doublet == 'True',
                       'Doublet','Pass')

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 & 
                       srat@meta.data$QC == 'Pass',
                       'Low_nFeature', srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 & 
                       srat@meta.data$QC != 'Pass' & 
                       srat@meta.data$QC != 'Low_nFeature',
                       paste('Low_nFeature', srat@meta.data$QC, sep = ','),
                       srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$percent.mt > 15 &
                       srat@meta.data$QC == 'Pass',
                       'High_MT',srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 &
                       srat@meta.data$QC != 'Pass' & 
                       srat@meta.data$QC !='High_MT',
                       paste('High_MT',srat@meta.data$QC,sep = ','),
                       srat@meta.data$QC
                       )

table(srat[['QC']])

8.2 可视化

这里我们只将通过过滤条件的数据展示出来,大家可以和过滤前的比较一下。

VlnPlot(subset(srat, subset = QC == 'Pass'), 
        features = c("nFeature_RNA", "nCount_RNA", "percent.mt","percent.rb"), 
        ncol = 4, pt.size = 0.1) +
  theme(plot.title = element_text(size=10))


花蛤
最后祝大家早日不卷!~

需要示例数据的小伙伴,在公众号回复Seurat获取吧!

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钉钉消息防撤回功能研究与实现-可查看历史消息[文件/图文/管理员/链接 撤回拦截]

研究背景 由于在某个大学进行上课的时候,遇到的某个老师,总是习惯发过的消息,到第二天的时候撤回,我们用聊天工具的其中一个原因,不就是因为可以随时去查看发过的消息吗&#xff0c;&#xff0c;而这位老师的操作,也让包括我在内的很多人感到痛不欲生。 想一想,当自己想要去看下…

Error in mounted hook: TypeError: Cannot read properties of undefined (reading isHiddenDay ) found

Error in mounted hook: TypeError: Cannot read properties of undefined (reading isHiddenDay ) found 无法读取未定义的属性‘isHiddenDay’. 在vue中使用fullcalendar在mounted钩子中渲染报错 背景 我在一个小demo中实现还是好好的&#xff0c;并且用的依赖都是6.x版本的…

初入了解——什么是VUE

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

vue3+ts项目里如何使用状态管理pinia以及数据持久化

我们都知道在vue2项目里搭配状态管理vuex3XX使用&#xff0c;效果极好的。 虽然在vue3项目里&#xff0c;vuex4XX仍能发挥余热&#xff0c;但由于缺乏对于ts的支持&#xff0c;使得类型推断陷入僵局。 所以在vue3ts的项目里&#xff0c;vuex渐被舍弃&#xff0c;pinia取而代之…

微信小程序入门教程 --(保姆级)

一、小程序注册 1、首先&#xff0c;到小程序官网注册自己的小程序账号&#xff0c;以下附有地址和教程&#xff1a; 小程序官网 进入这个地址之后&#xff0c;会看到这样的页面&#xff0c;点击立即注册按钮 2、在接下来的页面&#xff0c;选择小程序 3、然后根据提示完成三…

Web基础 HTML标签 六种超链接标签的使用方式

超链接标签&#xff08;重点&#xff09; 1、链接的语法格式&#xff1a; <a href"跳转目标链接" target"目标窗口的弹出方式"> 文本或图像 </a><a>标签里的a是单词anchor的的缩写&#xff0c;意为:锚。 两个属性的作用如下&#xff…

【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

&#x1f41a; 作者: 阿伟 &#x1f482; 个人主页: Flyme awei &#x1f40b; 希望大家多多支持&#x1f618;一起进步呀&#xff01; &#x1f4ac; 文章对你有帮助&#x1f449;关注✨点赞&#x1f44d;收藏&#x1f4c2; JavaScript数组的使用 文章目录JavaScript数组的使用…

【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定

文章目录✨什么是数据双向绑定✨数据双向绑定的原理✨Vue数据双向绑定原理✨实现数据双向绑定的步骤✨手动实现自定义组件的双向绑定的步骤✨写在最后✨什么是数据双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View。 什么是双向绑定呢&#…

基于pytorch+Resnet101加GPT搭建AI玩王者荣耀

本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorch自带的预训练模型"resnet101-5d3b4d8f.pth"本资源整理自网络&#xff0c;源地址&#xff1a;https://github.com/FengQuanLi/ResnetGPT注意运行本代码需要注意以下几点 注意&#xff01;&a…

【Unity】Button基础-按钮更换图片样式

话说&#xff0c;今天修改了一下项目中的内容&#xff0c;发现按钮不怎么好看&#xff0c;想用图片的方式改一改&#xff0c;然后点开Button&#xff0c;忽然发现好多内容都忘记了。。。 Transition&#xff08;过渡方式&#xff09;&#xff1a;按钮在状态改变时自身的过渡方式…

P2E游戏《西游降魔》站在元宇宙风口 打造高效、完整且可持续的GameFi2.0体系

引言&#xff1a;当人类大步迈入元宇宙时代&#xff0c;链上P2E游戏《西游降魔》正与元宇宙生态相伴相生&#xff0c;带领人们开启Play to Earn的变革之旅。 区块链结合游戏组成新的 GameFi 赛道&#xff0c;在 2021 年迎来爆炸式增长。各大公链如&#xff1a;ETH、BSC、OKCha…

【蓝桥杯】X进制减法、贪心思想、小白专用

问题描述&#xff1a; 解题分析&#xff1a; 首先要搞明白 X 进制与 十 进制是如何转换的&#xff0c;以 X 进制321为例 题中说明&#xff0c;3 的进制为8&#xff0c;2的进制为10&#xff0c;1的进制为2 那么开始计算&#xff1a; 1就代表一个1 2的话是十进制&#xff0c…

【论文精读】COLING 2020 -带有对偶关系图注意力网络的事件检测模型

【论文精读】COLING 2020 -带有对偶关系图注意力网络的事件检测模型 【论文原文】&#xff1a;Event Detection with Dual Relational Graph Attention Networks 【作者信息】&#xff1a;Jiaxin Mi and Po Hu and Peng Li 论文&#xff1a;https://aclanthology.org/2022.c…

Spring系列(六) --- SpringBoot 与 Servlet 的比较及 Spring 读取配置文件的方式

SpringSpringBoot VS ServletSpring 读取配置文件的方式yml 和 properties 的区别SpringBoot VS Servlet Spring 读取配置文件的方式 1 Value 注解获取单个配置项 如在 yml 中定义一个 qq 音乐的 token; 然后输出, 如下: 2 针对对象的读取: ConfigurationProperties 在 yml 中…

笔记本电脑连接不上WiFi怎么办?4个实用解决方法!

案例&#xff1a;笔记本电脑连接不上WiFi怎么办 “朋友们&#xff0c;想问问大家知道为什么我的笔记本电脑连接不上WiFi呢&#xff1f;试了好几遍还是无法连接&#xff0c;遇到这种情况我应该怎么解决呢&#xff1f;感谢大家&#xff01;” 在现代生活中&#xff0c;笔记本电…

HTTP协议详解(二)

目录 1.HTTP 响应详解 1.1认识状态码(status code) 1.2 认识响应报头(header) 1.3 认识响应正文(body) 2.构造 HTTP 请求 2.1 通过form表单构造请求 2.2 通过ajax构造请求 2.3 使用第三方工具构造请求 开始之前我们先复习一下http协议格式 1.HTTP 响应详解 我们先抓包…

【JavaScript】四个常用功能/案例:表格排序 | 替换链接 | 倒计时 | 双色球机选一注

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 &#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&am…

《文章复现》考虑用户舒适度的冷热电多能互补综合能源系统优化调度

说明书 免费&#xff1a;https://download.csdn.net/download/qq_50594161/87625438 MATLAB代码&#xff1a;考虑用户舒适度的冷热电多能互补综合能源系统优化调度 关键词&#xff1a;用户舒适度 综合能源 PMV 优化调度 参考文档&#xff1a;《冷热电气多能互补的微能源网鲁…

点击开关按钮,js实现电灯开关效果

初识js&#xff0c;跟大家分享js实现电灯开关灯效果的具体代码&#xff0c;利用简单的htmljs模拟电灯开关的小案例。 首先进行案例分析&#xff1a; 1.获取图片属性 2.判断变量的值 3.点击时切换图片 通过点击按钮实现电灯开关 以下是两张需要的图片&#xff0c;接下来添加…

vue3路由配置及路由跳转传参

1、安装路由 npm i vue-router 2、编写需要展示的路由 在src目录下创建pages文件夹&#xff0c;里面创建两个vue文件命名为student.vue,person.vue 分别编写两个vue文件 student.vue和person.vue <template>学生 </template><script setup></script…