考慮空間位置的通訊分析手段---CellphoneDB(V3.0)

新的一周揖庄,新的開(kāi)始阿逃,今天我們來(lái)分享一個(gè)cellphoneDB的升級(jí)版骡男,CellphoneDB的V3.0版本,升級(jí)的最大改進(jìn)在于服務(wù)于空間轉(zhuǎn)錄組的通訊分析夭谤,會(huì)結(jié)合空間位置和生態(tài)位進(jìn)行有效通訊的識(shí)別和判斷棺牧,我們來(lái)看一下。

關(guān)于CellphoneDB朗儒,大家應(yīng)該都不陌生颊乘,目前做通訊分析引用率最高的軟件,之前的版本升級(jí)到2之前都是服務(wù)于單細(xì)胞的數(shù)據(jù)分析的醉锄,但是現(xiàn)在作者將軟件升級(jí)到3乏悄,就是將空間轉(zhuǎn)錄組納入分析,非常棒的想法和運(yùn)用恳不,參考文章在Mapping the temporal and spatial dynamics of the human endometrium in vivo and in vitro,2021年12月份發(fā)表于Nature Genetics檩小,IF38.330,文獻(xiàn)的內(nèi)容我們下一篇再分享烟勋,這一片我們專注于CellphoneDB(V3.0)规求。

CellphoneDB(V3.0)的創(chuàng)新點(diǎn)

  • 合并空間信息 CellPhoneDB 現(xiàn)在允許通過(guò)微環(huán)境文件合并細(xì)胞的空間信息筐付。 這是一個(gè)兩列文件,指示哪種細(xì)胞類型在哪個(gè)空間微環(huán)境中(參見(jiàn)示例見(jiàn)下圖)阻肿。 CellphoneDB 將使用此信息來(lái)定義可能的交互細(xì)胞對(duì)(即在微環(huán)境中共享/共存的集群對(duì))瓦戚。 可以使用 cell2location(關(guān)于cell2location分享了多次,大家可以參考文章 10X單細(xì)胞和空間聯(lián)合分析的方法---cell2location,10X單細(xì)胞空間聯(lián)合分析之再次解讀cell2location 定義具有先驗(yàn)知識(shí)丛塌、成像或 Visium 分析的微環(huán)境较解。
cell_type microenviroment
epi_Ciliated Proliferative
epi_Pre-ciliated Proliferative
epi_SOX9_LGR5 Proliferative
epi_SOX9_prolif Proliferative
epi_SOX9 Proliferative
Fibroblast eS Proliferative
Lymphoid Proliferative
Myeloid Proliferative
Fibroblast C7 Proliferative
epi_Ciliated Secretory
epi_Lumenal 1 Secretory
epi_Lumenal 2 Secretory
epi_Glandular Secretory
epi_Glandular_secretory Secretory
Fibroblast dS Secretory
Lymphoid Secretory
epi_SOX9 Secretory
Fibroblast C7 Secretory
Myeloid Secretory
  • 添加了新的分析方法,使用差異表達(dá)基因 (DEG) 而不是 random shuffling(cellphonedb 方法 degs_analysis)姨伤。 這種方法將選擇所有基因都由高于--閾值的一小部分細(xì)胞表達(dá)并且至少一個(gè)基因是 DEG 的相互作用哨坪。 可以使用喜歡的工具識(shí)別 DEG,并通過(guò)文本文件將信息提供給 CellphoneDB乍楚。 第一列應(yīng)該是細(xì)胞類型/cluster当编,第二列應(yīng)該是相關(guān)的基因 id。 其余列將被忽略(參見(jiàn)示例見(jiàn)下表)徒溪。 這里提供了為 Seurat 和 Scanpy 的參考示例忿偷。
圖片.png
  • Database update WNT pathway has been further curated.
圖片.png

先來(lái)看看R版本的分析(聯(lián)合Seurat)

library(Seurat)
library(SeuratObject)
library(Matrix)
so = readRDS('endometrium_example_counts_seurat.rds')
writeMM(so@assays$RNA@counts, file = 'endometrium_example_counts_mtx/matrix.mtx')
# save gene and cell names
write(x = rownames(so@assays$RNA@counts), file = "endometrium_example_counts_mtx/genes.tsv")
write(x = colnames(so@assays$RNA@counts), file = "endometrium_example_counts_mtx/barcodes.tsv")

so@meta.data$Cell = rownames(so@meta.data)
df = so@meta.data[, c('Cell', 'cell_type')]
write.table(df, file ='endometrium_example_meta.tsv', sep = '\t', quote = F, row.names = F)


## OPTION 1 - compute DEGs for all cell types
## Extract DEGs for each cell_type
# DEGs <- FindAllMarkers(so, 
#                        test.use = 'LR', 
#                        verbose = F, 
#                        only.pos = T, 
#                        random.seed = 1, 
#                        logfc.threshold = 0.2, 
#                        min.pct = 0.1, 
#                        return.thresh = 0.05)


# OPTION 2 - optional - Re-compute  hierarchical (per lineage) DEGs for Epithelial and Stromal lineages
DEGs = c()
for( lin in c('Epithelial', 'Stromal') ){
    message('Computing DEGs within linage ', lin)
    so_in_lineage = subset(so, cells = Cells(so)[ so$lineage == lin ] )
    celltye_in_lineage = unique(so$cell_type[ so$lineage == lin ])
    DEGs_lin = FindAllMarkers(so_in_lineage,
                       verbose = F, 
                       only.pos = T, 
                       random.seed = 1, 
                       logfc.threshold = 0, 
                       min.pct = 0.1, 
                       return.thresh = 0.05)
    DEGs = rbind(DEGs_lin, DEGs)
}


fDEGs = subset(DEGs, p_val_adj < 0.05 & avg_logFC > 0.1)

# 1st column = cluster; 2nd column = gene 
fDEGs = fDEGs[, c('cluster', 'gene', 'p_val_adj', 'p_val', 'avg_logFC', 'pct.1', 'pct.2')] 
write.table(fDEGs, file ='endometrium_example_DEGs.tsv', sep = '\t', quote = F, row.names = F)

Run cellphoneDB

cellphonedb method degs_analysis  \
    endometrium_example_meta.tsv  \
    endometrium_example_counts_mtx  \
    endometrium_example_DEGs.tsv  \
    --microenvs endometrium_example_microenviroments.tsv  \ #optional
    --counts-data hgnc_symbol  \
    --database database/database/cellphonedb_user_2021-06-29-11_41.db \
    --threshold 0.1

python版本的分析

import numpy as np
import pandas as pd
import scanpy as sc
import anndata
import os
import sys
from scipy import sparse

sc.settings.verbosity = 1  # verbosity: errors (0), warnings (1), info (2), hints (3)
sys.executable
adata = sc.read('endometrium_example_counts.h5ad')
df_meta = pd.DataFrame(data={'Cell':list(adata.obs.index),
                             'cell_type':[ i for i in adata.obs['cell_type']]
                            })
df_meta.set_index('Cell', inplace=True)
df_meta.to_csv('endometrium_example_meta.tsv', sep = '\t')

# Conver to dense matrix for Seurat
adata.X = adata.X.toarray()

import rpy2.rinterface_lib.callbacks
import logging
# Ignore R warning messages
#Note: this can be commented out to get more verbose R output
rpy2.rinterface_lib.callbacks.logger.setLevel(logging.ERROR)
import anndata2ri
anndata2ri.activate()
%load_ext rpy2.ipython

%%R -o DEGs

library(Seurat)
so = as.Seurat(adata, counts = "X", data = "X")
Idents(so) = so$cell_type

## OPTION 1 - compute DEGs for all cell types
## Extract DEGs for each cell_type
# DEGs <- FindAllMarkers(so, 
#                        test.use = 'LR', 
#                        verbose = F, 
#                        only.pos = T, 
#                        random.seed = 1, 
#                        logfc.threshold = 0.2, 
#                        min.pct = 0.1, 
#                        return.thresh = 0.05)


# OPTION 2 - optional - Re-compute  hierarchical (per lineage) DEGs for Epithelial and Stromal lineages
DEGs = c()
for( lin in c('Epithelial', 'Stromal') ){
    message('Computing DEGs within linage ', lin)
    so_in_lineage = subset(so, cells = Cells(so)[ so$lineage == lin ] )
    celltye_in_lineage = unique(so$cell_type[ so$lineage == lin ])
    DEGs_lin = FindAllMarkers(so_in_lineage, 
                       test.use = 'LR', 
                       verbose = F, 
                       only.pos = T, 
                       random.seed = 1, 
                       logfc.threshold = 0.2, 
                       min.pct = 0.1, 
                       return.thresh = 0.05)
    DEGs = rbind(DEGs_lin, DEGs)
}

cond1 = DEGs['p_val_adj'] < 0.05 
cond2 = DEGs['avg_log2FC'] > 0.1
mask = [all(tup) for tup in zip(cond1, cond2)]
fDEGs = DEGs[mask]


# 1st column = cluster; 2nd column = gene 
fDEGs = fDEGs[['cluster', 'gene', 'p_val_adj', 'p_val', 'avg_log2FC', 'pct.1', 'pct.2']] 
fDEGs.to_csv('endometrium_example_DEGs.tsv', index=False, sep='\t')

Run cellphoneDB

cellphonedb method degs_analysis  \
    endometrium_example_meta.tsv  \
    endometrium_example_counts.h5ad  \
    endometrium_example_DEGs.tsv  \
    --microenvs endometrium_example_microenviroments.tsv  \
    --counts-data hgnc_symbol  \
    --database database/database/cellphonedb_user_2021-06-29-11_41.db \
    --threshold 0.1
圖片.png

至于cellphoneDB的繪圖操作,大家可以參考文章空間通訊分析章節(jié)2臊泌,軟件鏈接在CellphoneDB.

生活很好鲤桥,有你更好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者渠概。
  • 序言:七十年代末茶凳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子播揪,更是在濱河造成了極大的恐慌贮喧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪狈,死亡現(xiàn)場(chǎng)離奇詭異箱沦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雇庙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谓形,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疆前,你說(shuō)我怎么就攤上這事寒跳。” “怎么了竹椒?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵冯袍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)康愤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任舶吗,我火速辦了婚禮征冷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誓琼。我一直安慰自己检激,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布腹侣。 她就那樣靜靜地躺著叔收,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傲隶。 梳的紋絲不亂的頭發(fā)上饺律,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音跺株,去河邊找鬼复濒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乒省,可吹牛的內(nèi)容都是我干的巧颈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼袖扛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼砸泛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛆封,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唇礁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娶吞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垒迂,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妒蛇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了机断。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绣夺,死狀恐怖吏奸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陶耍,我是刑警寧澤奋蔚,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響泊碑,放射性物質(zhì)發(fā)生泄漏坤按。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一馒过、第九天 我趴在偏房一處隱蔽的房頂上張望臭脓。 院中可真熱鬧,春花似錦腹忽、人聲如沸来累。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘹锁。三九已至,卻和暖如春着裹,著一層夾襖步出監(jiān)牢的瞬間领猾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工求冷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘤运,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓匠题,卻偏偏與公主長(zhǎng)得像拯坟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子韭山,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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