拷贝数变异分析在单细胞中常应用于区分肿瘤细胞,因为肿瘤细胞没有明确的Marker,很难通过转录组数据从肿瘤细胞中区分正常和恶性肿瘤细胞,拷贝数变异是指染色体上大于1 kb的DNA片段的扩增或者减少。目前常用的检测软件有inferCNV和CopyKAT等,我们在这里进行一些测试,这2软件在细胞数多的时候还是很耗时间和内存的。
测试1 :inferCNV
1 首先加载我们需要用到的包
library(Seurat)
library(ggplot2)
library(infercnv)
library(AnnoProbe)
2 读取我们需要的数据,并把我们想分的cluster分出来
PRO<-readRDS('cmulti/lung.diff_PRO.rds')
PRO<-subset(PRO,idents=c('AT2','CancerCells'))
DimPlot(PRO)

3 导出我们需要的数据
AT2cells=row.names(PRO@meta.data)[which(PRO@meta.data[["new_ident"]]=='AT2')]#挑选出singleR注释得到的上皮细胞所在的列
AT2Mat=as.data.frame(GetAssayData(subset(PRO,cells=AT2cells),slot='counts'))#将上皮细胞所对应的表达谱单独提取出来
Cancer.cells=row.names(PRO@meta.data)[which(PRO@meta.data[["new_ident"]]=='CancerCells')]#挑选出cancer cell来进行验证,在这里也可以选择疑似肿瘤细胞的cluster进行验证。
CancerMat=as.data.frame(GetAssayData(subset(PRO,cells=Cancer.cells),slot='counts'))##将肿瘤细胞所对应的表达谱单独提取出来
dat=cbind(AT2cells,CancerMat)#将我们要分析的2个cluster矩阵合并
groupinfo=data.frame(v1=colnames(dat),v2=c(rep('AT2',ncol(AT2cells)),rep('CancerCells',ncol(CancerMat)))) #输出每个barcode对应的细胞类型
4 输出基因的位置
geneInfor=annoGene(rownames(dat),"SYMBOL",'human')##将表达谱中的基因所对应在染色体的位置提出来
geneInfor=geneInfor[with(geneInfor,order(chr, start)),c(1,4:6)]##将symbol的名字,所在染色体以及染色体的起始位置所在的列提出来
geneInfor=geneInfor[!duplicated(geneInfor[,1]),]##去除重复
5 过滤表达矩阵,输出下一步分析需要的数据
dat=dat[rownames(dat)%in% geneInfor[,1],]
write.table(dat,file ='expFile.txt',sep = '\t',quote = F)
write.table(groupinfo,file='groupFiles.txt',sep = '\t',quote = F,col.names = F,row.names = F)
write.table(geneInfor,file= 'geneFile.txt',sep = '\t',quote = F,col.names = F,row.names = F)
6 形成分析CNV需要的数据格式
options(stringsAsFactors= F)
expFile='expFile.txt'
groupFiles='groupFiles.txt'
geneFile='geneFile.txt'
infercnv_obj=CreateInfercnvObject(raw_counts_matrix=expFile,annotations_file=groupFiles,gene_order_file=geneFile,ref_group_names='AT2') #在这里使用AT2作为refference
infercnv_obj2=infercnv::run(infercnv_obj,cutoff=0.1,cluster_by_groups=F,hclust_method="ward.D2",plot_steps=F,out_dir='./ceshi/CNV/inferCNV')

从图片来看,的确CancerCells的拷贝数比AT2(二型肺泡上皮细胞)要更明显
测试二
1 加载需要的包
library(Seurat)
library(tidyverse)
library(copykat)
2 读取,提取需要的数据,在这里只把肺泡上皮和肿瘤细胞提出来
PRO<-readRDS('lung.diff_PRO.rds')
PRO<-subset(PRO,idents=c('AT2','CancerCells'))
3 处理数据
counts<-as.matrix(PRO@assays$RNA@counts)
cnv <- copykat(rawmat=counts,ngene.chr=5,sam.name="Lung",n.cores=4)
saveRDS(cnv, "cnv.rds")

绿色为正常细胞,橘色为恶性细胞,emmmmm,感觉不太对的样子
4 映射到seraut的图上
mallignant<- read.delim('Lung_copykat_prediction.txt')
mallignant <- mallignant[!duplicated(mallignant$cell.names),]
rownames(mallignant)<-mallignant$cell.names
PRO<- AddMetaData(PRO,metadata = mallignant)
p1<-DimPlot(PRO, group.by = 'copykat.pred')+ scale_color_manual(values = c("gray","red",'blue'))
p2<-DimPlot(PRO)
pc <- p1 + p2
ggsave('umap.pdf',pc, width = 12, height = 5)

自我怀疑是不是参数设置的有问题,和想的很不一样....
网友评论