參考文獻Therapy-Induced Evolution of Human Lung Cancer Revealed by Single-Cell RNA Sequencing
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:xuran@hrbmu.edu.cn