02.infercnv-区分肿瘤样本中的正常上皮细胞-infercnv结果处理

关于infercnv的输入文件整理和运行参数参考
01.infercnv-区分肿瘤样本中的正常上皮细胞-infercnv运行


参考文献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

肿瘤样本中正常ep细胞的推断思路

  • 采用cutreeinfercnv聚类树进行截断,保证插入的正常上皮细胞聚类到一个或几个大类中,把这一个或几个大类定义为肿瘤细胞
rm(list=ls())
options(stringsAsFactors = F)
library(phylogram)
library(gridExtra)
library(grid)
require(dendextend)
require(ggthemes)
library(tidyverse)
library(Seurat)
library(infercnv)
library(miscTools)
#  导入infercnv聚类树
infercnv.dend <- read.dendrogram(file = "result/ep_infercnv_output/infercnv.observations_dendrogram.txt")
# Cut tree 
####设定K值使插入的正常细胞包含在一个聚类中
#可以采用以高度截断或聚类数量截断
# infercnv.labels <- cutree(infercnv.dend, h = 8, 
#                           order_clusters_as_data = F)
infercnv.labels <- cutree(infercnv.dend,k = 34, order_clusters_as_data = FALSE)
table(infercnv.labels)
# Color labels
cb_palette <- c("#ed1299", "#09f9f5", "#246b93", "#cc8e12", "#d561dd", "#c93f00", "#ddd53e",
                "#4aef7b", "#e86502", "#9ed84e", "#39ba30", "#6ad157", "#8249aa", "#99db27", "#e07233", "#ff523f",
                "#ce2523", "#f7aa5d", "#cebb10", "#03827f", "#931635", "#373bbf", "#a1ce4c", "#ef3bb6", "#d66551",
                "#1a918f", "#ff66fc", "#2927c4", "#7149af" ,"#57e559" ,"#8e3af4" ,"#f9a270" ,"#22547f", "#db5e92",
                "#edd05e", "#6f25e8", "#0dbc21", "#280f7a", "#6373ed", "#5b910f" ,"#7b34c1" ,"#0cf29a" ,"#d80fc1",
                "#dd27ce", "#07a301", "#167275", "#391c82", "#2baeb5","#925bea", "#63ff4f")  #由于本研究聚类数保留较多,为后续画图定义了较大的颜色队列
the_bars <- as.data.frame(cb_palette[1:50][infercnv.labels])
colnames(the_bars) <- "inferCNV_tree"
the_bars$inferCNV_tree <- as.character(the_bars$inferCNV_tree) 
##保存树状图
pdf("result/07.infercnv_cuttree.pdf",height = 10,width = 20)
infercnv.dend %>% set("labels",rep("", nobs(infercnv.dend)) )  %>% plot(main="inferCNV dendrogram") %>%
  colored_bars(colors = as.data.frame(the_bars), dend = infercnv.dend, sort_by_labels_order = FALSE, add = T, y_scale=10, y_shift = 0)
dev.off()

infercnv.labels=as.data.frame(infercnv.labels)
groupFiles='data/ep-infercnv.groupFiles.txt'   
meta=read.table(groupFiles,sep = '\t')
infercnv.labels$V1=rownames(infercnv.labels)
meta=merge(meta,infercnv.labels,by='V1')
table(meta[,2:3])  #查看每个聚类下各组细胞数量
###########计算cnv分数,用于其他分析可忽略
if( ! file.exists(  "result/07.cnv_scores.csv")){
  tmp=read.table("result/ep_infercnv_output/infercnv.references.txt", header=T)
  down=mean(rowMeans(tmp)) - 2 * mean( apply(tmp, 1, sd))
  up=mean(rowMeans(tmp)) + 2 * mean( apply(tmp, 1, sd))
  oneCopy=up-down
  oneCopy
  a1= down- 2*oneCopy
  a2= down- 1*oneCopy
  down;up
  a3= up +  1*oneCopy
  a4= up + 2*oneCopy 
  cnv_table <- read.table("result/ep_infercnv_output/infercnv.observations.txt", header=T)
  # Score cells based on their CNV scores 
  # Replicate the table 
  cnv_score_table <- as.matrix(cnv_table)
  cnv_score_mat <- as.matrix(cnv_table)
  # Scoring
  cnv_score_table[cnv_score_mat > 0 & cnv_score_mat < a2] <- "A" #complete loss. 2pts
  cnv_score_table[cnv_score_mat >= a2 & cnv_score_mat < down] <- "B" #loss of one copy. 1pts
  cnv_score_table[cnv_score_mat >= down & cnv_score_mat <  up ] <- "C" #Neutral. 0pts
  cnv_score_table[cnv_score_mat >= up  & cnv_score_mat <= a3] <- "D" #addition of one copy. 1pts
  cnv_score_table[cnv_score_mat > a3  & cnv_score_mat <= a4 ] <- "E" #addition of two copies. 2pts
  cnv_score_table[cnv_score_mat > a4] <- "F" #addition of more than two copies. 2pts
  # Check
  table(cnv_score_table[,1])
  # Replace with score 
  cnv_score_table_pts <- cnv_table
  rm(cnv_score_mat)
  # 
  cnv_score_table_pts[cnv_score_table == "A"] <- 2
  cnv_score_table_pts[cnv_score_table == "B"] <- 1
  cnv_score_table_pts[cnv_score_table == "C"] <- 0
  cnv_score_table_pts[cnv_score_table == "D"] <- 1
  cnv_score_table_pts[cnv_score_table == "E"] <- 2
  cnv_score_table_pts[cnv_score_table == "F"] <- 2
  # Scores are stored in “cnv_score_table_pts”. Use colSums to add up scores for each cell and store as vector 
  cell_scores_CNV <- as.data.frame(colSums(cnv_score_table_pts))
  colnames(cell_scores_CNV) <- "cnv_score"
  head(cell_scores_CNV)
  write.csv(x = cell_scores_CNV, file = "result/07.cnv_scores.csv")
} 
write.table(meta,"result/07.4.infercnv_meta.txt",sep = "\t",row.names = F,col.names = T,quote = F)
head(meta) 
table(meta[,2:3]) 
#############根据树状图聚类注释正常和肿瘤细胞
rm(list = ls())

meta2=read.table("result/07.4.infercnv_meta.txt",sep = "\t",header = T,quote = "",check.names = F)
meta2$infertype[meta2$infercnv.labels%in%c(13,33)]="normal_ep"  #根据结果选取鉴定的正常ep细胞聚类编号进行注释
meta2$infertype[!meta2$infercnv.labels%in%c(13,33)]="tumor_ep"

结果可视化

结果整合至seurat对象并提取肿瘤ep细胞

#整合进seurat对象
load(file = 'data/4.ep-noann.Rdata') 
# phe=sce@meta.data
# phe$celltype=Idents(sce)
# head(rownames(phe))
metatype=meta2[,c(1,4)] #提取细胞名和所在聚类数
colnames(metatype)[1]="cell"
####整合tumor-ep代码
sce@meta.data$infer_type =metatype[match(rownames(sce@meta.data),metatype$cell),"infertype"] #根据细胞名称匹配聚类数整合至seurat对象

phe=sce@meta.data###再次确认整合结果
####取肿瘤ep细胞子集
sce=subset(sce,infer_type %in% c('tumor_ep' )) 
sce
sce$orig.ident=as.factor(as.character(sce$orig.ident))  ###去掉空子集代码
sce@meta.data$orig.ident #再次确认
###保存提取的肿瘤ep细胞seurat对象
save(sce,file = "data/6.tumor_ep_no_cluster_noann.Rdata")

参考:
https://blog.csdn.net/qq_38774801/article/details/115435091
https://cloud.tencent.com/developer/inventory/7049/article/1737138
问题交流:
Email:xuran@hrbmu.edu.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容