全網最詳細單細胞保姆級分析教程(二) --- 多樣本整合

上一節我們研究了如何對單樣本進行分析,這節我們就著重來研究一下如何對多樣本整合進行研究分析!

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.pswp.cn/web/44770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44770.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux上如何安裝ffmpeg視頻處理軟件

在Linux上安裝ffmpeg需要以下步驟&#xff1a; 更新系統 在開始安裝之前&#xff0c;首先需要更新系統以獲取最新的軟件包列表和版本。在終端中執行以下命令&#xff1a; sudo apt update sudo apt upgrade安裝依賴庫 ffmpeg依賴于一些庫和工具&#xff0c;需要先安裝它們。在…

【香橙派 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的集成開發…

Python編程中用函數還是用復雜的表達式

要不要使用復雜表達式 Perl語言的原作者Larry Wall曾經說過&#xff0c;偉大的程序員都有三個優點&#xff1a;懶惰、暴躁和自負。乍一看這三個詞語沒有一個是褒義詞&#xff0c;但在程序員的世界里&#xff0c;這三個詞有不同的意義。首先&#xff0c;懶惰會促使程序員去寫一…

智慧園區規劃建設解決方案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(). 運行結果:

java EnumSet 介紹

EnumSet 是 Java Collections Framework 中專門為枚舉類型設計的高效集合實現。與其他集合類相比,EnumSet 提供了許多優點,如高效性、類型安全和易用性。它只能包含單個枚舉類型的值,并且在內部使用位向量實現,因而在空間和時間上都非常高效。 EnumSet 的特點 高效性:Enu…

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;支持 …

亞馬遜店鋪注冊

**步驟一&#xff1a;準備注冊相關資料** 在注冊之前&#xff0c;請準備以下資料&#xff1a; 1.公司營業執照照片&#xff08;清晰完整的拍照上傳&#xff09; 2.法人身份證正反面照片&#xff08;清晰完整的拍照上傳&#xff09; 3.雙幣付款信用卡&#xff08;VISA&#xff0…

[PaddlePaddle飛槳] PaddleSpeech-自動語音識別-小模型部署

PaddleSpeech的GitHub項目地址 環境要求&#xff1a; gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下載指令&#xff1a; python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…

探索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;添加依…