copyKAT推斷單細胞轉錄組腫瘤細胞CNV(自動識別腫瘤normal和tumor)

hi募舟,各位筑舅,2021年1月份發(fā)表了一篇文獻Delineating copy number and clonal substructure in human tumors from single-cell transcriptomes ,2021年1月發(fā)表于nature biotechnology茵典,影響因子36分多,非常高邪狞,前幾位的作者都是中國人挖垛,非常值得一看,文章中推出新的推斷腫瘤細胞CNV的方法:copyKAT婉支,也是通過單細胞轉錄組數(shù)據(jù)來推斷細胞的染色體倍數(shù)鸯隅,進而推斷是正常細胞(diploid)還是腫瘤細胞(aneuploid)。它還可以進一步對腫瘤細胞進行聚類向挖,找出不同的亞群蝌以。

我們來看一下原理圖

24927444-5fbf08d4fc6ef6d0.png

首先對基因表達量做標準化并穩(wěn)定其方差(a)。相較于inferCNV(見之前的分享:inferCNV)何之,copyKAT可以自動尋找diploid cells作為正常細胞(b)跟畅。對每個非正常細胞,利用MCMC尋找其CNV的斷點(breakpoints)并得到segments(c)溶推。正常細胞和腫瘤細胞由于其基因表達量分布的不同可以被分開(d)徊件。腫瘤細胞通常還可以繼續(xù)聚類得到其亞群(e)。

接下來我們來運行一下這個代碼蒜危,看看結果如何

加載模塊并讀取數(shù)據(jù)(以10X數(shù)據(jù)為例)

library(Seurat)
library(copykat)
raw <- Read10X(data.dir = data.path.to.cellranger.outs)
raw <- CreateSeuratObject(counts = raw, project = "copycat.test", min.cells = 0, min.features = 0)
exp.rawdata <- as.matrix(raw@assays$RNA@counts)

running copykat

已經(jīng)準備好了輸入矩陣袁串,原始的UMI計數(shù)矩陣箕别,已經(jīng)準備運行copykat。 cellranger輸出中的默認基因ID是基因符號,因此輸入"Symbol”或“ S”源譬。 為了濾除細胞,需要每個染色體至少5個基因來計算DNA拷貝數(shù)。 可以將其調(diào)低到ngene.chr = 1以保持盡可能多的細胞,但是使用至少5個基因來代表一個染色體并不是很嚴格捎迫。 為了濾除基因,可以調(diào)整參數(shù)以僅保留在細胞的LOW.DR至UP.DR部分中表達的基因表牢。 我把默認值LOW.DR = 0.05窄绒,UP.DR = 0.2。 我可以調(diào)低這些值以在分析中保留更多基因崔兴。 我需要確保LOW.DR小于UP.DR彰导。
要求copykat每個片段至少接受25個基因。 我可以嘗試使用其他選項敲茄,每個bin的范圍為15-150個基因位谋。 KS.cut是分段參數(shù),范圍從0到1堰燎。增加KS.cut會降低靈敏度掏父,即減少分段/斷點。 通常它在0.05-0.15的范圍內(nèi)工作秆剪。 (還記得inferCNV每個bin多少個基因么赊淑?童鞋們)
One struggling and intesting observation is that none of one clustering method could fit all datasets. In this version, I add a distance parameters for clustering that include "euclidean" distannce and correlational distance, ie. 1-"pearson" and "spearman" similarity. In general, corretional distances tend to favor noisy data, while euclidean distance tends to favor data with larger CN segments.(確實是這樣)。
I add an option to input known normal cell names as a vector object. Default is NULL.(我們這里就使用默認參數(shù))仅讽。

我們先來看一下這個函數(shù)的參數(shù)

help(copykat)
rawmat: raw data matrix; genes in rows; cell names in columns.
id.type: gene id type: Symbol or Ensemble.
ngene.chr: minimal number of genes per chromosome for cell filtering.
LOW.DR: minimal population fractoins of genes for smoothing.
UP.DR: minimal population fractoins of genes for segmentation.
win.size: minimal window sizes for segmentation.
norm.cell.names: a vector of normal cell names.
KS.cut: segmentation parameters, input 0 to 1; larger looser criteria.
sam.name: sample name.
n.cores: number of cores for parallel computing.
###參數(shù)都非常容易理解

那我們運行一下

copykat.test <- copykat(rawmat=exp.rawdata, id.type="S", ngene.chr=5, win.size=25, KS.cut=0.1, sam.name="test", distance="euclidean", norm.cell.names="", n.cores=4)
###看看有什么(得到一個列表)
pred.test <- data.frame(copykat.test$prediction)
head(pred.test)
圖片.png

這部分是對細胞類型是否是惡性細胞的判定陶缺。

CNA.test <- data.frame(copykat.test$CNAmat)
head(CNA.test)

圖片.png

拷貝數(shù)矩陣包含了基因的染色體信息和每個細胞的變異情況

###聚類信息
head(copykat.test$hclustering$)
圖片.png

這部分包含了聚類的順序,距離等信息洁灵,非常有用饱岸。

熱圖展示

my_palette <- colorRampPalette(rev(RColorBrewer::brewer.pal(n = 3, name = "RdBu")))(n = 999)
chr <- as.numeric(CNA.test$chrom) %% 2+1
rbPal1 <- colorRampPalette(c('black','grey'))
CHR <- rbPal1(2)[as.numeric(chr)]
chr1 <- cbind(CHR,CHR)
rbPal5 <- colorRampPalette(RColorBrewer::brewer.pal(n = 8, name = "Dark2")[2:1])
com.preN <- pred.test$copykat.pred
pred <- rbPal5(2)[as.numeric(factor(com.preN))]

cells <- rbind(pred,pred)
col_breaks = c(seq(-1,-0.4,length=50),seq(-0.4,-0.2,length=150),seq(-0.2,0.2,length=600),seq(0.2,0.4,length=150),seq(0.4, 1,length=50))

heatmap.3(t(CNA.test[,4:ncol(CNA.test)]),dendrogram="r", distfun = function(x) parallelDist::parDist(x,threads =4, method = "euclidean"), 
          hclustfun = function(x) hclust(x, method="ward.D2"),
          ColSideColors=chr1,RowSideColors=cells,Colv=NA, Rowv=TRUE,
          notecol="black",col=my_palette,breaks=col_breaks, key=TRUE,
          keysize=1, density.info="none", trace="none",
          cexRow=0.1,cexCol=0.1,cex.main=1,cex.lab=0.1,
          symm=F,symkey=F,symbreaks=T,cex=1, cex.main=4, margins=c(10,10))

legend("topright", paste("pred.",names(table(com.preN)),sep=""), pch=15,col=RColorBrewer::brewer.pal(n = 8, name = "Dark2")[2:1], cex=0.6, bty="n")
圖片.png

看起來層次分明

再對腫瘤細胞再聚類并畫熱圖,又能分成兩群徽千。

tumor.cells <- pred.test$cell.names[which(pred.test$copykat.pred=="aneuploid")]
tumor.mat <- CNA.test[, which(colnames(CNA.test) %in% tumor.cells)]
hcc <- hclust(parallelDist::parDist(t(tumor.mat),threads =4, method = "euclidean"), method = "ward.D2")
hc.umap <- cutree(hcc,2)

rbPal6 <- colorRampPalette(RColorBrewer::brewer.pal(n = 8, name = "Dark2")[3:4])
subpop <- rbPal6(2)[as.numeric(factor(hc.umap))]
cells <- rbind(subpop,subpop)

heatmap.3(t(tumor.mat),dendrogram="r", distfun = function(x) parallelDist::parDist(x,threads =4, method = "euclidean"), 
          hclustfun = function(x) hclust(x, method="ward.D2"),
          ColSideColors=chr1,RowSideColors=cells,Colv=NA, Rowv=TRUE,
          notecol="black",col=my_palette,breaks=col_breaks, key=TRUE,
          keysize=1, density.info="none", trace="none",
          cexRow=0.1,cexCol=0.1,cex.main=1,cex.lab=0.1,
          symm=F,symkey=F,symbreaks=T,cex=1, cex.main=4, margins=c(10,10))

legend("topright", c("c1","c2"), pch=15,col=RColorBrewer::brewer.pal(n = 8, name = "Dark2")[3:4], cex=0.9, bty='n')
圖片.png

展現(xiàn)腫瘤內(nèi)部的異質(zhì)性苫费。

最后把CNV的結果投射到單細胞聚類結果上看一看是否合理,Seurat標準流程走一遍罐栈,聚類結果和copyKAT分群結果投射到TSNE上黍衙。

standard10X = function(dat,nPCs=50,res=1.0,verbose=FALSE){
  srat = CreateSeuratObject(dat)
  srat = NormalizeData(srat,verbose=verbose)
  srat = ScaleData(srat,verbose=verbose)
  srat = FindVariableFeatures(srat,verbose=verbose)
  srat = RunPCA(srat,verbose=verbose)
  srat = RunTSNE(srat,dims=seq(nPCs),verbose=verbose)
  srat = FindNeighbors(srat,dims=seq(nPCs),verbose=verbose)
  srat = FindClusters(srat,res=res,verbose=verbose)
  return(srat)
}

TNBC1 <- standard10X(exp.rawdata, nPCs=30, res=0.6)
TNBC1@meta.data$copykat.pred <- pred.test$copykat.pred
TNBC1@meta.data$copykat.tumor.pred <- rep("normal", nrow(TNBC1@meta.data))
TNBC1@meta.data$copykat.tumor.pred[rownames(TNBC1@meta.data) %in% names(hc.umap[hc.umap==1])] <- "tumor cluster 1"
TNBC1@meta.data$copykat.tumor.pred[rownames(TNBC1@meta.data) %in% names(hc.umap[hc.umap==2])] <- "tumor cluster 2"

p1 <- DimPlot(TNBC1, label = T)
p2 <- DimPlot(TNBC1, group.by = "copykat.pred")
p3 <- DimPlot(TNBC1, group.by = "copykat.tumor.pred")
p1 + p2 + p3
圖片.png

最后作者提到一個需要注意的點,不是所有的腫瘤都存在CNV荠诬。兒童腫瘤和血液腫瘤中基本沒有copy number event琅翻,所以是不適合用這些方法(copyKAT或inferCNV)來尋找腫瘤細胞的。

看看英文版原理

The statistical workflow of CopyKAT combines a Bayesian approach with hierarchical clustering to calculate genomic copy number profiles of single cells and define clonal substructure from high-throughput 3′ scRNA-seq data
原理跟inferCNV一樣

圖片.png

表現(xiàn)基本一致柑贞,更優(yōu)一點方椎。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者钧嘶。
  • 序言:七十年代末棠众,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闸拿,老刑警劉巖空盼,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異新荤,居然都是意外死亡揽趾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門苛骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篱瞎,“玉大人,你說我怎么就攤上這事痒芝±睿” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵严衬,是天一觀的道長澄者。 經(jīng)常有香客問我,道長瞳步,這世上最難降的妖魔是什么闷哆? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮单起,結果婚禮上,老公的妹妹穿的比我還像新娘劣坊。我一直安慰自己嘀倒,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布局冰。 她就那樣靜靜地躺著测蘑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪康二。 梳的紋絲不亂的頭發(fā)上碳胳,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音沫勿,去河邊找鬼挨约。 笑死,一個胖子當著我的面吹牛产雹,可吹牛的內(nèi)容都是我干的诫惭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蔓挖,長吁一口氣:“原來是場噩夢啊……” “哼夕土!你這毒婦竟也來了?” 一聲冷哼從身側響起瘟判,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤怨绣,失蹤者是張志新(化名)和其女友劉穎角溃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篮撑,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡减细,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咽扇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邪财。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖质欲,靈堂內(nèi)的尸體忽然破棺而出树埠,到底是詐尸還是另有隱情,我是刑警寧澤嘶伟,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布怎憋,位于F島的核電站,受9級特大地震影響九昧,放射性物質(zhì)發(fā)生泄漏绊袋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一铸鹰、第九天 我趴在偏房一處隱蔽的房頂上張望癌别。 院中可真熱鬧,春花似錦蹋笼、人聲如沸展姐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圾笨。三九已至,卻和暖如春逊谋,著一層夾襖步出監(jiān)牢的瞬間擂达,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工胶滋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留板鬓,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓镀钓,卻偏偏與公主長得像穗熬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丁溅,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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