全网最详细单细胞保姆级分析教程(二) --- 多样本整合

news2024/11/16 16:22:25

上一节我们研究了如何对单样本进行分析,这节我们就着重来研究一下如何对多样本整合进行研究分析!

1. 导入相关包

library(Seurat)
library(tidyverse)
library(patchwork)

2. 数据准备

# 导入单样本文件
dir = c(
  '~/Desktop/diversity intergration/scRNA_26-0_filtered_feature_bc_matrix',
  '~/Desktop/diversity intergration/scRNA_27-2_filtered_feature_bc_matrix',
  '~/Desktop/diversity intergration/scRNA_28-0_filtered_feature_bc_matrix'
)
2.1 方法一
# 导入数据
counts <- Read10X(data.dir = dir)
# 转换为seurat对象
scRNA1 <- CreateSeuratObject(counts = counts,min.cells = 3,min.features = 200)
dim(scRNA1)
# 查看每个样本的细胞
table(scRNA1@meta.data$orig.ident)
# healthy1 healthy2 healthy3 
#     6037     6343    11657 
2.2 方法二
scRNAlist <- list()  # 创建一个空的列表,其中包含三个seurat对象
for (i in 1:length(dir)){
  counts <- Read10X(data.dir = dir[i])
  scRNAlist[[i]] <- CreateSeuratObject(counts = counts,min.cells = 3,min.features =     200)
  scRNAlist[[i]] <- RenameCells(scRNAlist[[i]],add.cell.id = sample_name[i])
}

3. 合并数据

scRNA <- merge(scRNAlist[[1]],y = c(scRNAlist[[2]],scRNAlist[[3]]))
dim(scRNA)
# [1] 18037 24037

4. 数据标准化和选择高变基因

# 每一个样本分别进行数据标准化和提取高变基因
for (i in 1:length(scRNAlist)){
  scRNAlist[[i]] <- NormalizeData(scRNAlist[[i]])
  scRNAlist[[i]] <- FindVariableFeatures(scRNAlist[[i]],selection.method = 'vst',nfeatures = 2000) # 这里我们只需要2000的基因
}

5. 提取锚点

# 以variableFeatures为基础寻找锚点
scRNA.anchors <- FindIntegrationAnchors(object.list = scRNAlist)
dim(scRNA.anchors)

6. 利用锚点整合数据

# 利用锚点整合数据
scRNA.integrated <- IntegrateData(anchorset = scRNA.anchors)
dim(scRNA.integrated)
# [1]  2000 24037

7. 数据缩放

# 设置默认的分析方法为integrated
# ScaleData 函数的作用是对数据进行标准化或归一化处理,以确保不同特征之间具有可比性,并减少数据的偏差和方差。通过缩放数据,可以使后续的分析更加稳定和可靠。
DefaultAssay(scRNA.integrated) <- 'integrated'
scRNA.integrated <-ScaleData(scRNA.integrated,verbose = FALSE)
# scRNA.integrated 对象中的数据将被缩放,并可用于后续的分析步骤,如降维、聚类、差异表达分析等。

8. PCA降维

scRNA.integrated <- 			      RunPCA(scRNA.integrated,features=VariableFeatures(scRNA.integrated))
8.1 热图
DimPlot(scRNA.integrated,reduction = 'pca',group.by = 'orig.ident')

请添加图片描述

8.2 肘图
ElbowPlot(scRNA.integrated,ndims = 30,reduction = 'pca')
# 从图中可以看出我们最好应该选择前20个维度的数据

请添加图片描述

9. 细胞聚类

scRNA <- FindNeighbors(scRNA.integrated,dims = 1:20)
scRNA <- FindClusters(scRNA,resolution = 0.1) # 0.5聚类的结果太多
table(scRNA@meta.data$seurat_clusters)
metadata <- scRNA@meta.data
# 单独将数据提取出来
cell_cluster <-  data.frame(cell_ID=rownames(metadata),cluster_ID=metadata$seurat_clusters)

10. 降维

10.1 umap降维
scRNA <- RunUMAP(scRNA,dims = 1:20)
embed_umap <- Embeddings(scRNA,'umap')

请添加图片描述

10.1.1 group_by_cluster
DimPlot(scRNA,reduction = 'umap')

请添加图片描述

10.1.2 group_by_sample
DimPlot(scRNA,reduction = 'umap',group.by = 'orig.ident')

请添加图片描述

10.2 tsne降维
scRNA <- RunTSNE(scRNA,dims = 1:20)
embed_tsne <- Embeddings(scRNA,'tsne')

请添加图片描述

10.2.1 group_by_cluster
DimPlot(scRNA,reduction = 'tsne')

请添加图片描述

10.2.2 group_by_sample
DimPlot(scRNA,reduction = 'umap',group.by = 'orig.ident')

请添加图片描述

10.3 umap和tsne的探究

UMAP(Uniform Manifold Approximation and Projection)和 t-SNE(t-Distributed Stochastic Neighbor Embedding)都是用于降维和数据可视化的技术,它们有一些区别和联系:

区别:

  1. 算法原理:UMAP 和 t-SNE 采用了不同的数学方法来实现降维和可视化。UMAP 基于流形学习的思想,试图保持数据的全局结构和局部邻域关系;而 t-SNE 则主要关注数据点之间的局部相似性,并将高维数据映射到低维空间中,使得相似的数据点在低维空间中更接近。
  2. 结果解释:UMAP 通常能够更好地保持数据的全局结构,对于具有复杂拓扑结构的数据可能更有效;而 t-SNE 更擅长捕捉数据的局部结构和聚类信息,但可能对全局结构的保持相对较弱。
  3. 计算效率:UMAP 在处理大规模数据集时通常比 t-SNE 更高效,因为它的计算复杂度较低。
  4. 参数调整:UMAP 和 t-SNE 都有一些参数需要调整,例如邻居数量、 perplexity 等。然而,UMAP 对参数的选择相对较不敏感,而 t-SNE 的结果可能对参数的选择更为敏感。

联系:

  1. 数据可视化:UMAP 和 t-SNE 都可以用于将高维数据可视化在低维空间中,帮助人们理解数据的分布和结构。
  2. 探索性数据分析:它们都可以作为探索性数据分析的工具,帮助发现数据中的模式、聚类和异常值。
  3. 与其他分析结合:UMAP 和 t-SNE 的结果可以与其他分析方法结合使用,例如聚类分析、分类器等,以进一步挖掘数据的信息。

11. 质控

# 切换数据集
DefaultAssay(scRNA) <- 'RNA'
# 计算线粒体和红细胞的基因比例
scRNA[['percent.mt']] <- PercentageFeatureSet(scRNA,pattern = 'MT-')

# 通常是指与血红蛋白(Hemoglobin)相关的基因
HB.genes <- c("HBA1","HBA2","HBB","HBD","HBE1","HBG1","HBG2","HBM","HBQ1","HBZ")
HB_m <- match(HB.genes, rownames(scRNA@assays$RNA)) # 匹配已经拥有的基因,返回一个含有下标的向量
HB.genes <- rownames(scRNA@assays$RNA)[HB_m]
scRNA[["percent.HB"]]<-PercentageFeatureSet(scRNA, features=HB.genes)

##meta.data添加信息
proj_name <- data.frame(proj_name=rep("demo2",ncol(scRNA)))
rownames(proj_name) <- row.names(scRNA@meta.data)
scRNA <- AddMetaData(scRNA, proj_name)
11.1 可视化
# 绘制小提琴图
# 所有样本一个小提琴图用group.by="proj_name",每个样本一个小提琴图用group.by="orig.ident"
plot7 <-VlnPlot(scRNA, group.by = "proj_name",  raster=FALSE,
                 features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), 
                 pt.size = 0, #不需要显示点,可以设置pt.size = 0
) + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) # 将x轴的标题,文本和刻度线都设置为空,这样x轴就不会显示任何内容
plot1 <- FeatureScatter(scRNA, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(scRNA, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot3 <- FeatureScatter(scRNA, feature1 = "nCount_RNA", feature2 = "percent.HB")
pearplot <- CombinePlots(plots = list(plot1, plot2), nrow=1, legend="none") 
pearplot

请添加图片描述
请添加图片描述
请添加图片描述

11.2 去除极端细胞
# 去除细胞特征过高和过低的细胞
scRNA <- subset(scRNA, subset = nFeature_RNA > 200 & nFeature_RNA < 4000 & percent.mt < 10)

12. 归一化

# 数据归一化
scRNA <- NormalizeData(scRNA, normalization.method = "LogNormalize", scale.factor = 10000)

13. 鉴定高变基因

# 鉴定高变基因
# 这一步的目的是鉴定出细胞与细胞之间表达相差很大的基因,用于后续鉴定细胞类型
# 我们使用默认参数,用vst方法选出2000个高变基因
scRNA <- FindVariableFeatures(scRNA,selection.method = 'vst',nfeatures = 2000)
dim(scRNA) # 但是这里跑程序的时候基因的数量不对,还没有找到原因
# [1] 18037 21402

# 前十个高变基因
top10 <- head(VariableFeatures(scRNA),10)
top10
#  [1] "PTGDS"    "S100A9"   "S100A8"   "CST3"     "TRBV11-2" "HLA-DQA1" "HLA-DRA"  "C1QA"  "LILRA4"   "LYZ"   

可视化

plot1 <- VariableFeaturePlot(scRNA)
plot2 <- LabelPoints(plot = plot1,points = top10,repel = TRUE,xnudge = 0,ynudge = 0)

14. 细胞注释

Idents(scRNA) <- 'integrated_snn_res.0.5'
plot3 = DimPlot(scRNA, reduction = "umap", label=T)

请添加图片描述

# 鉴定细胞类型
# 为了后续分析的方便,我们先用singleR来预测每个cluster的细胞类型
library(celldex)
library(SingleR)
cg <- ImmGenData() # 选定一个参考集数据,ImmGenData是一个免疫细胞的数据集
cellpred <- SingleR(test=testdata,ref=cg, labels=cg$label.main)
table(cellpred$labels) # 看看都注释到了哪些细胞
#      B cells      Basophils Endothelial cells       Eosinophils  Epithelial cells 
#       20337            1               224               595                31 
#       Fibroblasts               ILC       Macrophages        Mast cells 
#                3               205                 5                 1 
# 由得到的结果可以看出,用SingerR注释的结果太拉胯了,虽然手动注释比较麻烦,但是为了数据的准确性还是手动注释吧

cellType=data.frame(seurat=scRNA@meta.data$seurat_clusters,
                    predict=cellpred$labels)
table(cellType[,1:2]) # 访问celltyple的2~3列

####细胞注释
scRNA.sub <- subset(scRNA, idents = c(1,3,4,7), invert = TRUE) # 挑选需要的簇
scRNA.sub
new.cluster.ids <- c(
  "1" = "CD4 T",
  "2" = "Monocyte",
  "3" = "CD4 T",
  "4" = "NK",
  "5" = "Monocyte",
  "6" = "CD8 T",
  "7" = "B",
  "8" = "CD8 T",
  "9" ="Monocyte",
  "11"="NK",
  "13" = "Monocyte",
  "14" = "Monocyte",
  "16" = "CD4 T",
  "17" = "DC",
  "18" = "B",
  "19"="NK",
  "20"="Monocyte",
  "21"="DC",
  "22" = "B",
  "25"="NK"
)
scRNA.sub <- RenameIdents(scRNA.sub, new.cluster.ids)
options(repr.plot.height = 6, repr.plot.width = 8)
scRNA.sub$cell_type <- Idents(scRNA.sub)
Idents(scRNA.sub) <- "cell_type"
DimPlot(scRNA.sub, reduction = "umap", label = TRUE,raster=FALSE)

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

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

相关文章

基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

WAF基础介绍

WAF 一、WAF是什么&#xff1f;WAF能够做什么 二 waf的部署三、WAF的工作原理 一、WAF是什么&#xff1f; WAF的全称是&#xff08;Web Application Firewall&#xff09;即Web应用防火墙&#xff0c;简称WAF。 国际上公认的一种说法是&#xff1a;Web应用防火墙是通过执行一…

电表及销售统计Python应用及win程序2

接着上一篇给代码添加了表格功能&#xff0c;方便更好的处理数据。 import json import os from datetime import datetime from tkinter import * from tkinter import messagebox from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure …

JAVA设计模式>>结构型>>适配器模式

本文介绍23种设计模式中结构型模式的适配器模式 目录 1. 适配器模式 1.1 基本介绍 1.2 工作原理 1.3 适配器模式的注意事项和细节 1.4 类适配器模式 1.4.1 类适配器模式介绍 1.4.2 应用实例 1.4.3 注意事项和细节 1.5 对象适配器模式 1.5.1 基本介绍 1.5.2 …

visual studio 2019版下载以及与UE4虚幻引擎配置(过程记录)(官网无法下载visual studio 2019安装包)

一、概述 由于需要使用到UE4虚幻引擎&#xff0c;我使用的版本是4.27版本的&#xff0c;其官方默认的visual studio版本是2019版本的&#xff0c;相应的版本对应关系可以通过下面的官方网站对应关系查询。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

java实现资产管理系统图形化用户界面

创建一个&#x1f495;资产管理系统的GUI&#xff08;图形用户界面&#xff09;❤️画面通常需要使用Java的Swing或者JavaFX库。下面我将提供一个简单的资产管理系统GUI的示例代码&#xff0c;使用Java Swing库来实现。这个示例将包括一个主窗口&#xff0c;一个表格来显示资产…

捷配笔记-如何设计PCB板布线满足生产标准?

PCB板布线是铺设连接各种设备与通电信号的路径的过程。PCB板布线是铺设连接各种设备与通电信号的路径的过程。 在PCB设计中&#xff0c;布线是完成产品设计的重要步骤。可以说&#xff0c;之前的准备工作已经为它做好了。在整个PCB设计中&#xff0c;布线设计过程具有最高的极限…

Web浏览器通过串口读取RFID卡号js JavaScript

本示例使用的读卡器&#xff1a;USB转RS232COM虚拟串口RFID读卡器主动读卡Web浏览器Andro、Linux-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"…

翁恺-C语言程序设计-05-3. 求a的连续和

05-3. 求a的连续和 输入两个整数a和n&#xff0c;a的范围是[0,9]&#xff0c;n的范围是[1,8]&#xff0c;求数列之和S aaaaaa…aaa…a&#xff08;n个a&#xff09;。如a为2、n为8时输出的是222222…22222222的和。 输入格式&#xff1a; 输入在一行中给出两个整数&#xf…

深入了解 MySQL 的 EXPLAIN 命令

一、什么是 EXPLAIN 命令&#xff1f; EXPLAIN 命令用于显示 MySQL 如何执行某个 SQL 语句&#xff0c;尤其是 SELECT 语句。通过 EXPLAIN 命令&#xff0c;可以看到查询在实际执行前的执行计划&#xff0c;这对于优化查询性能至关重要。 二、EXPLAIN 的基本用法 要使用 EXP…

【算法篇】KMP算法,一种高效的字符串匹配算法

我们今天了解一个字符串匹配算法-KMP算法&#xff0c;内容难度相对来说较高&#xff0c;建议先收藏再细品&#xff01;&#xff01;&#xff01; KMP算法的基本概念 KMP算法是一种高效的字符串匹配算法&#xff0c;由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt提出的&#…

Cxx Primer-CP-2

开篇第一句话足见作者的高屋建瓴&#xff1a;类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形&#xff0c;则为通常的算术意义。若它们都为字符串型&#xff0c;则为进行拼接操作。若为用户自定义的class类型&#xff0c;则…

《Linux系统编程篇》Visual Studio Code配置下载,中文配置,连接远程ssh ——基础篇

引言 vscode绝对值得推荐&#xff0c;非常好用&#xff0c;如果你能体会其中的奥妙的话。 工欲善其事&#xff0c;必先利其器 ——孔子 文章目录 引言下载VS Code配置VS Code中文扩展连接服务器 连接服务器测试确定服务器的IP地址VS code 配置ssh信息选择连接到主机选择这个添…

K8s学习笔记1-搭建k8s集群

本次使用kubeadm方式&#xff0c;部署1.23.17版本 安装包百度云盘地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1UrIotP253DoyDIYB7G1C0Q 提取码&#xff1a;8q6a 集群所需虚拟机环境 主机名称IP资源harbor10.0.0.2301c2gmaster10.0.0.2312c4gworker110.0.0…

全新UI自助图文打印系统源码(含前端小程序源码 PHP后端 数据库)

最新自助图文打印系统和证件照云打印小程序源码PHP后端&#xff0c;为用户用户自助打印的服务&#xff0c;包括但不限于文档、图片、表格等多种格式的文件。此外&#xff0c;它们还提供了诸如美颜、换装、文档打印等功能&#xff0c;以及后台管理系统&#xff0c;方便管理员对打…

7.13 专题训练DP

P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ac代码 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) const ll mod 1e97;int main() {IOS;int n;cin>>n;int a[…

面向对象与C++进阶—并发与多线程篇

文章目录 18. 并发与多线程篇说在前面(1).线程和进程(2).并发和并行(3).thread(C11)#1.thread库与thread类#2.join和detach方法#3.id类和get_id方法#4.this_thread和系列操作 (4).原子操作#1.为什么是原子?#2.为什么需要原子操作&#xff1f;#3.atomic库 (5).竞态条件(6).线程…

7-1、2、3 IPFS介绍使用及浏览器交互(react+区块链实战)

7-1、2、3 IPFS介绍使用及浏览器交互&#xff08;react区块链实战&#xff09; 7-1 ipfs介绍7-2 IPFS-desktop使用7-3 reactipfs-api浏览器和ipfs交互 7-1 ipfs介绍 IPFS区块链上的文件系统 https://ipfs.io/ 这个网站本身是需要科学上网的 Ipfs是点对点的分布式系统 无限…

TEB局部路径规划算法代码及原理解读

TEB(Timed Elastic Band) 是一个基于图优化的局部路径规划算法&#xff0c;具有较好的动态避障能力&#xff0c;在ROS1/ROS2的导航框架中均被采用。该图优化以g2o优化框架实现&#xff0c;以机器人在各个离散时刻的位姿和离散时刻之间的时间间隔为顶点&#xff0c;约束其中的加…

IEEE(常用)参考文献引用格式详解 | LaTeX参考文献规范(IEEE Trans、Conf、Arxiv)

IEEE参考文献引用格式注意事项 期刊已正式出版&#xff08;有期卷号&#xff09;录用后在线访问即Early access&#xff08;无期卷号&#xff09; Arxiv论文会议论文IEEE缩写进阶其他 IEEE论文投稿前的参考文献格式检查&#xff01;&#xff08;如果一些细节你采用别的形式&…