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

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

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.mzph.cn/web/44770.shtml

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

相关文章

【香橙派 Orange pi AIpro】| 开发板深入使用体验

目录 一. &#x1f981; 写在前面二. &#x1f981; 愉快的安装流程2.1 安装前准备2.2 流程准备2.2.1 烧录镜像2.2.2 开机2.2.3 连网2.2.4 SSH远程连接开发板 2.3 体验 AI 应用样例 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 大家好&#xff0c;我是狮子呀&…

医疗级微型导轨:保障医疗行业手术安全!

微型直线导轨能成为一种专为医疗行业设备运用的高精度线性运动设备&#xff0c;在现代医疗领域&#xff0c;精准的位置控制和平稳的运动对于确保医疗设备的高效性能至关重要。那么&#xff0c;医疗行业对微型导轨有哪些要求呢&#xff1f; 1、精度&#xff1a;在手术过程中&…

C++客户端Qt开发——开发环境

一、QT开发环境 1.安装三个部分 ①C编译器&#xff08;gcc&#xff0c;cl.exe……) ②QT SDK SDK-->软件开发工具包 比如&#xff0c;windows版本QT SDK里已经内置了C的编译器&#xff08;内置编译器是mingw&#xff0c;windows版本的gcc/g&#xff09; ③QT的集成开发…

智慧园区规划建设解决方案PPT(40页)

智慧园区规划建设解决方案摘要 1. 园区定义与发展历程 园区&#xff0c;亦称开发区&#xff0c;是在特定产业和区域政策指导下形成的区域。它们通过提供基础设施和生产空间&#xff0c;吸引投资&#xff0c;形成技术、资本密集区&#xff0c;推动经济发展。园区发展经历了四代…

Docker 部署 ShardingSphere-Proxy 数据库中间件

文章目录 Github官网文档ShardingSphere-Proxymysql-connector-java 驱动下载conf 配置global.yamldatabase-sharding.yamldatabase-readwrite-splitting.yamldockerdocker-compose.yml Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为…

【qt】TCP客户端信息的接受和发送

当有信息时的槽函数关联 跟服务端收到信息一样,当可以读一行的时候,就从套接字读一行. 发送信息也是和服务端如出一辙,通过write(). 运行结果:

Spring MVC 中的文件上传 和 文件下载

Spring MVC 中的文件上传 和 文件下载 文章目录 Spring MVC 中的文件上传 和 文件下载1. Spring MVC 中的文件上传2. Spring MVC 中的文件下载3. 总结&#xff1a;4. 最后&#xff1a; 1. Spring MVC 中的文件上传 文件上传是&#xff1a;浏览器端向服务器发送文件&#xff0c…

C 语言结构体

由于近期项目需求,需使用到大量的指针与结构体&#xff0c;为更好的完成项目&#xff0c;故对结构体与指针的内容进行回顾&#xff0c;同时撰写本博客&#xff0c;方便后续查阅。 本博客涉及的结构体知识有&#xff1a; 1.0&#xff1a;结构体的创建和使用 2.0: typedef 关…

解锁音乐密码,人工智能创作动人歌词

在音乐的神秘世界里&#xff0c;每一段旋律都像是一把等待开启的密码锁&#xff0c;隐藏着无尽的情感与故事。而如今&#xff0c;人工智能正以其独特的智慧和创造力&#xff0c;帮助我们解锁这些音乐密码&#xff0c;创作出动人的歌词。 “妙笔生词智能写歌词软件&#xff08;…

Provider(1)- 什么是AudioBufferProvider

什么是AudioBufferProvider&#xff1f; 顾名思义&#xff0c;Audio音频数据缓冲提供&#xff0c;就是提供音频数据的缓冲类&#xff0c;而且这个AudioBufferProvider派生出许多子类&#xff0c;每个子类有不同的用途&#xff0c;至关重要&#xff1b;那它在Android哪个地方使…

访问 Postman OAuth 2.0 授权的最佳实践

OAuth 2.0 代表了 web 安全协议的发展&#xff0c;便于在多个平台上进行授权服务&#xff0c;同时避免暴露用户凭据。它提供了一种安全的方式&#xff0c;让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端&#xff0c;支持 …

探索4D毫米波雷达和摄像头在自动驾驶中的潜力

随着自动驾驶技术的快速发展&#xff0c;关于各种传感器的必要性&#xff0c;尤其是LiDAR&#xff08;激光雷达&#xff09;与毫米波雷达结合摄像头的作用&#xff0c;激发了激烈的讨论。在这篇博客中&#xff0c;我们将探讨4D毫米波雷达和摄像头的组合是否可能成为自动驾驶车辆…

将vue项目整合到springboot项目中并在阿里云上运行

第一步&#xff0c;使用springboot中的thymeleaf模板引擎 导入依赖 <!-- thymeleaf 模板 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> 在r…

聊聊接入Arbitrum的正确姿势

本文首发于公众号&#xff1a;Keegan小钢 前言 我们知道&#xff0c;目前最主流的 Ethereum Layer2 方案中&#xff0c;主要有 Optimistic Rollup 和 ZK Rollup 两大类。而 Optimistic Rollup 的实现方案中&#xff0c;则是 Optimism 和 Arbitrum 最受关注。而我们最近接入了 …

Java套红:指定位置合并文档-NiceXWPFDocument

需求&#xff1a;做个公文系统&#xff0c;需要将正文文档在某个节点点击套红按钮&#xff0c;实现文档套红 试了很多方法&#xff0c;大多数网上能查到但是实际代码不能找到关键方法&#xff0c;可能是跟包的版本有关系&#xff0c;下面记录能用的这个。 一&#xff1a;添加依…

redis-cli 连接Redis

Redis-cli介绍 redis-cli 是原生 Redis 自带的命令行工具&#xff0c;您可以在云主机或本地设备上通过 redis-cli 连接 Redis 数据库&#xff0c;进行数据管理。 redis-cli 客户端的使用方法&#xff0c;请参考官方文档。 连接命令 redis-cli -h <redis_instance_address…

一个极简的 Vue 示例

https://andi.cn/page/621516.html

【qt】客户端连接到服务器

获取到IP地址和端口号. 通过connectToHost() 来进行连接. 对于客户端来讲,只需要socket即可. 客户端连接服务端只需要使用套接字(Socket)来进行通信。客户端通过创建一个套接字来连接服务端&#xff0c;然后可以通过套接字发送和接收数据。套接字提供了一种简单而灵活的方式来…

接口安全配置

问题点&#xff1a; 有员工在工位在某个接口下链接一个集线器&#xff0c;从而扩展上网接口&#xff0c;这种行为在某些公司是被禁止的&#xff0c;那么网络管理员如何控制呢&#xff1f;可以配置接口安全来限制链接的数量&#xff0c;切被加入安全的mac地址不会老化&#xff…

JS实现:统计字符出现频率/计算文字在文本中的出现次数

要实现这个功能&#xff0c;JavaScript 一个非常强大的方法&#xff0c;那就是reduce() reduce() 它用于将数组的所有元素减少到一个单一的值。这个值可以是任何类型&#xff0c;包括但不限于数字、字符串、对象或数组。 reduce() 方法接收一个回调函数作为参数&#xff0c;这个…