seurat-FindAllMarkers()源碼解析

現(xiàn)在回想單細(xì)胞項(xiàng)目的一些常規(guī)分析疏橄,clusters/groups間的差異表達(dá)分析(differential expression analysis)幾乎是分析必備項(xiàng)焕数,F(xiàn)indAllMarkers()和FindMarkers()的使用頻率非常高瀑凝。做差異表達(dá)分析的工具很多彪杉,我們?nèi)绾胃鶕?jù)自己的數(shù)據(jù)和實(shí)驗(yàn)處理方案來選擇合適的分析工具亩码,還是有些不清晰瞬场。

這次想通過梳理FindAllMarkers源碼,回答以下幾個(gè)問題:
1.scRNA-seq數(shù)據(jù)的哪些方面使差異基因分析復(fù)雜化
2.FindAllMarkers算法原理
3.FindAllMarkers使用的注意事項(xiàng)


一句喜、cluster差異表達(dá)分析

對(duì)cluster進(jìn)行差異表達(dá)分析预愤,使我們能夠找到特定于每個(gè)cluster的標(biāo)記基因,也有助于cluster的細(xì)胞類型鑒定咳胃。
根據(jù)cluster的定義植康,它受cluster本身定義方式的影響,因此在找到標(biāo)記之前確定正確的cluster分辨率很重要展懈。 如果某些cluster群缺少顯著性標(biāo)記销睁,可以嘗試調(diào)整聚類數(shù)目。

1.1 差異表達(dá)分析方法
  • FindAllMarkers比較一個(gè)cluster與所有其他cluster之間的基因表達(dá)
  • FindMarkers比較兩個(gè)特定cluster之間的基因表達(dá)
    運(yùn)行上面的函數(shù)存崖,會(huì)為每個(gè)cluster生成marker基因列表冻记,從而獲得一個(gè)cluster相對(duì)于其他cluster的表達(dá)顯著上調(diào)基因(up-regulated)和下調(diào)基因(down-regulated)。在分析中来惧,我們經(jīng)常設(shè)置FindAllMarkers的參數(shù)only.pos=True冗栗,只顯示當(dāng)前cluster陽性表達(dá)的基因。高表達(dá)的marker gene,有助于我們識(shí)別cluster細(xì)胞類型贞瞒,和后續(xù)的差異基因富集通路分析等偶房。
1.2. seurat執(zhí)行差異表達(dá)分析

根據(jù)單細(xì)胞數(shù)據(jù)預(yù)處理的方式不同(lognormalize和sctransform),執(zhí)行差異表達(dá)分析代碼有所不同军浆。
經(jīng)sctransform預(yù)處理的單細(xì)胞數(shù)據(jù)棕洋,進(jìn)行差異表達(dá)分析:

  • 1)作者推薦使用在RNA assay上做差異表達(dá)分析,而不是 SCTransform乒融。
    切換到RNA assay掰盘,對(duì)原始的基因counts矩陣進(jìn)行NormalizeData和ScaleData,獲取歸一化的seurat_obj[['RNA']]@data后赞季,進(jìn)行差異基因分析愧捕。
  • 2)但也可在SCT assay上做差異表達(dá)分析
# lognormalize預(yù)處理
DefaultAssay(pbmc) <- "RNA" 
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)

# sctransform預(yù)處理
# method1
DefaultAssay(pbmc) <- "RNA"  
pbmc <- NormalizeData(pbmc)  
all.genes <- rownames(pbmc)  
pbmc <- ScaleData(pbmc, features = all.genes)  
all.markers.RNA <- FindAllMarkers(pbmc, only.pos = T, min.pct = 0.5, logfc.threshold = 0.5) 

# 使用SCT assay進(jìn)行差異表達(dá)分析
# method2
DefaultAssay(srat) <- "SCT"  
all.markers.SCT <- FindAllMarkers(pbmc, only.pos = T, min.pct = 0.5, logfc.threshold = 0.5)  
1.3 cluster差異基因列表

Differentially expressed gene (DEG):差異表達(dá)基因
生成的差異基因列表列名說明:

名稱 解釋
gene 基因名稱
cluster 該基因?qū)?yīng)的cluster
pct.1 在當(dāng)前cluster細(xì)胞中檢測(cè)到該基因表達(dá)的細(xì)胞比例
pct.2 在其它c(diǎn)luster細(xì)胞中檢測(cè)到該基因表達(dá)的細(xì)胞比例
avg_logFC 兩組間平均logFC,Seurat v4默認(rèn)log2申钩。正值表示特征在第一組中表達(dá)得更高
p_val 未調(diào)整P-value次绘,數(shù)值越小越顯著
p_val_adj 基于使用數(shù)據(jù)集中所有特征的bonferroni校正,校正后的p值
image.png
1.4 為什么scRNA-seq的差異表達(dá)分析與bulk RNA-seq不同

由于單細(xì)胞測(cè)序技術(shù)的局限性撒遣,單細(xì)胞測(cè)序數(shù)據(jù)通常具有高噪音邮偎,有較高的dropout問題,即很多低表達(dá)或中度表達(dá)的基因無法有效檢測(cè)到义黎,造成基因表達(dá)矩陣大量的零值禾进。所以,以前針對(duì)傳統(tǒng)bulk RNA-seq測(cè)序數(shù)據(jù)開發(fā)的差異表達(dá)檢測(cè)方法或軟件不一定完全適用于單細(xì)胞測(cè)序數(shù)據(jù)廉涕。

  • scRNA-seq 受較高噪聲影響(技術(shù)和生物因素)
  • 少量可用的mRNA由于擴(kuò)增偏好性和“dropout 事件”(技術(shù)層面)
    mRNA含量低 ->低counts泻云,高dropout率,擴(kuò)增偏好性差異
  • 3' 端偏好狐蜕、部分覆蓋和測(cè)序深度不均(技術(shù)層面)轉(zhuǎn)錄的隨機(jī)性(生物層面)
  • 基因表達(dá)的多模態(tài)宠纯; 細(xì)胞群中存在多種可能的細(xì)胞狀態(tài)(生物)
1.5 常用的統(tǒng)計(jì)檢驗(yàn)
  1. 非參數(shù)檢驗(yàn),如Wilcoxon rank sum test (Mann-Whitney U test)
    例如scRNA-seq 中存在dropouts(零值)的情況层释,可能會(huì)失敗
  2. 特定于scRNA-seq的方法征椒,如MAST
    充分利用每組的大量樣本(細(xì)胞)
    MAST考慮了隨機(jī)dropouts 丟失和雙細(xì)胞的情況
  3. 特定于bulk RNA-seq,如DESeq2
    基于負(fù)二項(xiàng)分布湃累,適用于UMI數(shù)據(jù)
    注意:不應(yīng)該過濾基因,因?yàn)?DESeq2 通過借用其他具有相似表達(dá)水平的基因的信息來模擬離散度
    運(yùn)行非常慢碍讨! 僅用于比較2個(gè)cluster
算法 工具
Hurdle model combining tests for difference in mean and detection rate MAST Appropriate for read counts or molecule/UMI counts
Non-parametric, based on ranking expression Wilcoxon Robust and very easy to use
Negative binomial model GLM, parametric DESeq2/edgeR
1.6 統(tǒng)計(jì)學(xué)中的Wilcoxon rank-sum test

統(tǒng)計(jì)學(xué)中的假設(shè)檢驗(yàn):用來判斷樣本與樣本治力,樣本與總體的差異是由抽樣誤差引起還是本質(zhì)差別造成的統(tǒng)計(jì)推斷方法〔颍基本是思路類似數(shù)學(xué)中的“反證法”宵统,是先對(duì)總體做出某種假設(shè),然后通過抽樣研究的統(tǒng)計(jì)推理,對(duì)此假設(shè)應(yīng)該是拒絕或者接受马澈。
在假設(shè)檢驗(yàn)中瓢省,我們?cè)O(shè)定原假設(shè)H0和備選假設(shè)H1:

  • 原假設(shè)H0:兩組數(shù)據(jù)沒有顯著性差異,兩組相似
  • 原假設(shè)H1:兩組數(shù)據(jù)存在顯著性差異痊班,兩組不同

在假設(shè)檢驗(yàn)中勤婚,先設(shè)定原假設(shè)(H0),再設(shè)定與其相反的備擇假設(shè)(H1)涤伐。接下來隨機(jī)抽取樣本馒胆,若在原假設(shè)成立的情況下,樣本發(fā)生的概率(P)非常小凝果,說明原假設(shè)不成立祝迂,備擇假設(shè)成立,則拒絕原假設(shè)器净。否則型雳,接受原假設(shè)。

判斷依據(jù):依據(jù)小概率事件的原理山害,統(tǒng)計(jì)學(xué)上纠俭,把小概率事件在一次實(shí)驗(yàn)中看成是實(shí)際不可能發(fā)生的事件,一般認(rèn)為等于或小于0.05或0.01的概率為小概率粗恢。當(dāng)P值小于或等于顯著性水平時(shí)柑晒,則拒絕原假設(shè)。


Wilcoxon檢驗(yàn)(也稱為 Mann-Withney-Wilcoxon 檢驗(yàn)):

  • 一種非參的假設(shè)檢驗(yàn)方法眷射,這意味著它不依賴于任何特定概率分布的數(shù)據(jù)匙赞,它并不需要正態(tài)性分布的假設(shè),一般用來檢測(cè) 2 個(gè)數(shù)據(jù)集是否來自于相同分布的總體妖碉。例如涌庭,Student's t 檢驗(yàn)僅適用于數(shù)據(jù)為高斯分布或樣本量足夠大(通常 n≥30)的情況。
  • 將數(shù)據(jù)按從小到大欧宜,或等級(jí)從弱到強(qiáng)轉(zhuǎn)換成秩后夭坪,再求秩和戈二,計(jì)算檢驗(yàn)統(tǒng)計(jì)量–秩和統(tǒng)計(jì)量,做出統(tǒng)計(jì)推斷。
  • 包含:Wilcoxon rank-sum test(秩和檢驗(yàn))和 Wilcoxon signed-rank test(符號(hào)秩檢驗(yàn))

Wilcoxon秩和檢驗(yàn):推斷連續(xù)型變量資料或有序變量資料的兩個(gè)獨(dú)立樣本代表的兩個(gè)總體分布是否有差別仁热。

  • 通常在樣本的正態(tài)性假設(shè)不成立且樣本量較小時(shí)使用
  • 秩和檢驗(yàn)更適用于非成對(duì)數(shù)據(jù)之間的差異性檢測(cè),不要求被檢驗(yàn)的兩組數(shù)據(jù)包含相同個(gè)數(shù)的元素
  • 非參數(shù)統(tǒng)計(jì)假設(shè)檢驗(yàn)淑掌,用于評(píng)估兩組獨(dú)立樣本是否存在顯著差異
    image.png

    Wilcoxon秩和檢驗(yàn)步驟
  1. 從每個(gè)總體中選擇隨機(jī)樣本吊圾,設(shè) n1 和 n2 分別是較小樣本和較大樣本中的觀察數(shù);

  2. 編秩:將兩組數(shù)據(jù)n1+n2個(gè)觀測(cè)值混合挂绰,由小到大統(tǒng)一編秩屎篱;不同組遇到相同數(shù)據(jù)取平均秩次;

  3. 計(jì)算各組秩和;

  4. 建立雙尾檢驗(yàn)假設(shè)交播,確定檢驗(yàn)水準(zhǔn)

    • H0: 兩組樣本的總體中位數(shù)等于0
    • H1: 兩組樣本的樣本的中位數(shù)不等于0
    • α =0.05
  5. 根據(jù)分組樣本數(shù)重虑、各組秩和查詢臨界值表格,得出統(tǒng)計(jì)學(xué)結(jié)論秦士;

    • 利用統(tǒng)計(jì)軟件或查Wilcoxon符號(hào)秩檢驗(yàn)的分布表缺厉,
    • 如果P值較小(比如小于或等于給定的顯著性水平伍宦,如α=0.05)芽死,則可以拒絕原假設(shè);如果P值較大次洼,則沒有充分的證據(jù)來拒絕原假設(shè)关贵。


      image.png
image.png
1.7 統(tǒng)計(jì)學(xué)中的Bonferroni校驗(yàn)

問題:為什么要進(jìn)行P值校正?
當(dāng)同一研究問題下進(jìn)行多次假設(shè)檢驗(yàn)時(shí)卖毁,不再符合小概率原理所說的“一次試驗(yàn)”揖曾,需要進(jìn)行多重檢驗(yàn)校正。如果在該研究問題下只要有檢驗(yàn)是陽性的亥啦,就對(duì)該問題下陽性結(jié)論的話炭剪,對(duì)該問題的檢驗(yàn)的犯一類錯(cuò)誤的概率就會(huì)增大。如果同一問題下進(jìn)行n次檢驗(yàn)翔脱,每次的檢驗(yàn)水準(zhǔn)為α(每次假陽性概率為α)奴拦,則n次檢驗(yàn)至少出現(xiàn)一次假陽性的概率會(huì)比α大。換句話說届吁,在同時(shí)對(duì)多組數(shù)據(jù)進(jìn)行處理和比較的時(shí)候错妖,很可能其中部分?jǐn)?shù)據(jù)因?yàn)殡S機(jī)效應(yīng)而超過閾值,造成假陽性結(jié)果疚沐。而檢驗(yàn)的次數(shù)越多暂氯,出現(xiàn)假陽性的概率就越大。

Bonferroni校正:最嚴(yán)格的多重檢驗(yàn)校正方法亮蛔,該方法是由Carlo Emilio Bonferroni發(fā)展的痴施,故稱Bonferroni校正。
其校正原理為:在同一數(shù)據(jù)集上同時(shí)檢驗(yàn)n個(gè)相互獨(dú)立的假設(shè)究流,那么用于每一假設(shè)的統(tǒng)計(jì)顯著水平辣吃,應(yīng)為僅檢驗(yàn)一個(gè)假設(shè)時(shí)的顯著水平的1/n。舉個(gè)例子:如要在同一數(shù)據(jù)集上檢驗(yàn)兩個(gè)獨(dú)立的假設(shè)芬探,顯著水平設(shè)為常見的0.05齿尽。此時(shí)用于檢驗(yàn)該兩個(gè)假設(shè)應(yīng)使用更嚴(yán)格的0.025。即0.05* (1/2)灯节。假如有10個(gè)檢驗(yàn),經(jīng)過Bonferroni 校正以后,新的p值可以這樣計(jì)算1-(1-p)^(1/10)=p'炎疆,p'就是 新的顯著性水平卡骂。

我們要對(duì)數(shù)千個(gè)基因進(jìn)行統(tǒng)計(jì)測(cè)驗(yàn),所以我們可能只是偶然獲得p-values很小的基因(假陽性基因)形入,但是實(shí)際全跨,在樣本間毫無差異。每個(gè)基因的p值只是單一檢驗(yàn)(單基因)的結(jié)果亿遂。檢驗(yàn)的基因越多浓若,假陽性率就越高。所以蛇数,我們需要對(duì)基因的p值進(jìn)行多重假設(shè)檢驗(yàn)校正挪钓,從而減低假陽性結(jié)果在我們的檢驗(yàn)中出現(xiàn)的次數(shù)。
FindAllMarkers函數(shù)默認(rèn)使用Bonferroni校驗(yàn)耳舅。校驗(yàn)的次數(shù)取決于測(cè)試(基因)的數(shù)目碌上,如果我們測(cè)試較少的基因,校正就沒有那么苛刻浦徊。
Bonferroni correction: adjusted p-value = raw p-value * number of genes tested

二馏予、FindMarkers函數(shù)解析

FindMarkers函數(shù)就是一個(gè)S3泛型函數(shù);包含Seurat盔性,DimReduc霞丧,Assay等數(shù)據(jù)類型。

# NAMESPACE
S3method(FindMarkers,Assay) 
S3method(FindMarkers,DimReduc) 
S3method(FindMarkers,Seurat) 
S3method(FindMarkers,default)

FindMarkers <- function(object, ...) {  
  UseMethod(generic = 'FindMarkers', object = object)  
}

# differential_expression.R
FindMarkers.default <- function(){...}
FindMarkers.Assay <- function(){...}
FindMarkers.DimReduc <- function(){...}
FindMarkers.Seurat  <- function(){...}

案例1:找出seurat對(duì)象seurat_obj中cluster0和cluster1的差異基因冕香。

DefaultAssay(seurat_obj) <- "RNA" 
DEG_wilcox <- FindMarkers(seurat_obj, ident.1 = 0, ident.2= 1,  test.use = "wilcox", min.pct = 0.5, logfc.threshold = 0.5, only.pos = T) 
head(DEG_wilcox) 
#           p_val avg_log2FC pct.1 pct.2 p_val_adj 
# RBP7         0   1.698551 0.726 0.004         0 
# PGD          0   1.670035 0.823 0.046         0 
# AGTRAP       0   1.488062 0.833 0.136         0 
# TNFRSF1B     0   1.696910 0.858 0.119         0 
# EFHD2        0   2.097743 0.917 0.079         0 
# CDA          0   1.577383 0.760 0.001         0 
dim(DEG_wilcox) 
# [1] 789   5

2.1 在RNA assay上做差異表達(dá)分析

LogNormalize預(yù)處理后進(jìn)行差異基因分析蛹尝,F(xiàn)indMarkers函數(shù)的代碼很多,我把主要步驟記錄如下:
step1:將以上FindMarkers命令中的參數(shù)傳至FindMarkers.Seurat()函數(shù)暂筝;

object <- seurat_obj 
ident.1 = 0 
ident.2= 1 
test.use = "wilcox" 
min.pct = 0.5 
logfc.threshold = 0.5 
only.pos = T

step2:獲取歸一化的基因表達(dá)矩陣seurat_obj[['RNA']]@data箩言;在FindMarkers.Assay()函數(shù)會(huì)調(diào)用FoldChange()函數(shù)。

data.use <-  GetAssayData(object = object, slot = "data") 
fc.results <- FoldChange( 
  object = object, 
  slot = data.slot, 
  cells.1 = cells.1, 
  cells.2 = cells.2, 
  features = features, 
  pseudocount.use = pseudocount.use, 
  mean.fxn = mean.fxn, 
  fc.name = fc.name, 
  base = base 
)

step3:FoldChange.default()的計(jì)算非常關(guān)鍵焕襟。fold change是組間基因表達(dá)量的差異倍數(shù)陨收,avg_log2FC是基因在組間的平均表達(dá)量取log2,Seurat v4默認(rèn)log2鸵赖。正值表示特征在第一組中表達(dá)得更高务漩。
FoldChange計(jì)算方式如下:

# 基因表達(dá)均值計(jì)算方式
mean.fxn <- mean.fxn %||% switch( 
  EXPR = slot, 
  'data' = function(x) { 
    return(log(x = rowMeans(x = expm1(x = x)) + pseudocount.use, base = base)) 
  }, 
  'scale.data' = rowMeans, 
  function(x) { 
    return(log(x = rowMeans(x = x) + pseudocount.use, base = base)) 
  } 
) 

step4:每個(gè)基因計(jì)算在兩個(gè)細(xì)胞群的占比 pct.1和 pct.2,計(jì)算方式是:基因陽性表達(dá)細(xì)胞數(shù)/該群細(xì)胞總數(shù)它褪;

pct.1 <- round(
  x = rowSums(x = object[features, cells.1, drop = FALSE] > thresh.min) /
    length(x = cells.1),
  digits = 3
)
pct.2 <- round(
  x = rowSums(x = object[features, cells.2, drop = FALSE] > thresh.min) /
    length(x = cells.2),
  digits = 3
)

每個(gè)基因的avg_log2FC的計(jì)算:
cells.1群細(xì)胞的每個(gè)基因表達(dá)量取expm1饵骨,求平均+1,再取log2茫打;
cells.2群細(xì)胞的每個(gè)基因表達(dá)量取expm1居触,求平均+1妖混,再取log2;
每個(gè)基因的avg_log2FC計(jì)算:fc <- (data.1 - data.2)

data.1 <- mean.fxn(object[features, cells.1, drop = FALSE])
data.2 <- mean.fxn(object[features, cells.2, drop = FALSE])
mean.fxn <- mean.fxn %||% switch(
  EXPR = slot,
  'data' = function(x) {
    return(log(x = rowMeans(x = expm1(x = x)) + pseudocount.use, base = base))
  },
  'scale.data' = rowMeans,
  function(x) {
    return(log(x = rowMeans(x = x) + pseudocount.use, base = base))
  }
)
fc <- (data.1 - data.2)
image.png

step5:我們進(jìn)入到FindMarkers.default()這個(gè)函數(shù)轮洋,先判斷cluster0和cluster1的細(xì)胞數(shù)是不是滿足最小細(xì)胞數(shù)3制市,min.cells.group默認(rèn)是3個(gè),cluster0和cluster1最少要3個(gè)以上細(xì)胞弊予;顯然祥楣,符合要求。根據(jù)設(shè)置的最小百分比min.pct 和 log2FC閾值和僅保留陽性基因汉柒,對(duì)所有的36601基因進(jìn)行過濾误褪,僅保留789個(gè)基因;
step6:調(diào)用PerformDE()函數(shù)碾褂,執(zhí)行wilcox檢驗(yàn)和P值校正兽间;
p_val的計(jì)算:test.use = "wilcox",采用WilcoxDETest檢測(cè)計(jì)算出p_val斋扰;

de.results <- switch(
  EXPR = test.use,
  'wilcox' = WilcoxDETest(
    data.use = data.use,
    cells.1 = cells.1,
    cells.2 = cells.2,
    verbose = verbose
  )
)

p_val_adj的計(jì)算:對(duì)p_val進(jìn)行Bonferroni校正

de.results$p_val_adj = p.adjust(
      p = de.results$p_val,
      method = "bonferroni",
      n = nrow(x = object)
    )
image.png

匯總FindMarkers函數(shù)的主要步驟如下:


image.png

2.2 在SCT assay上做差異表達(dá)分析

經(jīng)過SCTransform預(yù)處理后進(jìn)行差異基因分析渡八,看下哪些步驟和上面的不同:

DefaultAssay(seurat_obj) <- "SCT"  
DEG_wilcox <- FindMarkers(seurat_obj, ident.1 = 0, ident.2= 1,  test.use = "wilcox", min.pct = 0.5, logfc.threshold = 0.5, only.pos = T)
head(DEG_wilcox)
# p_val avg_log2FC pct.1 pct.2 p_val_adj
# RBP7         0   1.475970 0.709 0.004         0
# PGD          0   1.464552 0.804 0.045         0
# AGTRAP       0   1.296850 0.803 0.135         0
# TNFRSF1B     0   1.473898 0.830 0.120         0
# EFHD2        0   1.821583 0.915 0.086         0
# CDA          0   1.373028 0.745 0.001         0
dim(DEG_wilcox)
# [1] 686   5
image.png

閱讀完源碼,RNA/SCT assay做差異表達(dá)分析只有輸入的歸一化矩陣不同传货,fold change計(jì)算方法完全一致屎鳍。


小心得

  1. 求基因在細(xì)胞群的平均表達(dá)量
    通過閱讀源碼,seurat在計(jì)算基因在細(xì)胞群的平均表達(dá)量不是對(duì)細(xì)胞群的每個(gè)細(xì)胞歸一化的表達(dá)值求均值问裕;而是對(duì)將細(xì)胞群的細(xì)胞歸一化的基因表達(dá)量進(jìn)行expm1還原逮壁,再求均值。這也是合理的粮宛,AverageExpression()函數(shù)在求基因的平均表達(dá)也是如此處理的窥淆。
    這個(gè)怎么理解呢?
    可以把細(xì)胞群看成一個(gè)大細(xì)胞巍杈,包含每個(gè)細(xì)胞校正后的counts忧饭,我們求單個(gè)細(xì)胞的基因表達(dá)量=基因的總counts/細(xì)胞內(nèi)總counts,另外筷畦,每個(gè)細(xì)胞考慮到測(cè)序深度的影響會(huì)乘以scale_factor進(jìn)行校正词裤;
    計(jì)算步驟:
  • 每個(gè)基因歸一化基因表達(dá)量:log1p(counts/colSums[cell-idx] *scale_factor)
  • 進(jìn)行expm1還原:
    expm1(log1p(counts/colSums[cell-idx] *scale_factor)) =counts/colSums[cell-idx]*scale_factor
    cell1的基因表達(dá)值(expm1還原)=count1/colSums[cell1]*scale_factor
    cell2的基因表達(dá)值(expm1還原)=count2/colSums[cell2]*scale_factor
    ...
    cellN的基因表達(dá)值(expm1還原)=countN/colSums[cellN]*scale_factor
  • =>基因在細(xì)胞群的表達(dá)量=(count1/colSums[cell1]+count2/colSums[cell2]+...countN/colSums[cellN])*scale_factor;
  • =>求mean=>基因的平均表達(dá)量
    問題:為什么求基因的平均表達(dá)量不需要log1p處理?
    基因的平均表達(dá)量在上面的步驟求mean后不需要log1p處理鳖宾,單個(gè)細(xì)胞的基因表達(dá)為了使其滿足正態(tài)分布會(huì)進(jìn)行l(wèi)og1p處理吼砂,但是細(xì)胞群的平均表達(dá)就不需要考慮其正態(tài)性;故不需要進(jìn)行l(wèi)og1p處理鼎文;
    如果渔肩,我們對(duì)每個(gè)細(xì)胞歸一化的變量量求均值,就會(huì)差之千里拇惋。
  1. avg_log2FC的計(jì)算梳理
    前面我們說了基因的平均表達(dá)量計(jì)算:
    cells.1群細(xì)胞的每個(gè)基因表達(dá)量取expm1周偎,求平均抹剩;
    cells.2群細(xì)胞的每個(gè)基因表達(dá)量取expm1,求平均蓉坎;
    但是我們是計(jì)算基因的avg_log2FC吧兔;所以要取log2;
    那為什么會(huì)出現(xiàn)“均值+1”袍嬉,這個(gè)怎么理解,計(jì)算方式如下:

每個(gè)基因的avg_log2FC的計(jì)算:
cells.1群細(xì)胞的每個(gè)基因表達(dá)量取expm1灶平,求平均+1伺通,再取log2;
cells.2群細(xì)胞的每個(gè)基因表達(dá)量取expm1逢享,求平均+1罐监,再取log2;
每個(gè)基因的avg_log2FC計(jì)算:fc <- (data.1 - data.2)

答:這是避免log2(基因的平均表達(dá)值)為負(fù)瞒爬,
如果基因的平均表達(dá)值=0弓柱,log2(基因的平均表達(dá)值)會(huì)負(fù);
但是log2(基因的平均表達(dá)值+1)=0侧但,避免計(jì)算結(jié)果為負(fù)矢空。

細(xì)胞群的平均表達(dá)量的方式:total sum scaling (TSS) normalization
The expm1 does un-log the data, but the normalization persists (this would be lost in the counts slot)
expm1() transformed in order to recover normalized values not in log scale
在網(wǎng)上也請(qǐng)教過一個(gè)大佬,以下是他的答復(fù)禀横,非常感謝迷茫時(shí)有人點(diǎn)燈

你要取平均屁药,很自然的應(yīng)該用原始數(shù)據(jù)啊(總共三個(gè)蘋果柏锄,五個(gè)小孩酿箭,每個(gè)小孩0.6個(gè)蘋果)。log以后的數(shù)據(jù)取平均趾娃,你說這是個(gè)什么東西表達(dá)了什么含義呢缭嫡,就很難讓人理解的。(不過你非要log以后取平均抬闷,我猜測(cè)也能得到相似的結(jié)果妇蛀,但是很難讓人理解這東西到底是個(gè)啥……)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者饶氏。
  • 序言:七十年代末讥耗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疹启,更是在濱河造成了極大的恐慌古程,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喊崖,死亡現(xiàn)場(chǎng)離奇詭異挣磨,居然都是意外死亡雇逞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門茁裙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塘砸,“玉大人,你說我怎么就攤上這事晤锥〉羰撸” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵矾瘾,是天一觀的道長女轿。 經(jīng)常有香客問我,道長壕翩,這世上最難降的妖魔是什么蛉迹? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮放妈,結(jié)果婚禮上北救,老公的妹妹穿的比我還像新娘。我一直安慰自己芜抒,他們只是感情好珍策,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挽绩,像睡著了一般膛壹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唉堪,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天模聋,我揣著相機(jī)與錄音,去河邊找鬼唠亚。 笑死链方,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灶搜。 我是一名探鬼主播祟蚀,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼割卖!你這毒婦竟也來了前酿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鹏溯,失蹤者是張志新(化名)和其女友劉穎罢维,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丙挽,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肺孵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年匀借,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片平窘。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吓肋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑰艘,到底是詐尸還是另有隱情是鬼,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布紫新,位于F島的核電站屑咳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弊琴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一杖爽、第九天 我趴在偏房一處隱蔽的房頂上張望敲董。 院中可真熱鬧,春花似錦慰安、人聲如沸腋寨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萄窜。三九已至,卻和暖如春撒桨,著一層夾襖步出監(jiān)牢的瞬間查刻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工凤类, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穗泵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓谜疤,卻偏偏與公主長得像佃延,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夷磕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容