作者:童蒙
編輯:angelica
函數(shù)1—scanpy.pp.regress_out
01 功能
去除非期望來源的方差對數(shù)據(jù)的影響。使用的是簡單的線性回歸模型,同seurat的regressOut類似,然而,在某些情況下需要注意,可以參見:https://github.com/theislab/scanpy/issues/526
對于不同的數(shù)據(jù),可能效果不一樣,需要仔細分辨。比如下圖第一行的,經(jīng)過regress_out后,PC2已經(jīng)降低了很多;而對于第二行的數(shù)據(jù),由于包含了各種細胞類型,不管PC1還是PC2都同檢測的基因數(shù)有關(guān),因此取出后,感覺更怪異了。
對于細胞周期,第三行很好地分開G1 和 G2 M/S期,而第四行卻不行,可能跟細胞類型多有關(guān)。
因此在使用這個函數(shù)的時候需要注意,regress_out會去除方差,然而通常去除的MT表達量或者細胞周期都是生物方差,而不是技術(shù)方差。去除生物方差的時候,可能會對其他的過程有影響,會誤傷到我們想關(guān)注的因素。也許在做軌跡推斷有幫助,但是在聚類的時候會有干擾。例如細胞的分裂周期可能跟細胞類型有關(guān)(不同的細胞類型也許會處于不同的細胞周期,比如干細胞和增值細胞),MT的表達可能跟某些生理因素相關(guān),因此在去除的時候需要注意。
02 參數(shù)
- adata:AnnData
- keys:選擇的obs中的key
03 例子
sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])
04 代碼片段
利用Gaussian來去除方差,y為表達量,x為選擇的obs;并且獲得分析后的殘差,修改y, 即adata.X
result = sm.GLM(
data_chunk[:, col_index], regres, family=sm.families.Gaussian()
).fit()
new_column = result.resid_response
函數(shù)2—scanpy.pp.scale
將數(shù)據(jù)歸一化到mean=0,var=1。
如果某個基因沒有任何方差,也會被保留,如果設(shè)置了zero_center=True,那么會設(shè)置為0 ,未來會設(shè)置為NaN。否則會丟掉這個基因。
Variables (genes) that do not display any variation (are constant across all observations) are retained and (for zero_center==True) set to 0 during this operation. In the future, they might be set to NaNs.