【單細胞測序數據分析-1】認識Seurat對象數據結構/數據格式及操作

一文了解單細胞對象數據結構/數據格式,單細胞數據操作不迷茫。本文內容包括 單細胞seurat對象數據結構, 內容構成,對象的調用、操作,常見函數的應用等。

1. 單細胞seurat對象數據結構

單細胞數據結構.jpg
  • 此圖引用自周運來老師,稍作注釋。原文地址http://www.lxweimin.com/p/13142bf51e81。里面還有SingleCellExperiment,anndata,h5 數據結構的介紹,寫的很詳細,推薦閱讀。

2. 數據結構及內容

Assays

默認情況下,我們是對Seurat中的RNA的Assay進行操作。可以通過@active.assay查看當前默認的assay,通過DefaultAssay()更改當前的默認assay。
結構
counts 存儲原始數據,是稀疏矩陣
data存儲logNormalize() 規范化的data。總表達式對每個單元格的要素表達式度量進行標準化,將其乘以比例因子(默認為10,000),并對結果進行對數轉換
scale.data#存儲 ScaleData()縮放后的data,此步驟需要時間久。

meta.data

元數據,對每個細胞的描述。一般的meta.data包括orig.ident, nCount_RNA, nFeature_RNA, 以及計算后的percent.mt,RNA_snn_res.0.5等

image.png

可以通過pbmc$percent.mtpbmc[['percent.mt']]來調用、操作

reduction

降維后的每個細胞的坐標信息,包括pca,tsne,umap等

3. 對象操作

① 通過結構圖上的@,$符號依次取

② 兩個中括號操作,pbmc[[ ]]。

教程中,pbmc[['percent.MT']]向meta.data添加 percent.MT 這一列。
pbmc[[]],中括號取的是上面結構圖中的二級數據名稱

  • 以上兩種方法的區別是?

如果取的一級結構Assays的下屬內容:

無差別

 > class(pbmc[['RNA']])
 [1] "Assay"
 attr(,"package")
 [1] "Seurat"
 > class(pbmc@assays$RNA)
 [1] "Assay"
 attr(,"package")
 [1] "Seurat"

如果是一級結構meta.data里的下屬內容:

返回的數據類型不同

> class(pbmc[['nCount_RNA']])
[1] "data.frame"
> class(pbmc@meta.data$nCount_RNA)
[1] "numeric"

pbmc[['nCount_RNA']] 取出來,是所有細胞的nCount_RNA,包含細胞信息,數據框

image.png

pbmc@meta.data$nCount_RNA取出來的是單獨nCount_RNA一列,是向量
image.png

如果取的一級結構里reductions的下屬內容:

無差別

> class(pbmc[['pca']])
 [1] "DimReduc"
 attr(,"package")
 [1] "Seurat"
> class(pbmc@reductions$pca)
 [1] "DimReduc"
 attr(,"package")
 [1] "Seurat"

4. seurat常用函數的應用

之前寫了對seurat對象的主要 操作列表http://www.lxweimin.com/p/b9078c71f057,這里不贅述。下面主要看數據操作。

#數據準備
library(Seurat)
pbmc <- readRDS(file = "pbmc/pbmc3k_final.rds")
set.seed(42)
pbmc$replicate <- sample(c("rep1", "rep2"), size = ncol(pbmc), replace = TRUE) #隨機給樣本設置兩個樣本,分別為rep1,rep2,添加到metadata中。replace =T,有放回抽樣
DimPlot(pbmc, reduction = "umap")

為什么我畫出來的和教程上的不一樣?


IMG_1388.JPG
  • 切換細胞ident,簡單統計各樣本細胞cluster 頻率信息
#切換細胞ident,從細胞名稱轉為樣本rep1,rep2。繪圖看批次性
pbmc$CellType <- Idents(pbmc)
Idents(pbmc) <- "replicate"
DimPlot(pbmc, reduction = "umap")
Idents(pbmc) <- "CellType" #轉變回來,下一步使用
#查看不同樣本、細胞名稱的 細胞數量
table(Idents(pbmc))
table(pbmc$replicate)
prop.table(table(Idents(pbmc)))#計算每種細胞頻率
table(Idents(pbmc), pbmc$replicate)#計算每個樣本、每種細胞的數量
prop.table(table(Idents(pbmc), pbmc$replicate), margin = 2)#計算每個重復、每種細胞的頻率,margin=2,按照列的值 頻率和為1來計算。因為列是樣本,每個樣本的細胞頻率和為1。
  • 選擇特定細胞,取子集
#取子集的幾種方法
subset(pbmc, subset = MS4A1 > 1)
subset(pbmc, subset = replicate == "rep2")
subset(pbmc, idents = c("NK", "B"))
subset(pbmc, idents = c("NK", "B"), invert = TRUE) # 提取除了NK,B細胞之外的細胞
WhichCells(pbmc, idents = "NK")# 返回是NK細胞的細胞名
  • 提取表達矩陣GetAssayData()
GetAssayData(object, slot, assay) # slot = counts, data, scale.data
GetAssayData(object = pbmc_small[["RNA"]], slot = "data")[1:5,1:5]#出來的是稀疏矩陣,所以用as.matrix()直接轉換

##①從Assay中提取
d <- as.matrix(GetAssayData(object = pbmc_small[["RNA"]], slot = "data")[1:5,1:5])
#前五個基因和前五個細胞

##②從Seurat對象中提取
f <- as.matrix(GetAssayData(object = pbmc_small, slot = "counts")[1:5,1:5])

#提取NK細胞的表達矩陣,用于其他分析
nk.raw.data <- as.matrix(GetAssayData(pbmc, slot = "counts")[, WhichCells(pbmc, ident = "NK")]) #直接提取NK細胞的原始表達矩陣
  • 計算cluster內平均基因表達量AverageExpression()
cluster.averages <- AverageExpression(pbmc) #返回一個list元素的list。這個list元素是data.frame的list,cluster.averages$RNA$`Memory CD4 T`
head(cluster.averages[["RNA"]][, 1:5])

#將計算結果返回seurat用于下步驟計算【將空格替換成_,不然ggplot2會fail】
orig.levels <- levels(pbmc)#clusters
Idents(pbmc) <- gsub(pattern = " ", replacement = "_", x = Idents(pbmc))
orig.levels <- gsub(pattern = " ", replacement = "_", x = orig.levels)
levels(pbmc) <- orig.levels
##levels 和Ident的cluster名稱里的空格都要改
cluster.averages <- AverageExpression(pbmc, return.seurat = TRUE)#計算結果存在 cluster.averages[['RNA']]@data 中, 是matrix
cluster.averages
CellScatter(cluster.averages, cell1 = "NK", cell2 = "CD8_T")
#添加樣本作為細胞身份
cluster.averages <- AverageExpression(pbmc, return.seurat = TRUE, add.ident = "replicate")
CellScatter(cluster.averages, cell1 = "CD8_T_rep1", cell2 = "CD8_T_rep2")
DoHeatmap(cluster.averages, features = unlist(TopFeatures(pbmc[["pca"]], balanced = TRUE)), size = 3, draw.lines = FALSE) 
  • 對于其中TopFeatures() 不了解,查了下
#TopFeatures中balanced的參數,看了幫助文檔,沒明白。試一下。 
#TopFeatures適用對象就是降維后的對象,單細胞測序中pbmc[['pca']]可用,試了下pbmc[["umap"]],報錯。溢出邊界。
> unlist(TopFeatures(pbmc[["pca"]], balanced = TRUE))
positive1  positive2  positive3  positive4  positive5  positive6  positive7 
"CST3"   "TYROBP"     "LST1"     "AIF1"      "FTL"     "FTH1"      "LYZ" 
positive8  positive9 positive10  negative1  negative2  negative3  negative4 
"FCN1"   "S100A9"     "TYMP"   "MALAT1"      "LTB"     "IL32"     "IL7R" 
negative5  negative6  negative7  negative8  negative9 negative10 
"CD2"      "B2M"    "ACAP1"     "CD27"   "STK17A"     "CTSW" 
> unlist(TopFeatures(pbmc[["pca"]], balanced = FALSE))
[1] "MALAT1"   "SPI1"     "IFITM3"   "SERPINA1" "LGALS2"   "CTSS"    
[7] "S100A8"   "LGALS1"   "CFD"      "FCER1G"   "TYMP"     "S100A9"  
[13] "FCN1"     "LYZ"      "FTH1"     "FTL"      "AIF1"     "LST1"    
[19] "TYROBP"   "CST3"  

參考教程
https://satijalab.org/seurat/archive/v3.1/interaction_vignette.html
http://www.lxweimin.com/p/1a609ee4caef

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容