参考文献Therapy-Induced Evolution of Human Lung Cancer Revealed by Single-Cell RNA Sequencing
改进:根据infercnv
官方解释文档,建议以同种类型细胞进行推断。因此改为以正常样本来源ep插入以进行分析。
分析流程
- 提取seurat对象中的表达矩阵(infercnv已支持稀松矩阵导入)
- 构建基因组参考文件
- 提取分组信息文件
- 拟采用将对照组2/3细胞作为infercnv ref组
- 余下1/3对照组细胞掺入实验组以供后续聚类判断肿瘤样本中的正常上皮细胞
4.将上述构建的3个文件作为infercnv输入文件构建infercnv对象并进行infercnv分析
library(devtools)
library(phylogram)
library(gridExtra)
library(grid)
require(dendextend)
require(ggthemes)
library(tidyverse)
library(Seurat)
library(miscTools)
library(dendextend)
library(ggthemes)
load(file = "data/4.ep-noann.Rdata") #加载上皮细胞seurat文件,已提前聚类分群
table(sce$orig.ident)
dat=GetAssayData(sce,
slot='counts',assay='RNA') #提取表达矩阵
dat[1:4,1:4]
groupinfo=data.frame(v1=colnames(dat),
v2=sce$orig.ident ) #这里以样品编号作为分组信息
head(groupinfo)
groupinfo$v2=as.character(groupinfo$v2) #将样品编号factor转为字符串以供下游处理
#从所有正常组织来源上皮细胞进行抽样
kp=sample(which(groupinfo$v2%in%c("LUNG_N01", "LUNG_N06", "LUNG_N08",
"LUNG_N09", "LUNG_N18", "LUNG_N19",
"LUNG_N20", "LUNG_N28", "LUNG_N30",
"LUNG_N31" ,"LUNG_N34")),1000) #修改为正常样本编号,此处抽样1000个细胞
###修改抽样的上皮
groupinfo$v2[kp]<-"spike_normal_sample_ep" #将抽样的细胞定义为插入的上皮组"spike_normal_sample_ep"
###修改对照组
groupinfo$v2[groupinfo$v2%in%c("LUNG_N01", "LUNG_N06", "LUNG_N08",
"LUNG_N09", "LUNG_N18", "LUNG_N19",
"LUNG_N20", "LUNG_N28", "LUNG_N30",
"LUNG_N31" ,"LUNG_N34")]<-"normal_sample_ep" ###将正常样品来源细胞改为"normal_sample_ep"后续作为inifercnv参考组
#修改癌症来源ep
groupinfo$v2[!groupinfo$v2%in%c("spike_normal_sample_ep","normal_sample_ep")]<-"tumor_sample_ep" #剩余细胞修改为肿瘤样本上皮细胞组"tumor_sample_ep"
groupFiles='data/ep-infercnv.groupFiles.txt'
write.table(groupinfo,file = groupFiles,sep = '\t',
quote = F,col.names = F,row.names = F) ####输出最终的分组信息文件
# 构建基因组注释文件
# library(devtools)
# install_github("jmzeng1314/AnnoProbe")
library(AnnoProbe)
geneInfor=annoGene(rownames(dat),
"SYMBOL",'human')
colnames(geneInfor)
head(geneInfor)
geneInfor=geneInfor[with(geneInfor,
order(chr, start)),c(1,4:6)]
geneInfor=geneInfor[!duplicated(geneInfor[,1]),]
length(unique(geneInfor[,1]))
head(geneInfor)
## 这里可以去除性染色体
# 也可以把染色体排序方式改变
dat=dat[rownames(dat) %in% geneInfor[,1],]
dat=dat[match( geneInfor[,1], rownames(dat) ),]
dim(dat)
head(groupinfo)
dat[1:4,1:4]
table(groupinfo$v2)
head(groupinfo)
expFile='data/ep-infercnv.expFile.txt'
write.table(dat,file = expFile,sep = '\t',quote = F) #输出表达矩阵
geneFile='data/ep-infercnv.geneFile.txt'
write.table(geneInfor,file = geneFile,sep = '\t',
quote = F,col.names = F,row.names = F)#输出基因组注释文件
infercnv对象构建
rm(list = ls())
gc()
options(stringsAsFactors = F)
library(Seurat)
library(gplots)
library(ggplot2)
expFile='data/ep-infercnv.expFile.txt'
groupFiles='data/ep-infercnv.groupFiles.txt'
geneFile='data/ep-infercnv.geneFile.txt'
library(infercnv)
infercnv_obj = CreateInfercnvObject(raw_counts_matrix=expFile,
annotations_file=groupFiles,
delim="\t",
gene_order_file= geneFile,
ref_group_names=c("normal_sample_ep")) #构建infercnv对象
##保存infercnv输入对象###由于后续infercnv运行中可能会出现各种错误,为避免每次都需要重新构建,建议将infercnv对象保存下来后续可读取后直接用
save(infercnv_obj,file="data/5.infercnv_input.Rdata")
infercnv运行
建议使用github上最新版本的infercnv,改进了画图过程中的多线程运算。速度会快很多
library(infercnv)
#加载infercnv输入对象
load(file="data/5.infercnv_input.Rdata")
infercnv_obj3 = infercnv::run(infercnv_obj,
cutoff=0.1, # Smart-seq2设置为1, 10X转录组设置为0.1
out_dir= "result/ep_infercnv_output", # 结果输出目录
cluster_by_groups=F, # cluster
hclust_method="ward.D2",
analysis_mode="subclusters",
denoise=TRUE,
HMM=TRUE,
plot_steps = F, #关闭过程中的画图过程速度会增快
output_format = "pdf",
num_threads=25 #线程数,多线程运算建议结合内存大小合理选择,线程数过多内存不够会报错)
结果
本文参考:
https://blog.csdn.net/qq_38774801/article/details/115435091
https://cloud.tencent.com/developer/inventory/7049/article/1737138
问题交流:
Email:[email protected]