ProjecTILs系列教程(二):ICB療效預(yù)測

說在前面

免疫檢查點(diǎn)抑制劑是腫瘤治療的革命性藥物推正,然而目前還不清楚為什么一些患者對檢查點(diǎn)抑制劑療法有反應(yīng),而另一些則沒有嘱支。在Sade-Feldman等人2018年的一項(xiàng)Cell研究中袁滥,作者描述了免疫檢查點(diǎn)封鎖前后黑色素瘤患者免疫細(xì)胞的單細(xì)胞轉(zhuǎn)錄譜,目的是確定與檢查點(diǎn)治療成功或失敗相關(guān)的因素革屠。他們的研究表明,在腫瘤組織中發(fā)現(xiàn)的兩種CD8 T細(xì)胞狀態(tài)之間的平衡(本質(zhì)上是記憶型和耗盡型)與檢查點(diǎn)封鎖后的腫瘤退化有關(guān)排宰。特別是似芝,腫瘤中TCF7+ CD8 T細(xì)胞的浸潤程度預(yù)示著ICB應(yīng)答和更好的生存時(shí)間。

那么本期推文板甘,Immugent就通過實(shí)操使用ProjecTILs党瓮,來對各種腫瘤浸潤T細(xì)胞亞型進(jìn)行鑒定,從而對ICB治療效果進(jìn)行預(yù)測盐类,這也同時(shí)可以檢測利用小鼠參考圖譜預(yù)測人的單細(xì)胞數(shù)據(jù)的效果寞奸。


代碼實(shí)現(xiàn)

第一步還是要先準(zhǔn)備輸入數(shù)據(jù)。

library(ggplot2)
library(ProjecTILs)
library(gridExtra)

cached.object <- "SadeFeldman.seurat.rds"

if (!file.exists(cached.object)) {

    library(GEOquery)
    geo_acc <- "GSE120575"
    datadir <- "input/SadeFeldman"
    gse <- getGEO(geo_acc)

    series <- paste0(geo_acc, "_series_matrix.txt.gz")

    system(paste0("mkdir -p ", datadir))
    getGEOSuppFiles(geo_acc, baseDir = datadir)

    ## Load expression matrix and metadata
    exp.mat <- read.delim(sprintf("%s/%s/GSE120575_Sade_Feldman_melanoma_single_cells_TPM_GEO.txt.gz",
        datadir, geo_acc), header = F, sep = "\t")
    genes <- exp.mat[c(-1, -2), 1]
    cells <- as.vector(t(exp.mat[1, 2:16292]))
    samples <- as.factor(t(exp.mat[2, 2:16292]))

    exp.mat <- exp.mat[c(-1, -2), 2:16292]
    colnames(exp.mat) <- cells
    rownames(exp.mat) <- genes

    meta <- read.delim(sprintf("%s/%s/GSE120575_patient_ID_single_cells.txt.gz",
        datadir, geo_acc), header = T, sep = "\t", skip = 19, nrows = 16291)
    meta <- meta[, 1:7]

    treat <- factor(ifelse(grepl("Post", samples), "Post", "Pre"))
    response <- factor(meta$characteristics..response)
    therapy <- factor(meta$characteristics..therapy)

    ## Create Seurat object and add meta data
    query.object <- CreateSeuratObject(counts = exp.mat, project = "SadeFeldman",
        min.cells = 10)
    rm(exp.mat)
    query.object@meta.data$Sample <- samples
    query.object@meta.data$Time <- treat
    query.object@meta.data$Response <- response
    query.object@meta.data$Therapy <- therapy

    saveRDS(query.object, file = cached.object)
} else {
    query.object <- readRDS(cached.object)
}

query.object <- subset(query.object, subset = Time == "Pre")
table(query.object$Sample)

下面就是常規(guī)的ProjecTILs流程在跳,需要注意的是和上一期使用的參考數(shù)據(jù)是不一樣的枪萄。

ref <- load.reference.map()
query.projected <- make.projection(query.object, ref = ref)
plot.projection(ref, query.projected)
image.png
query.projected <- cellstate.predict(ref = ref, query = query.projected)
table(query.projected$functional.cluster)

query.list <- SplitObject(query.projected, split.by = "Response")
plot.states.radar(ref, query = query.list, min.cells = 50, genes4radar = c("Foxp3",
    "Cd4", "Cd8a", "Tcf7", "Ccr7", "Gzmb", "Pdcd1", "Havcr2", "Tox", "Entpd1", "Cxcr5",
    "Ifng", "Cxcl13", "Xcl1", "Itgae"))
image.png
data(Hs2Mm.convert.table)
which.genes <- c("TCF7", "GZMB", "CD8B", "PDCD1", "ITGAE")

Hs2Mm.convert.table[Hs2Mm.convert.table$Gene.HS %in% which.genes, ]

query.list <- SplitObject(query.projected, split.by = "Response")

pll <- list()

pll[[1]] <- plot.projection(ref, query.list[["Responder"]]) + ggtitle("Responder")
pll[[2]] <- plot.statepred.composition(ref, query.list[["Responder"]], metric = "Percent") +
    ggtitle("Responder") + ylim(0, 40)
pll[[3]] <- plot.projection(ref, query.list[["Non-responder"]]) + ggtitle("Non-responder")
pll[[4]] <- plot.statepred.composition(ref, query.list[["Non-responder"]], metric = "Percent") +
    ggtitle("Non-responder") + ylim(0, 40)

grid.arrange(grobs = pll, ncol = 2, nrow = 2, widths = c(1.5, 1))
image.png
which.types <- table(query.projected$functional.cluster) > 20

stateColors_func <- c("#edbe2a", "#A58AFF", "#53B400", "#F8766D", "#00B6EB", "#d1cfcc",
    "#FF0000", "#87f6a5", "#e812dd")
states_all <- levels(ref$functional.cluster)
names(stateColors_func) <- states_all
cols_use <- stateColors_func[names(which.types)][which.types]

# Responder vs non Responder
query.projected$functional.cluster <- factor(query.projected$functional.cluster,
    levels = states_all)
query.list <- SplitObject(query.projected, split.by = "Response")

norm.c <- table(query.list[["Non-responder"]]$functional.cluster)/sum(table(query.list[["Non-responder"]]$functional.cluster))
norm.q <- table(query.list[["Responder"]]$functional.cluster)/sum(table(query.list[["Responder"]]$functional.cluster))

foldchange <- norm.q[which.types]/norm.c[which.types]
foldchange <- sort(foldchange, decreasing = T)

tb.m <- melt(foldchange)
colnames(tb.m) <- c("Cell_state", "Fold_change")
pll <- list()
ggplot(tb.m, aes(x = Cell_state, y = Fold_change, fill = Cell_state)) + geom_bar(stat = "identity") +
    scale_fill_manual(values = cols_use) + geom_hline(yintercept = 1) + scale_y_continuous(trans = "log2") +
    theme(axis.text.x = element_blank(), legend.position = "left") + ggtitle("Responder vs. Non-responder")
image.png

利用投射函數(shù)的同源映射功能,在上面的結(jié)果中Immugent展示了如何利用參考小鼠TIL圖譜猫妙,直接分析人類腫瘤浸潤的scRNA-seq數(shù)據(jù)瓷翻。基因表達(dá)譜證實(shí)了T細(xì)胞在主要的CD4+和CD8+類型,以及更具體的亞型(CD8_Tex, CD8_Tpex, Naive-like, Follicular helper, Th1, and T regulatory CD4+ cells)中進(jìn)行準(zhǔn)確的映射齐帚。


小結(jié)

對有應(yīng)答和無應(yīng)答的黑色素瘤患者在基線時(shí)TILs的轉(zhuǎn)錄譜和細(xì)胞狀態(tài)的比較證實(shí)了Sade-Feldman等人的原始結(jié)論妒牙,即TCF7+ CD8 TILs的頻率與檢查點(diǎn)治療的反應(yīng)性相關(guān)。然而对妄,與反應(yīng)相關(guān)的TCF7+ CD8 TIL群體似乎對應(yīng)的是一種幼稚狀態(tài)湘今,而不是先前在小鼠癌癥和慢性感染模型中表征的(PD-1+ TOX+)前體耗盡狀態(tài)。此外饥伊,這種幼稚樣TIL群體不太可能具有腫瘤特異性象浑,特別是在克隆擴(kuò)增缺乏強(qiáng)有力證據(jù)的情況下,因?yàn)镻D-1- CD8 TIL中腫瘤反應(yīng)細(xì)胞的頻率在黑色素瘤腫瘤中非常低琅豆。這似乎與其他研究不一致愉豺,這些研究表明PD-1+耗盡樣CD8 T細(xì)胞的存在可以預(yù)測黑色素瘤和非小細(xì)胞肺癌對檢查點(diǎn)封鎖的反應(yīng)。然而茫因,在這個(gè)數(shù)據(jù)集中蚪拦,來自有應(yīng)答者和無應(yīng)答者的大多數(shù)腫瘤都包含一個(gè)表達(dá)PD-1 (PDCD1)、CD39 (ENTPD1)冻押、CXCL13驰贷、CD103 (ITGAE)的耗竭型CD8 T細(xì)胞,即使在無應(yīng)答者中這種細(xì)胞的頻率更高洛巢。

因此括袒,腫瘤中PD-1+ CD8 T細(xì)胞的存在可能是治療成功所必需的,但還不夠稿茉。其他因素锹锰,包括CD8 TIL浸潤總量、空間分布等漓库,可能與幼稚型CD8 TIL的存在有關(guān)恃慧,并與改善的反應(yīng)有關(guān)。例如渺蒿,我們還能觀察到痢士,應(yīng)答的腫瘤中Th1樣和幼稚樣CD4 T細(xì)胞的頻率較高,而調(diào)節(jié)性CD4 T細(xì)胞的頻率較低茂装,這可能也有助于免疫治療后抗腫瘤反應(yīng)的改善怠蹂。

總之,在穩(wěn)定圖譜的背景下少态,對人類T細(xì)胞數(shù)據(jù)的投射分析提供了一個(gè)穩(wěn)定的框架來比較不同組和條件下的樣本褥蚯,并給出了與免疫治療反應(yīng)相關(guān)的T細(xì)胞狀態(tài)的更完整的細(xì)胞構(gòu)成。雖然通過上面的結(jié)果已經(jīng)證明况增,穩(wěn)健的同源信號可以通過將人類數(shù)據(jù)投影到參考小鼠圖譜中來提取,但人-小鼠圖譜繪制也將有利于構(gòu)建穩(wěn)定的人類圖譜训挡,其中個(gè)體間的可變性是一個(gè)主要障礙澳骤。

好啦歧强,本期分享到這就結(jié)束啦,我們下期再會为肮。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摊册,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颊艳,更是在濱河造成了極大的恐慌茅特,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棋枕,死亡現(xiàn)場離奇詭異白修,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)重斑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門兵睛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窥浪,你說我怎么就攤上這事祖很。” “怎么了漾脂?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵假颇,是天一觀的道長。 經(jīng)常有香客問我骨稿,道長笨鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任啊终,我火速辦了婚禮镜豹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓝牲。我一直安慰自己趟脂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布例衍。 她就那樣靜靜地躺著昔期,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佛玄。 梳的紋絲不亂的頭發(fā)上硼一,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音梦抢,去河邊找鬼般贼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哼蛆。 我是一名探鬼主播蕊梧,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腮介!你這毒婦竟也來了肥矢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叠洗,失蹤者是張志新(化名)和其女友劉穎甘改,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灭抑,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡十艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了名挥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟羹。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖禀倔,靈堂內(nèi)的尸體忽然破棺而出榄融,到底是詐尸還是另有隱情,我是刑警寧澤救湖,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布愧杯,位于F島的核電站,受9級特大地震影響鞋既,放射性物質(zhì)發(fā)生泄漏力九。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一邑闺、第九天 我趴在偏房一處隱蔽的房頂上張望跌前。 院中可真熱鬧,春花似錦陡舅、人聲如沸抵乓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灾炭。三九已至,卻和暖如春颅眶,著一層夾襖步出監(jiān)牢的瞬間蜈出,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工涛酗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铡原,地道東北人偷厦。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像燕刻,于是被迫代替她去往敵國和親沪哺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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