├── Figure 1 ├── DA_score.R ├── PCA&correlation&ssgsea analysis.R ├── README.md ├── Source Data │ ├── GC_matrix.csv │ └── LC_matrix.csv ├── code_SNA.R ├── get.kegg.all.R ├── get.kegg.byId.R └── merge_490.zip ├── Figure 2 ├── ORR_analysis.R ├── README.md ├── Source Data │ ├── 911_sig.txt │ ├── arm_level_cnv_TJRCC.txt │ ├── sample_info.csv │ ├── specific_gene_sig.txt │ ├── tmp_org.csv │ └── xCell_mRNA_mat_xCell_combat.txt ├── bulk omics analysis.R ├── cross-validation using TCGA-KIRC.R ├── processing of snRNA-seq data.R ├── processing public ccRCC scRNA-seq data.R ├── snATAC analysis pipeline.R └── ssgsea_macrophage.R ├── Figure 3 ├── README.md ├── Source Data │ ├── IM3_ssgsea_diff.txt │ └── metabolic_selected.txt ├── differential analysis of metabolites.R ├── ssgsea analysis.R └── visulization of spatial metabolomics.R ├── Figure 4 ├── Processing snRNA-seq data of NATs.R ├── README.md ├── Source Data │ ├── genelist_Figure4a.txt │ ├── module3.txt │ └── module4.txt └── bulk_analysis.R ├── Figure 5 ├── Processing of sequencing data of clinical trials.R └── README.md ├── Figure 6 ├── README.md ├── Source Data │ └── diff_Y7.csv ├── analysis pipeline of Malignant single nucleic data.R ├── differential analysis of spatial metabolomics.R ├── predict adjusted IM subgroups in bulk RNA-seq data.R └── spatial transcriptome analysis.R ├── Figure 7 ├── README.md ├── Source Data │ └── TF_final.csv ├── scMEGA pipeline for constructing TF networks.R ├── snATAC analysis.R └── trajectory analysis of TF motifs.R └── README.md /Figure 1/DA_score.R: -------------------------------------------------------------------------------- 1 | library(KEGGREST) 2 | library(plyr) 3 | 4 | 5 | LC_matrix <- fread("./LC_matrix.csv") 6 | GC_matrix <- fread("./GC_matrix.csv") 7 | anno_meta <- list(LC_MS=LC_matrix[,1:15], 8 | GC_MS=GC_matrix[,1:10]) 9 | LC_matrix <- data.frame(LC_matrix[,16:165],row.names = LC_matrix$Metabolites) 10 | GC_matrix <- data.frame(GC_matrix[,11:160],row.names = GC_matrix$`Metabolite name`) 11 | 12 | 13 | matrix_meta <- rbind(LC_matrix,GC_matrix) 14 | matrix_meta <- log2(matrix_meta) 15 | 16 | mean_N <- rowMeans(matrix_meta[,1:50]) 17 | mean_T <- rowMeans(matrix_meta[,51:150]) 18 | diff_meta <- data.frame(mean_N,mean_T) 19 | diff_meta$log2FC <- diff_meta$mean_T-diff_meta$mean_N 20 | p_value <- c() 21 | for (i in 1:nrow(matrix_meta)) { 22 | p <- wilcox.test(t(matrix_meta[i,1:50]),t(matrix_meta[i,51:150])) 23 | p_value <- c(p_value,p[["p.value"]]) 24 | } 25 | diff_meta$p_value <- p_value 26 | diff_meta$adj_p <- p.adjust(p_value,"fdr") 27 | diff_meta$metabollites <- rownames(diff_meta) 28 | diff_meta$group <- c(rep("LC",nrow(LC_matrix)),rep("GC",nrow(GC_matrix))) 29 | diff_meta$KEGG_ID <- c(anno_meta$LC_MS$kegg,anno_meta$GC_MS$KEGG) 30 | diff_meta$HMDB <- c(anno_meta$LC_MS$`Compound ID`,anno_meta$GC_MS$HMDB) 31 | 32 | 33 | ##### load kegg annotation file ############# 34 | # source("./get.kegg.all.R") 35 | # source("./get.kegg.byId.R") 36 | # 37 | # keggAll = get.kegg.all() 38 | # save(keggAll, file = "keggAll.Rdata") 39 | 40 | load("keggAll.Rdata") 41 | 42 | KEGG_anno <- keggAll[["compound"]] 43 | KEGG_anno <- KEGG_anno[KEGG_anno$ENTRY %in% c(anno_meta$LC_MS$kegg,anno_meta$GC_MS$KEGG),] 44 | KEGG_anno <- KEGG_anno[,c(1,8)] 45 | 46 | 47 | test <- KEGG_anno[, 2] 48 | test <- strsplit(test, "///") 49 | test <- unlist(test) 50 | path_total <- unique(test) 51 | 52 | path <- matrix(NA, nrow = length(path_total), ncol = nrow(KEGG_anno)) 53 | colnames(path) <- KEGG_anno[, 1] 54 | 55 | path_list <- vector("list", nrow(KEGG_anno)) 56 | 57 | for (i in 1:nrow(KEGG_anno)) { 58 | test <- strsplit(KEGG_anno[i, 2], "///")[[1]] 59 | test <- as.data.frame(x = test, row.names = test)[path_total, , drop = FALSE] 60 | test <- as.matrix(test) 61 | colnames(test) <- KEGG_anno[i, 1] 62 | path_list[[i]] <- test 63 | } 64 | 65 | path <- do.call(cbind, path_list) 66 | 67 | b <- rowSums(!is.na(path)) 68 | path <- data.frame(b,path) 69 | 70 | ############# extract differetilly expressed metabolites ############### 71 | 72 | up <- diff_meta$KEGG_ID[diff_meta$log2FC > 1 & diff_meta$adj_p < 0.05] 73 | up <- up[up %in% colnames(path)] %>% unique() 74 | down <- diff_meta$KEGG_ID[diff_meta$log2FC < -1 & diff_meta$adj_p < 0.05] 75 | down <- down[down %in% colnames(path)] %>% unique() 76 | 77 | 78 | ############# calculate number of differetilly expressed metabolites in each pathway ############### 79 | 80 | up <- as.matrix(path[, up]) 81 | b <- apply(up, 1, function(x) sum(!is.na(x))) 82 | path$up <- b 83 | 84 | down <- as.matrix(path[, down]) 85 | b <- apply(down, 1, function(x) sum(!is.na(x))) 86 | path$down <- b 87 | 88 | path <- path[,c(ncol(path),ncol(path)-1,1:(ncol(path)-2))] 89 | colnames(path)[1:3] <- c("down","up","total") 90 | path$DA <- (path$up-path$down)/path$total 91 | path <- path[,c(ncol(path),1:(ncol(path)-1))] 92 | rownames(path) <- path_total 93 | path <- path[path$total >= 3,] 94 | 95 | PATH_use <- c("map01210: 2-Oxocarboxylic acid metabolism", "map02010: ABC transporters" , 96 | "map00250: Alanine, aspartate and glutamate metabolism", "map00592: alpha-Linolenic acid metabolism" , 97 | "map00520: Amino sugar and nucleotide sugar metabolism", "map00970: Aminoacyl-tRNA biosynthesis" , 98 | "map00590: Arachidonic acid metabolism", "map00330: Arginine and proline metabolism" , 99 | "map00220: Arginine biosynthesis", "map00053: Ascorbate and aldarate metabolism" , 100 | "map00410: beta-Alanine metabolism", "map01230: Biosynthesis of amino acids", 101 | "map04973: Carbohydrate digestion and absorption", "map04979: Cholesterol metabolism", 102 | "map00020: Citrate cycle (TCA cycle)" , "map00460: Cyanoamino acid metabolism" , 103 | "map00270: Cysteine and methionine metabolism", "map00472: D-Arginine and D-ornithine metabolism" , 104 | "map00471: D-Glutamine and D-glutamate metabolism", "map00051: Fructose and mannose metabolism" , 105 | "map00052: Galactose metabolism", "map00480: Glutathione metabolism" , 106 | "map00561: Glycerolipid metabolism" , "map00564: Glycerophospholipid metabolism", 107 | "map00260: Glycine, serine and threonine metabolism" , "map00010: Glycolysis / Gluconeogenesis" , 108 | "map00300: Lysine biosynthesis" , "map00310: Lysine degradation", 109 | "map00760: Nicotinate and nicotinamide metabolism", "map00190: Oxidative phosphorylation" , 110 | "map00770: Pantothenate and CoA biosynthesis" , "map00030: Pentose phosphate pathway", 111 | "map00360: Phenylalanine metabolism", "map03320: PPAR signaling pathway", 112 | "map00640: Propanoate metabolism", "map04974: Protein digestion and absorption" , 113 | "map00230: Purine metabolism" , "map00240: Pyrimidine metabolism" , 114 | "map00620: Pyruvate metabolism" , "map04923: Regulation of lipolysis in adipocytes", 115 | "map00430: Taurine and hypotaurine metabolism", "map00380: Tryptophan metabolism", 116 | "map00350: Tyrosine metabolism" , "map00290: Valine, leucine and isoleucine biosynthesis", 117 | "map00280: Valine, leucine and isoleucine degradation", "map04270: Vascular smooth muscle contraction") 118 | 119 | DA2 <- path[PATH_use,1:4] 120 | DA2$color = ifelse(DA2$DA == 0, "grey75", 121 | ifelse(DA2$DA > 0, "red", 122 | ifelse(DA2$DA < -0,"blue","grey75"))) 123 | DA2$X <- sapply(strsplit(rownames(DA2),": "),"[",2) 124 | 125 | library(ggplot2) 126 | library(ggsci) 127 | library(RColorBrewer) 128 | 129 | DA2$total[DA2$total>20]=20 ###balance the size of each dot 130 | DA2 <- DA2[order(DA2$X,decreasing = T),] 131 | DA2$X <- factor(DA2$X, levels = DA2$X) 132 | 133 | col <- brewer.pal(11,"RdBu")[11:1] 134 | 135 | #####################Figure 1I######################### 136 | 137 | ggplot(DA2,aes(DA,X),color = DA, fill = color)+ 138 | geom_bar(aes(DA,X),data=DA2,position=position_dodge(),width=0.15, stat="identity") + 139 | geom_point(aes(DA,X, size=total, color = DA),data = DA2)+ 140 | theme_bw() + scale_color_gradientn(colors = col,limits=c(-0.85,0.85)) + 141 | xlim(-0.85,0.85) + geom_vline(xintercept = 0.2,linetype=2) + 142 | geom_vline(xintercept = -0.2,linetype=2) + 143 | labs(x = "DA score", y = "Pathways")+ 144 | theme(axis.text.y = element_text(size = 12), 145 | axis.text.x = element_text(size = 12)) 146 | ggsave("DA_sup_IM1_3.pdf",width = 10,height = 3) 147 | 148 | 149 | -------------------------------------------------------------------------------- /Figure 1/PCA&correlation&ssgsea analysis.R: -------------------------------------------------------------------------------- 1 | library(ggplot2) 2 | library(ggsci) 3 | 4 | 5 | coding_combat2_mat <- read.csv("./bulkRNA_matrix_TPM.csv",row.names = 1) ###matrix of bulk RNA-seq 6 | coding_combat2_mat[1:5,1:5] 7 | 8 | pca <- prcomp(t(coding_combat2_mat), scale=F) 9 | pca <- pca[["x"]] 10 | pca <- as.data.frame(pca) 11 | 12 | 13 | #############################Figure 1G_1################################### 14 | 15 | NT <- sapply(strsplit(rownames(pca),"_"),"[",2) 16 | group <- ArchR::ArchRPalettes[2][[1]][c(14,16)] 17 | names(group) <- c("N","T") 18 | 19 | ggplot(pca, aes(PC1,PC2, color = NT)) + geom_point(size=2,alpha=1) + 20 | scale_color_manual(values = group)+ 21 | stat_ellipse(data=pca,aes(x=PC1,y=PC2,fill=NT,color=NT), 22 | geom = "polygon",alpha=0.2,level=0.96,type="t",linetype = 0,show.legend = F)+ 23 | scale_fill_manual(values = group)+theme_bw() + 24 | theme( 25 | legend.title = element_blank(), 26 | panel.background = element_blank(), 27 | panel.grid = element_blank(), 28 | axis.text = element_text(color = 'black',size = 15, face = 'plain'), 29 | axis.title = element_text(color = 'black',size = 15, face = 'plain'), 30 | axis.ticks = element_line(color = 'black')) + #coord_fixed(ratio = 1)+ 31 | geom_vline(xintercept = 0,linetype="dashed")+geom_hline(yintercept = 0,linetype="dashed") 32 | 33 | 34 | ################processing global proteomics data############### 35 | 36 | library(data.table) 37 | library(NormalyzerDE) 38 | 39 | protein <- fread("../../蛋白组/protein_gene_level.csv") 40 | protein <- data.frame(protein[,-1], row.names = protein$V1) 41 | 42 | NT <- sapply(strsplit(colnames(protein),"_"),"[",2) 43 | 44 | design <- data.frame(sample=colnames(protein),group=NT) 45 | 46 | write.table(design,"design_protein.txt",col.names = T, row.names = F,sep = "\t",quote = F) 47 | write.table(protein,"matrix_protein.txt",col.names = T, row.names = F,sep = "\t",quote = F) 48 | 49 | 50 | jobName <- "vignette_run" 51 | 52 | experimentObj <- setupRawDataObject("matrix_protein.txt", "design_protein.txt", 53 | "default", TRUE, "sample", "group") 54 | normObj <- getVerifiedNormalyzerObject(jobName, experimentObj) 55 | normResults <- normMethods(normObj) 56 | 57 | protein_VSN <- normResults@normalizations$VSN 58 | protein_VSN[is.na(protein_VSN)==TRUE]=0 59 | rownames(protein_VSN) <- rownames(protein) 60 | 61 | pca <- prcomp(t(protein_VSN), scale=F) 62 | pca <- pca[["x"]] 63 | pca <- as.data.frame(pca) 64 | 65 | 66 | #############################Figure 1G_2################################### 67 | 68 | NT <- sapply(strsplit(rownames(pca),"_"),"[",2) 69 | group <- ArchR::ArchRPalettes[2][[1]][c(14,16)] 70 | names(group) <- c("N","T") 71 | 72 | ggplot(pca, aes(PC1,PC2, color = NT)) + geom_point(size=2,alpha=1) + 73 | scale_color_manual(values = group)+ 74 | stat_ellipse(data=pca,aes(x=PC1,y=PC2,fill=NT,color=NT), 75 | geom = "polygon",alpha=0.2,level=0.96,type="t",linetype = 0,show.legend = F)+ 76 | scale_fill_manual(values = group)+theme_bw() + 77 | theme( 78 | legend.title = element_blank(), 79 | panel.background = element_blank(), 80 | panel.grid = element_blank(), 81 | axis.text = element_text(color = 'black',size = 15, face = 'plain'), 82 | axis.title = element_text(color = 'black',size = 15, face = 'plain'), 83 | axis.ticks = element_line(color = 'black')) + 84 | geom_vline(xintercept = 0,linetype="dashed")+geom_hline(yintercept = 0,linetype="dashed") 85 | 86 | 87 | 88 | 89 | 90 | ################processing metabolism data################# 91 | 92 | library(data.table) 93 | library(NormalyzerDE) 94 | library(dplyr) 95 | 96 | LC_matrix <- fread("./LC_matrix.csv") 97 | LC_matrix <- data.frame(LC_matrix[,16:165],row.names = LC_matrix$Metabolites) 98 | 99 | GC_matrix <- fread("./GC_matrix.csv") 100 | GC_matrix <- data.frame(GC_matrix[,11:160],row.names = GC_matrix$`Metabolite name`) 101 | 102 | all(colnames(LC_matrix)==colnames(GC_matrix)) 103 | 104 | matrix_meta <- rbind(LC_matrix,GC_matrix) 105 | matrix_meta <- log2(matrix_meta) 106 | 107 | NT <- sapply(strsplit(colnames(matrix_meta),"_"),"[",2) 108 | 109 | 110 | pca <- prcomp(t(matrix_meta), scale=F) 111 | pca <- pca[["x"]] 112 | pca <- as.data.frame(pca) 113 | 114 | 115 | #############################Figure 1G_2################################### 116 | 117 | NT <- sapply(strsplit(rownames(pca),"_"),"[",2) 118 | group <- ArchR::ArchRPalettes[2][[1]][c(14,16)] 119 | names(group) <- c("N","T") 120 | 121 | ggplot(pca, aes(PC1,PC2, color = NT)) + geom_point(size=2,alpha=1) + 122 | scale_color_manual(values = group)+ 123 | stat_ellipse(data=pca,aes(x=PC1,y=PC2,fill=NT,color=NT), 124 | geom = "polygon",alpha=0.2,level=0.96,type="t",linetype = 0,show.legend = F)+ 125 | scale_fill_manual(values = group)+theme_bw() + 126 | theme( 127 | legend.title = element_blank(), 128 | panel.background = element_blank(), 129 | panel.grid = element_blank(), 130 | axis.text = element_text(color = 'black',size = 15, face = 'plain'), 131 | axis.title = element_text(color = 'black',size = 15, face = 'plain'), 132 | axis.ticks = element_line(color = 'black')) + #coord_fixed(ratio = 1)+ 133 | geom_vline(xintercept = 0,linetype="dashed")+geom_hline(yintercept = 0,linetype="dashed") 134 | 135 | 136 | 137 | ############correlation between CNV, mRNA and protein################## 138 | 139 | cnv_gene <- read.table("../../SNV/gistic/broad_data_by_genes.txt",sep = "\t",header = T, row.names = 1) 140 | 141 | cnv_gene <- cnv_gene[,grep("_T",colnames(cnv_gene),invert = T)] 142 | meta_loc <- cnv_gene[,1:2] 143 | cnv_gene <- cnv_gene[,3:97] 144 | colnames(cnv_gene) <- gsub(".sorted.rmdup","",colnames(cnv_gene)) 145 | colnames(cnv_gene) <- gsub("Tp","T",colnames(cnv_gene)) 146 | colnames(cnv_gene) <- gsub("TP","T",colnames(cnv_gene)) 147 | colnames(cnv_gene)[colnames(cnv_gene)=="w62T"]="W62T" 148 | colnames(cnv_gene) <- sub("(.)$", "_\\1", colnames(cnv_gene)) 149 | 150 | library(multiOmicsViz) 151 | 152 | ##################Extended data figure 1G-1################## 153 | gene_select <- intersect(rownames(cnv_gene),rownames(coding_combat2_mat)) 154 | WTS_cnv <- coding_combat2_mat[gene_select,colnames(cnv_gene)] 155 | 156 | targetOmicsList <- list() 157 | targetOmicsList[[1]] <- WTS_cnv 158 | 159 | chr <- as.character(c(1:22)) 160 | outputfile <- paste("./","/heatmap_mRNA_CNV",sep="") 161 | multiOmicsViz(cnv_gene[,],sourceOmicsName="CNV","All",targetOmicsList, 162 | "mRNA","All",0.01,outputfile=outputfile) 163 | 164 | ##################Extended data figure 1G-2################## 165 | gene_select <- intersect(rownames(cnv_gene),rownames(protein_VSN)) 166 | protein_cnv <- protein_VSN[gene_select,colnames(cnv_gene)] 167 | 168 | targetOmicsList <- list() 169 | targetOmicsList[[1]] <- protein_cnv 170 | 171 | outputfile <- paste("./","/heatmap_protein_CNV",sep="") 172 | multiOmicsViz(cnv_gene, sourceOmicsName="CNV","All",targetOmicsList, 173 | "protein","All",0.01,outputfile=outputfile) 174 | 175 | 176 | 177 | ##############ssgsea analysis################## 178 | ########## obtained from MSigDB ############### 179 | library(GSVA) 180 | library(GSEABase) 181 | library(limma) 182 | 183 | geneset <- getGmt("./h.all.v7.2.symbols.gmt", geneIdType = SymbolIdentifier(), collectionType = BroadCollection(category="h")) 184 | geneset2 <- getGmt("./c2.all.v7.5.1.symbols.gmt", geneIdType = SymbolIdentifier(), collectionType = BroadCollection(category="c2")) 185 | geneset5 <- getGmt("./c5.all.v7.5.1.symbols.gmt", geneIdType = SymbolIdentifier(), collectionType = BroadCollection(category="c2")) 186 | 187 | matrix <- protein_VSN 188 | res_h_protein <- gsva(as.matrix(matrix), geneset, method = "ssgsea", parallel.sz = 0, verbose = T) 189 | res2_protein <- gsva(as.matrix(matrix), geneset2, method = "ssgsea", parallel.sz = 0, verbose = T) 190 | res5_protein <- gsva(as.matrix(matrix), geneset5, method = "ssgsea", parallel.sz = 0, verbose = T) 191 | 192 | NT <- sapply(strsplit(colnames(matrix),"_"),"[",2) 193 | 194 | ################limma################## 195 | 196 | group<-model.matrix(~factor(NT)) 197 | colnames(group) <- c("normal","tumor") 198 | fit<-lmFit(rbind(res_h,res2,res5),group) 199 | fit2<-eBayes(fit) 200 | allDiff=topTable(fit2,adjust='fdr',coef=2,number=200000) 201 | allDiff$X <- row.names(allDiff) 202 | allDiff$X <- tolower(allDiff$X) 203 | 204 | gsva_use <- c("HALLMARK_INTERFERON_GAMMA_RESPONSE", "HALLMARK_HYPOXIA", 205 | "HALLMARK_INFLAMMATORY_RESPONSE", "HALLMARK_GLYCOLYSIS", 206 | "HALLMARK_MTORC1_SIGNALING", "HALLMARK_ANGIOGENESIS", 207 | "HALLMARK_ADIPOGENESIS", "HALLMARK_FATTY_ACID_METABOLISM", 208 | "HALLMARK_OXIDATIVE_PHOSPHORYLATION", "KEGG_VALINE_LEUCINE_AND_ISOLEUCINE_DEGRADATION", 209 | "KEGG_ARGININE_AND_PROLINE_METABOLISM", "KEGG_TAURINE_AND_HYPOTAURINE_METABOLISM", 210 | "KEGG_RETINOL_METABOLISM", "KEGG_NITROGEN_METABOLISM", 211 | "KEGG_PROPANOATE_METABOLISM", "KEGG_FATTY_ACID_METABOLISM", 212 | "KEGG_CITRATE_CYCLE_TCA_CYCLE", "KEGG_GLUTATHIONE_METABOLISM", 213 | "KEGG_GALACTOSE_METABOLISM", "KEGG_FRUCTOSE_AND_MANNOSE_METABOLISM", 214 | "KEGG_CYSTEINE_AND_METHIONINE_METABOLISM", "KEGG_GLYCEROLIPID_METABOLISM", 215 | "KEGG_ALANINE_ASPARTATE_AND_GLUTAMATE_METABOLISM", "GOMF_FATTY_ACID_LIGASE_ACTIVITY", 216 | "REACTOME_MITOCHONDRIAL_FATTY_ACID_BETA_OXIDATION", "GOBP_FATTY_ACID_BIOSYNTHETIC_PROCESS") 217 | 218 | data <- allDiff[gsva_use,] 219 | data$X <- gsub("_"," ",data$X) 220 | 221 | data <- data[order(data$t,decreasing = F),] 222 | data$order <- 1:nrow(data) 223 | data$color <- ifelse(data$t > 0, "up", "down") 224 | data$X <- factor(data$X, levels = data$X) 225 | 226 | colors <- c("up" = "#6E4B9E", "down" = "#D24B27") 227 | 228 | ###################Figure 1H-2##################### 229 | ggplot(data,aes(x=X, y=t, fill = color)) + geom_bar(stat="identity",alpha=0.7) + 230 | theme_classic() + coord_flip() + scale_fill_manual(values = colors) + 231 | ylab("T-value")+xlab("Pathways") 232 | 233 | 234 | #Figure 1H-1 could be drawn with matrix=coding_combat2_mat 235 | 236 | matrix <- coding_combat2_mat 237 | res_h_RNA <- gsva(as.matrix(matrix), geneset, method = "ssgsea", parallel.sz = 0, verbose = T) 238 | res2_RNA <- gsva(as.matrix(matrix), geneset2, method = "ssgsea", parallel.sz = 0, verbose = T) 239 | res5_RNA <- gsva(as.matrix(matrix), geneset5, method = "ssgsea", parallel.sz = 0, verbose = T) 240 | 241 | NT <- sapply(strsplit(colnames(matrix),"_"),"[",2) 242 | 243 | group<-model.matrix(~factor(NT)) 244 | colnames(group) <- c("normal","tumor") 245 | fit<-lmFit(rbind(res_h,res2,res5),group) 246 | fit2<-eBayes(fit) 247 | allDiff=topTable(fit2,adjust='fdr',coef=2,number=200000) 248 | allDiff$X <- row.names(allDiff) 249 | allDiff$X <- tolower(allDiff$X) 250 | 251 | data <- allDiff[gsva_use,] 252 | data$X <- gsub("_"," ",data$X) 253 | 254 | data <- data[order(data$t,decreasing = F),] 255 | data$order <- 1:nrow(data) 256 | data$color <- ifelse(data$t > 0, "up", "down") 257 | data$X <- factor(data$X, levels = data$X) 258 | 259 | colors <- c("up" = "#6E4B9E", "down" = "#D24B27") 260 | 261 | ###################Figure 1H-1##################### 262 | ggplot(data,aes(x=X, y=t, fill = color)) + geom_bar(stat="identity",alpha=0.7) + 263 | theme_classic() + coord_flip() + scale_fill_manual(values = colors) + 264 | ylab("T-value")+xlab("Pathways") 265 | 266 | 267 | 268 | -------------------------------------------------------------------------------- /Figure 1/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 1 and Extended Data Figure 1. code_SNA.R contains code for Fig. 1b-1f and eFig 1a-1g. PCA&correlation&ssgsea analysis.R contains code for Fig 1g-1h. DA_score.R contains code for Figure 1i. get.kegg.all.R & get.kegg.byId.R could help load genesets form KEGG used in DA score analysis. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 1/code_SNA.R: -------------------------------------------------------------------------------- 1 | library(maftools) 2 | library(sigminer) 3 | library(NMF) 4 | library(ComplexHeatmap) 5 | library(circlize) 6 | library(RColorBrewer) 7 | library(viridis) 8 | library(ggsci) 9 | library(ggplot2) 10 | library(agricolae) 11 | library(ggsignif) 12 | library(dplyr) 13 | options(stringsAsFactors = F) 14 | 15 | annovar.laml_demo <- annovarToMaf(annovar = "./mutation.maf", #####MAF file of TJ-RCC 16 | refBuild = 'hg38', 17 | tsbCol = 'Tumor_Sample_Barcode', 18 | MAFobj = T) 19 | 20 | 21 | 22 | #######################Figure 1B################################# 23 | ###########Global Mutation landscape of TJ-RCC################### 24 | 25 | color <- ArchR::ArchRPalettes[5][[1]][6:1]#[-3] 26 | names(color) <- c("C>T","C>G", "C>A", "T>A", "T>C", "T>G") 27 | 28 | vc_cols = ArchR::ArchRPalettes[1][[1]][8:1]#[-4] 29 | names(vc_cols) = c( 30 | 'Frame_Shift_Del', 31 | 'Missense_Mutation', 32 | 'Nonsense_Mutation', 33 | 'Multi_Hit', 34 | 'Frame_Shift_Ins', 35 | 'In_Frame_Ins', 36 | 'Splice_Site', 37 | 'In_Frame_Del' 38 | ) 39 | 40 | oncoplot(maf = annovar.laml_demo,draw_titv=T, 41 | genes = c("VHL","PBRM1","SETD2","BAP1","KDM5C","PCLO","CSMD3","SYNE1","XIRP2","MTOR","TP53", 42 | "PTEN","NFE2L2","KEAP1","PKHD1L1","RB1"), 43 | sepwd_samples = 0, 44 | fontSize = 0.8, 45 | keepGeneOrder = F, 46 | colors = vc_cols, 47 | bgCol = "grey90", 48 | titv_col=color, 49 | altered = T, 50 | drawBox = T, 51 | removeNonMutated=F, 52 | borderCol = NA, 53 | showTumorSampleBarcodes = F) 54 | 55 | 56 | ##############Extended data Figure 1B################# 57 | annovar.laml <- annovarToMaf(annovar = "./merge_490.txt", ###merge_490.txt is the file containing SNV and INDEL information of 3 Chinese cohort 58 | refBuild = 'hg38', 59 | tsbCol = 'Tumor_Sample_Barcode', 60 | MAFobj = T) 61 | 62 | somaticInteractions(maf = annovar.laml, 63 | genes = c("VHL","PBRM1","TTN","BAP1","SETD2","KDM5C","MUC16","PCLO","MTOR","XIRP2", 64 | "PKHD1L1","CSMD3","ABCA13","MALRD1","SYNE1","TP53", 65 | "PTEN") 66 | ) 67 | 68 | 69 | #######################Figure 1B################################# 70 | ###########Global Mutation landscape of TJ-RCC################### 71 | 72 | dir="../../SNV/merge/" ####dir is the direction deposited vcf files 73 | list <- list.files(dir,pattern = "hg38_multianno.vcf", 74 | full.names = TRUE) %>% grep("indel",.,invert = T,value = T) 75 | 76 | maf <- read_vcf(list) 77 | mt_tally <- sig_tally( 78 | maf, 79 | ref_genome = "BSgenome.Hsapiens.UCSC.hg38", 80 | useSyn = TRUE 81 | ) 82 | mt_tally$nmf_matrix[1:5, 1:5] 83 | 84 | mt_sig <- sig_auto_extract(mt_tally$nmf_matrix, 85 | K0 = 10, nrun = 10, 86 | strategy = "stable" 87 | ) 88 | 89 | ##############Extended data Figure 1C################# 90 | ###############six mutation signature################# 91 | 92 | sim_v3 <- get_sig_similarity(mt_sig, sig_db = "SBS") 93 | show_sig_profile(mt_sig, mode = "SBS", style = "cosmic",x_label_angle = 90,palette = color)+scale_color_npg() 94 | 95 | 96 | ##############Extended data Figure 1D################# 97 | ###########NMF cluster of mutation signature################# 98 | 99 | grp <- get_groups(mt_sig,method = "exposure") 100 | grp_label <- grp$group ###extract NMF cluster 101 | names(grp_label) <- grp$sample 102 | 103 | 104 | show_sig_exposure(mt_sig, style = "cosmic", groups = grp_label, 105 | palette = pal_npg()(7), rm_grid_line = T,rm_panel_border=F,rm_space=T) 106 | 107 | 108 | 109 | ##############Extended data Figure 1E################# 110 | ###########annotion of mutation signature################# 111 | mark_sig <- colnames(sim_v3$similarity)[rowMax(t(sim_v3$similarity))>0.7] 112 | mark_sig <- colnames(sim_v3$similarity)[colnames(sim_v3$similarity)%in%mark_sig] 113 | gene_pos <- which(colnames(sim_v3$similarity) %in% mark_sig) 114 | row_anno <- rowAnnotation(mark_sig = anno_mark(at = gene_pos, 115 | labels = mark_sig)) 116 | 117 | col <- ArchR::ArchRPalettes[19][[1]] 118 | Heatmap(t(sim_v3$similarity), 119 | col = colorRamp2(seq(0,1,length.out = 9),col), 120 | cluster_rows = T, 121 | cluster_columns = F, 122 | show_column_names = T, 123 | show_row_names = F, 124 | use_raster=T, 125 | border = "BLACK", 126 | show_row_dend = T, 127 | na_col = "grey85", 128 | clustering_method_rows = "ward.D2", 129 | clustering_method_columns = "ward.D", 130 | column_gap = unit(1, "mm"), 131 | right_annotation = row_anno, 132 | row_gap = unit(0, "mm"), 133 | column_title = NULL) 134 | 135 | 136 | ##################Extended data Figure 1F###################### 137 | 138 | library(BSgenome.Hsapiens.UCSC.hg38) 139 | 140 | df <- data.frame(chromName = seqnames(BSgenome.Hsapiens.UCSC.hg38), # chromosome name 141 | chromlength = seqlengths(BSgenome.Hsapiens.UCSC.hg38)# chromosome length 142 | ) 143 | df$chromNum <- 1:length(df$chromName) 144 | 145 | df <- df[1:22,]###chr1-22 146 | 147 | df$chromlengthCumsum <- cumsum(as.numeric(df$chromlength)) 148 | df$chormStartPosFrom0 <- c(0,df$chromlengthCumsum[-nrow(df)]) 149 | 150 | tmp_middle <- diff(c(0,df$chromlengthCumsum)) / 2 151 | df$chromMidelePosFrom0 <- df$chormStartPosFrom0 + tmp_middle 152 | 153 | scores <- read.table("./gistic/scores.gistic",sep="\t",header=T,stringsAsFactors = F) 154 | 155 | head(scores) 156 | 157 | chromID <- scores$Chromosome 158 | 159 | scores$StartPos <- scores$Start + df$chormStartPosFrom0[chromID] 160 | scores$EndPos <- scores$End + df$chormStartPosFrom0[chromID] 161 | 162 | range(scores$G.score) 163 | 164 | scores[scores$Type == "Del", "G.score"] <- scores[scores$Type == "Del", "G.score"] * -1 165 | scores[scores$Type == "Del", "frequency"] <- scores[scores$Type == "Del", "frequency"] * -1 166 | 167 | range(scores$G.score) 168 | 169 | 170 | df$ypos <- rep(c(0.7,0.8),11) 171 | 172 | ggplot(scores, aes(StartPos, frequency))+ 173 | geom_area(aes(group=Type, fill=factor(Type,levels = c("Del","Amp"))))+ 174 | scale_fill_lancet(guide=guide_legend(reverse = T),name="Type")+ 175 | geom_vline(data = df ,mapping=aes(xintercept=chromlengthCumsum),linetype=2)+ 176 | geom_text(data = df,aes(x=chromMidelePosFrom0,y=ypos,label=chromName))+ 177 | scale_x_continuous(expand = c(0,-1000),limits = c(0,2.9e9),name = NULL,labels = NULL)+ 178 | ylim(-1,1)+ 179 | theme_minimal()+ 180 | theme(legend.position = "top", 181 | axis.text.y = element_text(color = "black",size = 14), 182 | axis.title.y = element_text(color = "black",size = 16) 183 | ) 184 | 185 | 186 | 187 | ###############Figure 1C################### 188 | 189 | SNA <- annovar.laml@variants.per.sample 190 | SNA <- as.data.frame(SNA) 191 | row.names(SNA) <- SNA$Tumor_Sample_Barcode 192 | 193 | group <- as.data.frame(grp_label) 194 | group$sample <- rownames(group) 195 | group$sample <- gsub("_annovar.hg38_multianno","",group$sample) 196 | group$sample <- gsub("Tp","T",group$sample) 197 | group$sample <- gsub("_snp","",group$sample) 198 | 199 | rownames(group) <- group$sample 200 | SNA$Tumor_Sample_Barcode <- as.character(SNA$Tumor_Sample_Barcode) 201 | SNA <- SNA[row.names(group),] 202 | rownames(SNA) <- rownames(group) 203 | SNA$Tumor_Sample_Barcode <- rownames(SNA) 204 | SNA[is.na(SNA)=="TRUE"]=0 205 | 206 | group <- group[(SNA$Tumor_Sample_Barcode),] 207 | all(group$sample==SNA$Tumor_Sample_Barcode) 208 | SNA$SBS="non-AA" 209 | SNA$SBS[which(group$grp_label=="2")]="AA" 210 | 211 | SNA$group <- "TJ" 212 | SNA$group[grep("_T",SNA$Tumor_Sample_Barcode)]="Pek" 213 | SNA$group[grep("ccRCC",SNA$Tumor_Sample_Barcode)]="FUD" 214 | 215 | SBS <- ArchR::ArchRPalettes[2][[1]][c(14,16)] 216 | names(SBS) <- c("AA","non-AA") 217 | 218 | ggplot(SNA,aes(SBS,Variants,color=SBS)) + 219 | geom_boxplot(outlier.colour = NA) + 220 | theme_bw() + 221 | geom_signif(comparisons = list(c("AA","non-AA"))) + 222 | geom_jitter(data = SNA,aes(shape=group,alpha=0.7)) + 223 | theme( 224 | plot.title = element_text(hjust = 0.5), 225 | axis.line = element_line(colour = "black",size=0.5), 226 | axis.title.y=element_text(size=14),axis.text.y=element_text(size=14), 227 | axis.title.x=element_blank(),axis.text.x=element_text(size=12) 228 | ) + scale_color_manual(values = SBS) 229 | 230 | 231 | 232 | #########################Figure 1E######################### 233 | AA_sample <- SNA$Tumor_Sample_Barcode[SNA$SBS=="AA"] 234 | vcf_AA <- annovar.laml@data[annovar.laml@data$Tumor_Sample_Barcode%in%AA_sample,] 235 | vcf_non_AA <- annovar.laml@data[!annovar.laml@data$Tumor_Sample_Barcode%in%AA_sample,] 236 | 237 | mutation_map <- c("T>A" = "T>A", "A>T" = "T>A", 238 | "C>T" = "C>T", "G>A" = "C>T", 239 | "C>G" = "C>G", "G>C" = "C>G", 240 | "C>A" = "C>A", "G>T" = "C>A", 241 | "T>C" = "T>C", "A>G" = "T>C", 242 | "T>G" = "T>G", "A>C" = "T>G") 243 | 244 | vcf_AA$AA <- mutation_map[paste(vcf_AA$Reference_Allele, vcf_AA$Tumor_Seq_Allele2, sep = ">")] 245 | vcf_non_AA$AA <- mutation_map[paste(vcf_non_AA$Reference_Allele, vcf_non_AA$Tumor_Seq_Allele2, sep = ">")] 246 | 247 | 248 | gene_hub <- c("VHL","PBRM1","SETD2","BAP1","KDM5C") 249 | genes = c("TTN","MUC16","PCLO","MTOR","XIRP2", 250 | "PKHD1L1","CSMD3","ABCA13","MALRD1","SYNE1") 251 | vcf_AA_hub <- vcf_AA[vcf_AA$Hugo_Symbol%in%gene_hub&is.na(vcf_AA$AA)=="FALSE",] 252 | vcf_AA_genes <- vcf_AA[vcf_AA$Hugo_Symbol%in%genes&is.na(vcf_AA$AA)=="FALSE",] 253 | pie_data <- table(vcf_AA_hub$AA)%>%data.frame() 254 | pie_data[4,2]/sum(pie_data$Freq) 255 | 256 | vcf_non_AA_hub <- vcf_non_AA[vcf_non_AA$Hugo_Symbol%in%gene_hub&is.na(vcf_non_AA$AA)=="FALSE",] 257 | vcf_non_AA_genes <- vcf_non_AA[vcf_non_AA$Hugo_Symbol%in%genes&is.na(vcf_non_AA$AA)=="FALSE",] 258 | 259 | pie_data <- table(vcf_non_AA_genes$AA)%>%data.frame() 260 | ggplot(data=pie_data, mapping=aes(x="Freq",y=Freq,fill=Var1))+ 261 | geom_bar(stat="identity",width=0.5,position='stack')+ 262 | coord_polar("y", start=0)+ 263 | scale_fill_manual(values=color)+theme_bw() 264 | 265 | pie_data <- table(vcf_AA_genes$AA)%>%data.frame() 266 | ggplot(data=pie_data, mapping=aes(x="Freq",y=Freq,fill=Var1))+ 267 | geom_bar(stat="identity",width=0.5,position='stack')+ 268 | coord_polar("y", start=0)+ 269 | scale_fill_manual(values=color)+theme_bw() 270 | 271 | pie_data <- table(vcf_non_AA_hub$AA)%>%data.frame() 272 | ggplot(data=pie_data, mapping=aes(x="Freq",y=Freq,fill=Var1))+ 273 | geom_bar(stat="identity",width=0.5,position='stack')+ 274 | coord_polar("y", start=0)+ 275 | scale_fill_manual(values=color)+theme_bw() 276 | 277 | pie_data <- table(vcf_AA_hub$AA)%>%data.frame() 278 | ggplot(data=pie_data, mapping=aes(x="Freq",y=Freq,fill=Var1))+ 279 | geom_bar(stat="identity",width=0.5,position='stack')+ 280 | coord_polar("y", start=0)+ 281 | scale_fill_manual(values=color)+theme_bw() 282 | 283 | 284 | #######################Figure 1F######################### 285 | vcf_AA_hub$Tumor_Sample_Barcode <- as.character(vcf_AA_hub$Tumor_Sample_Barcode) 286 | vcf_non_AA_hub$Tumor_Sample_Barcode <- as.character(vcf_non_AA_hub$Tumor_Sample_Barcode) 287 | vcf_AA_genes$Tumor_Sample_Barcode <- as.character(vcf_AA_genes$Tumor_Sample_Barcode) 288 | vcf_non_AA_genes$Tumor_Sample_Barcode <- as.character(vcf_non_AA_genes$Tumor_Sample_Barcode) 289 | 290 | pie_data <- table(vcf_non_AA_hub$AA,vcf_non_AA_hub$Tumor_Sample_Barcode)%>%data.frame() 291 | pie_data2 <- table(vcf_AA_hub$AA,vcf_AA_hub$Tumor_Sample_Barcode)%>%data.frame() 292 | number <- table(as.character(vcf_non_AA_hub$Tumor_Sample_Barcode))%>%data.frame() 293 | number2 <- table(as.character(vcf_AA_hub$Tumor_Sample_Barcode))%>%data.frame() 294 | 295 | pie_data <- pie_data[pie_data$Var1=="T>A",] 296 | pie_data2 <- pie_data2[pie_data2$Var1=="T>A",] 297 | pie_data$Freq <- pie_data$Freq/number$Freq 298 | pie_data2$Freq <- pie_data2$Freq/number2$Freq 299 | pie_data$group <- "non-AA" 300 | pie_data2$group <- "AA" 301 | pie_merge <- rbind(pie_data,pie_data2) 302 | 303 | ggplot(pie_merge,aes(group,Freq,color=group)) + geom_boxplot(outlier.colour = NA) +theme_bw()+ 304 | geom_signif(comparisons = list(c("AA","non-AA")),test = "t.test", 305 | ) + geom_jitter(data = pie_merge,aes(alpha=0.7),width = 0.2,height = 0.05) + 306 | theme(plot.title = element_text(hjust = 0.5), 307 | axis.line = element_line(colour = "black",size=0.5), 308 | axis.title.y=element_text(size=14),axis.text.y=element_text(size=14), 309 | axis.title.x=element_blank(),axis.text.x=element_text(size=12) 310 | ) + scale_color_manual(values = SBS) 311 | 312 | 313 | pie_data <- table(vcf_non_AA_genes$AA,vcf_non_AA_genes$Tumor_Sample_Barcode)%>%data.frame() 314 | pie_data2 <- table(vcf_AA_genes$AA,vcf_AA_genes$Tumor_Sample_Barcode)%>%data.frame() 315 | number <- table(as.character(vcf_non_AA_genes$Tumor_Sample_Barcode))%>%data.frame() 316 | number2 <- table(as.character(vcf_AA_genes$Tumor_Sample_Barcode))%>%data.frame() 317 | 318 | pie_data <- pie_data[pie_data$Var1=="T>A",] 319 | pie_data2 <- pie_data2[pie_data2$Var1=="T>A",] 320 | pie_data$Freq <- pie_data$Freq/number$Freq 321 | pie_data2$Freq <- pie_data2$Freq/number2$Freq 322 | pie_data$group <- "non-AA" 323 | pie_data2$group <- "AA" 324 | pie_merge <- rbind(pie_data,pie_data2) 325 | 326 | ggplot(pie_merge,aes(group,Freq,color=group)) + geom_boxplot(outlier.colour = NA) +theme_bw()+ 327 | geom_signif(comparisons = list(c("AA","non-AA")),test = "t.test", 328 | ) + geom_jitter(data = pie_merge,aes(alpha=0.7),width = 0.2,height = 0.05) + 329 | theme(plot.title = element_text(hjust = 0.5), 330 | axis.line = element_line(colour = "black",size=0.5), 331 | axis.title.y=element_text(size=14),axis.text.y=element_text(size=14), 332 | axis.title.x=element_blank(),axis.text.x=element_text(size=12) 333 | ) + scale_color_manual(values = SBS) 334 | 335 | -------------------------------------------------------------------------------- /Figure 1/get.kegg.all.R: -------------------------------------------------------------------------------- 1 | get.kegg.all <- 2 | function() { 3 | cmp <- keggList("compound") 4 | reactionEntry = keggList("reaction") 5 | 6 | cmpId = names(cmp) 7 | cmpId = sub('cpd:', '', cmpId) 8 | 9 | reactionEntry = names(reactionEntry) 10 | reactionEntry = sub('rn:', '', reactionEntry) 11 | 12 | keggReaction = get.kegg.byId(reactionEntry) 13 | keggReaction[is.na(keggReaction)] = "" 14 | 15 | keggCompound = get.kegg.byId(cmpId) 16 | keggCompound[is.na(keggCompound)] = "" 17 | 18 | # reference 19 | referIndex = grep('.+', keggReaction$REFERENCE) 20 | referId = keggReaction[grep('.+', keggReaction$REFERENCE), 'ENTRY'] 21 | referIdUnique = unique(keggReaction[grep('.+', keggReaction$REFERENCE), 'ENTRY']) 22 | 23 | redundantIndex = c() 24 | for(i in referIdUnique) { 25 | index = grep(i, referId) 26 | index = referIndex[index[-1]] 27 | redundantIndex = c(redundantIndex, index) 28 | } 29 | 30 | if(length(redundantIndex) > 0) { 31 | keggReaction_unique = keggReaction[-redundantIndex,] 32 | } else { 33 | keggReaction_unique = keggReaction 34 | } 35 | 36 | result = list() 37 | result[['reaction']] = keggReaction_unique 38 | result[['compound']] = keggCompound 39 | cat('# of reactions:', nrow(keggReaction_unique), '\n') 40 | cat('# of compounds:', nrow(keggCompound), '\n') 41 | return(result) 42 | } -------------------------------------------------------------------------------- /Figure 1/get.kegg.byId.R: -------------------------------------------------------------------------------- 1 | get.kegg.byId <- 2 | function(keggId) { 3 | kegg = data.frame() 4 | i = 1 5 | while(i <= length(keggId)) { 6 | 7 | cat('processing', keggId[i], '\n') 8 | query <- keggGet(keggId[i:(i+9)]) 9 | 10 | for(l in 1:length(query)) { 11 | 12 | keggRow = query[[l]] 13 | 14 | for(j in names(keggRow)) { 15 | if(j == 'DBLINKS') { 16 | for(k in 1:length(keggRow$DBLINKS)) { 17 | db = unlist(strsplit(keggRow$DBLINKS[k], ': '))[1] 18 | id = unlist(strsplit(keggRow$DBLINKS[k], ': '))[2] 19 | keggRow[[db]] = id 20 | } 21 | } else if (j == 'PATHWAY') { 22 | for(k in 1:length(keggRow$PATHWAY)) { 23 | keggRow$PATHWAY[k] = paste(names(keggRow$PATHWAY[k]), keggRow$PATHWAY[k], sep=': ') 24 | } 25 | keggRow$PATHWAY = paste(keggRow$PATHWAY, collapse='///') 26 | } else if (j == 'REFERENCE') { 27 | keggRow$REFERENCE = paste(keggRow$REFERENCE[[1]]$REFERENCE, collapse='///') 28 | } else { 29 | if(length(keggRow[[j]]) > 1) { 30 | keggRow[[j]] = paste(keggRow[[j]], collapse='///') 31 | } 32 | } 33 | } 34 | keggRow[['DBLINKS']] = NULL 35 | keggRow = as.data.frame(keggRow, stringsAsFactors=FALSE) 36 | kegg = rbind.fill(kegg, keggRow) 37 | kegg[is.na(kegg)] = '' 38 | } 39 | i = i + 10 40 | } 41 | return(kegg) 42 | } -------------------------------------------------------------------------------- /Figure 1/merge_490.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndersonHu85/ccRCC_multiomics/fd98f4dd118e44f980e0a1e39053283b1b482c67/Figure 1/merge_490.zip -------------------------------------------------------------------------------- /Figure 2/ORR_analysis.R: -------------------------------------------------------------------------------- 1 | library("sscVis") 2 | library("data.table") 3 | library("grid") 4 | library("cowplot") 5 | library("ggrepel") 6 | library("readr") 7 | library("plyr") 8 | library("ggpubr") 9 | library("ggplot2") 10 | library(tidyr) 11 | 12 | out.prefix <- "./ORR" 13 | 14 | do.tissueDist <- function(cellInfo.tb = cellInfo.tb, 15 | meta.cluster = cellInfo.tb$meta.cluster, 16 | colname.patient = "patient", 17 | loc = cellInfo.tb$loc, 18 | out.prefix, 19 | pdf.width=3, 20 | pdf.height=5, 21 | verbose=0){ 22 | ##input data 23 | library(data.table) 24 | dir.create(dirname(out.prefix),F,T) 25 | 26 | cellInfo.tb = data.table(cellInfo.tb) 27 | cellInfo.tb$meta.cluster = as.character(meta.cluster) 28 | 29 | if(is.factor(loc)){ 30 | cellInfo.tb$loc = loc 31 | }else{cellInfo.tb$loc = as.factor(loc)} 32 | 33 | loc.avai.vec <- levels(cellInfo.tb[["loc"]]) 34 | count.dist <- unclass(cellInfo.tb[,table(meta.cluster,loc)])[,loc.avai.vec] 35 | freq.dist <- sweep(count.dist,1,rowSums(count.dist),"/") 36 | freq.dist.bin <- floor(freq.dist * 100 / 10) 37 | print(freq.dist.bin) 38 | 39 | { 40 | count.dist.melt.ext.tb <- test.dist.table(count.dist) 41 | p.dist.tb <- dcast(count.dist.melt.ext.tb,rid~cid,value.var="p.value") 42 | OR.dist.tb <- dcast(count.dist.melt.ext.tb,rid~cid,value.var="OR") 43 | OR.dist.mtx <- as.matrix(OR.dist.tb[,-1]) 44 | rownames(OR.dist.mtx) <- OR.dist.tb[[1]] 45 | } 46 | 47 | sscVis::plotMatrix.simple(OR.dist.mtx, 48 | out.prefix=sprintf("%s.OR.dist",out.prefix), 49 | show.number=F, 50 | waterfall.row=T,par.warterfall = list(score.alpha = 2,do.norm=T), 51 | exp.name=expression(italic(OR)), 52 | z.hi=4, 53 | palatte=viridis::viridis(7), 54 | pdf.width = 4, pdf.height = pdf.height) 55 | if(verbose==1){ 56 | return(list("count.dist.melt.ext.tb"=count.dist.melt.ext.tb, 57 | "p.dist.tb"=p.dist.tb, 58 | "OR.dist.tb"=OR.dist.tb, 59 | "OR.dist.mtx"=OR.dist.mtx)) 60 | }else{ 61 | return(OR.dist.mtx) 62 | } 63 | } 64 | 65 | test.dist.table <- function(count.dist,min.rowSum=0) 66 | { 67 | count.dist <- count.dist[rowSums(count.dist)>=min.rowSum,,drop=F] 68 | sum.col <- colSums(count.dist) 69 | sum.row <- rowSums(count.dist) 70 | count.dist.tb <- as.data.frame(count.dist) 71 | setDT(count.dist.tb,keep.rownames=T) 72 | count.dist.melt.tb <- melt(count.dist.tb,id.vars="rn") 73 | colnames(count.dist.melt.tb) <- c("rid","cid","count") 74 | count.dist.melt.ext.tb <- as.data.table(ldply(seq_len(nrow(count.dist.melt.tb)), function(i){ 75 | this.row <- count.dist.melt.tb$rid[i] 76 | this.col <- count.dist.melt.tb$cid[i] 77 | this.c <- count.dist.melt.tb$count[i] 78 | other.col.c <- sum.col[this.col]-this.c 79 | this.m <- matrix(c(this.c, 80 | sum.row[this.row]-this.c, 81 | other.col.c, 82 | sum(sum.col)-sum.row[this.row]-other.col.c), 83 | ncol=2) 84 | res.test <- fisher.test(this.m) 85 | data.frame(rid=this.row, 86 | cid=this.col, 87 | p.value=res.test$p.value, 88 | OR=res.test$estimate) 89 | })) 90 | count.dist.melt.ext.tb <- merge(count.dist.melt.tb,count.dist.melt.ext.tb, 91 | by=c("rid","cid")) 92 | count.dist.melt.ext.tb[,adj.p.value:=p.adjust(p.value,"BH")] 93 | return(count.dist.melt.ext.tb) 94 | } 95 | 96 | ################### Figure 2G ###################### 97 | 98 | Immune <- snRNA[,snRNA$celltype%in%c("Myeloid","T & NK")] 99 | 100 | meta <- Immune@meta.data 101 | meta$loc <- meta$class 102 | 103 | meta$meta.cluster <- meta$celltype2 104 | 105 | OR.immune.list <- do.tissueDist(cellInfo.tb=meta, 106 | out.prefix=sprintf("%s.Immune_cell",out.prefix), 107 | pdf.width=4,pdf.height=8,verbose=1 108 | ) 109 | 110 | a=OR.immune.list[["OR.dist.tb"]] 111 | a <- as.data.frame(a) 112 | rownames(a) <- a$rid 113 | a <- a[,-1] 114 | a <- na.omit(a) 115 | 116 | col <- viridis(11,option = "D") 117 | 118 | b <- OR.immune.list$count.dist.melt.ext.tb[,c(1,2,6)] 119 | b <- spread(b,key = "cid", value = "adj.p.value") 120 | b <- data.frame(b[,-1],row.names = b$rid) 121 | b <- b[rownames(a),] 122 | 123 | b = ifelse(b >= 0.05&(a>1.5|a<0.5), "", 124 | ifelse(b<0.0001&(a>1.5|a<0.5),"****", 125 | ifelse(b<0.001&(a>1.5|a<0.5),"***", 126 | ifelse(b<0.01&(a>1.5|a<0.5),"**", 127 | ifelse(b < 0.05&(a>1.5|a<0.5),"*",""))))) 128 | 129 | bk=c(seq(0,0.99,by=0.01),seq(1,2,by=0.01)) 130 | 131 | pheatmap(a[,], border_color = "NA", fontsize = 9,cellheight = 12,cellwidth = 20,clustering_distance_rows="correlation", 132 | display_numbers = b,number_color="black",fontsize_number=10, 133 | cluster_col=F, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 134 | color = c(colorRampPalette(colors = col[1:6])(length(bk)/2), 135 | colorRampPalette(colors = col[6:11])(length(bk)/2))) 136 | 137 | 138 | ################### Extended Data Figure 3G ###################### 139 | 140 | EC <- snRNA[,snRNA$celltype%in%c("EC")] 141 | 142 | meta <- EC@meta.data 143 | meta$loc <- meta$class 144 | 145 | meta$meta.cluster <- meta$celltype2 146 | 147 | OR.EC.list <- do.tissueDist(cellInfo.tb=meta, 148 | out.prefix=sprintf("%s.EC",out.prefix), 149 | pdf.width=4,pdf.height=8,verbose=1 150 | ) 151 | 152 | a=OR.EC.list[["OR.dist.tb"]] 153 | a <- as.data.frame(a) 154 | rownames(a) <- a$rid 155 | a <- a[,-1] 156 | a <- na.omit(a) 157 | 158 | col <- viridis(11,option = "D") 159 | 160 | b <- OR.EC.list$count.dist.melt.ext.tb[,c(1,2,6)] 161 | b <- spread(b,key = "cid", value = "adj.p.value") 162 | b <- data.frame(b[,-1],row.names = b$rid) 163 | b <- b[rownames(a),] 164 | 165 | b = ifelse(b >= 0.05&(a>1.5|a<0.5), "", 166 | ifelse(b<0.0001&(a>1.5|a<0.5),"****", 167 | ifelse(b<0.001&(a>1.5|a<0.5),"***", 168 | ifelse(b<0.01&(a>1.5|a<0.5),"**", 169 | ifelse(b < 0.05&(a>1.5|a<0.5),"*",""))))) 170 | 171 | bk=c(seq(0,0.99,by=0.01),seq(1,2,by=0.01)) 172 | 173 | pheatmap(a[,], border_color = "NA", fontsize = 9,cellheight = 12,cellwidth = 20,clustering_distance_rows="correlation", 174 | display_numbers = b[,],number_color="black",fontsize_number=10, 175 | cluster_col=F, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 176 | color = c(colorRampPalette(colors = col[1:6])(length(bk)/2), 177 | colorRampPalette(colors = col[6:11])(length(bk)/2))) 178 | 179 | -------------------------------------------------------------------------------- /Figure 2/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 2 and Extended Data Figure 2-4. bulk omics analysis.R contains code for Fig. 2a-2d,2h and eFig 2f-2g. processing public ccRCC scRNA-seq data.R contains code for eFig 2a-2b. processing of snRNA-seq data.R contains code for Fig. 2e-2g & eFig 3f. ORR_analysis.R contains code for Fig 2g & eFig 3g. ssgsea_macrophage.R contains code for eFig 3j. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 2/Source Data /911_sig.txt: -------------------------------------------------------------------------------- 1 | cluster gene 2 | B CD79A 3 | B MS4A1 4 | B CD37 5 | B CD83 6 | B LY9 7 | B BANK1 8 | B CCR7 9 | B TNFRSF13C 10 | B ADAM28 11 | B LTB 12 | B SPIB 13 | B HLA-DQA1 14 | B BLK 15 | B CD79B 16 | B VPREB3 17 | B BCL11A 18 | B CD52 19 | B LAPTM5 20 | B SELL 21 | B RPL32 22 | B HLA-DRA 23 | B CD74 24 | B RPSA 25 | B HLA-DQB1 26 | B RPS12 27 | B PRKCB 28 | B SMAP2 29 | B EEF1B2 30 | B RHOH 31 | B RPS29 32 | B IRF8 33 | B CD55 34 | B RBM38 35 | B ARHGAP24 36 | B LIMD2 37 | B CXCR4 38 | B CD69 39 | B YPEL5 40 | B SMCHD1 41 | B NFKBID 42 | B EZR 43 | B NR4A2 44 | B HERPUD1 45 | B ALG13 46 | Plasma DERL3 47 | Plasma FKBP11 48 | Plasma PIM2 49 | Plasma CD27 50 | Plasma ANKRD28 51 | Plasma SSR4 52 | Plasma SEC11C 53 | Plasma XBP1 54 | Plasma HSP90B1 55 | Mast TPSB2 56 | Mast TPSAB1 57 | Mast CPA3 58 | Mast HPGDS 59 | Mast MS4A2 60 | Mast GATA2 61 | Mast HPGD 62 | Mast HDC 63 | Mast LTC4S 64 | Mast RGS13 65 | Mast GLUL 66 | Mast CTSG 67 | Mast IL1RL1 68 | Mast SLC18A2 69 | Mast KIT 70 | Mast VWA5A 71 | Mast ANXA1 72 | Mast ACSL4 73 | Mast LMNA 74 | Mast ALOX5AP 75 | Mast SDCBP 76 | Mast DUSP6 77 | Mast PRNP 78 | Mast AREG 79 | Mast ADCYAP1 80 | Mast SRGN 81 | Mast RGS2 82 | Mast GPR65 83 | Mast PTGS2 84 | Mast CAPG 85 | Mast CD9 86 | Mast SAMSN1 87 | Mast SMYD3 88 | Mast CKLF 89 | Mast RAC2 90 | Mast ARHGAP18 91 | Mast ADRB2 92 | Mast CD82 93 | Mast CDC42EP3 94 | Mast CD44 95 | Mast PTGS1 96 | Mast NFKBIA 97 | Mast LEO1 98 | Mast IL13 99 | Mast BMP2K 100 | Mast H3F3B 101 | Mast LIF 102 | Mast GALC 103 | Mast PRDX1 104 | Mast LMO4 105 | Mast TNFRSF9 106 | Mast RGS1 107 | Mast CTNNBL1 108 | Mast BIRC3 109 | Mast ELF1 110 | Mast NFKBIZ 111 | Mast NFKB1 112 | Mast FOSB 113 | Mast MYADM 114 | Mast TUBA1A 115 | CD4+ Th IL7R 116 | CD4+ Th ZFP36L2 117 | CD4+ Th CD2 118 | CD4+ Th CD3D 119 | CD4+ Th SPOCK2 120 | CD4+ Th CD3E 121 | CD4+ Th CREM 122 | CD4+ Th KLRB1 123 | CD4+ Th BTG1 124 | CD4+ Th S100A4 125 | CD4+ Th ARL4C 126 | CD4+ Th LEPROTL1 127 | CD4+ Th CCR6 128 | CD4+ Th PTPRC 129 | CD4+ Th EML4 130 | CD4+ Th RORA 131 | CD4+ Th TNFAIP3 132 | CD4+ Th CYTIP 133 | CD4+ Th TUBA4A 134 | CD4+ Th CD3G 135 | CD4+ Th TRAT1 136 | CD4+ Th CLEC2D 137 | CD4+ Th ARHGDIB 138 | CD4+ Th STK17A 139 | CD4+ Th FAM177A1 140 | CD4+ Th DUSP2 141 | CD4+ Th PTGER4 142 | CD4+ Th SH3BGRL3 143 | CD4+ Th PABPC1 144 | CD8+ T GZMK 145 | CD8+ T DUSP4 146 | CD8+ T CCL5 147 | CD8+ T GZMA 148 | CD8+ T CD8A 149 | CD8+ T CST7 150 | CD8+ T NKG7 151 | CD8+ T ITM2A 152 | CD8+ T CD8B 153 | CD8+ T LAG3 154 | CD8+ T CMC1 155 | CD8+ T LYST 156 | CD8+ T METRNL 157 | CD8+ T CTSW 158 | CD8+ T ZNF331 159 | CD8+ T CRTAM 160 | CD8+ T RNF19A 161 | CD8+ T APOBEC3G 162 | CD8+ T RUNX3 163 | CD8+ T SLA 164 | CD8+ T CORO1A 165 | CD8+ T JUND 166 | CD8+ T HCST 167 | CD8+ T CNOT6L 168 | CD8+ T BCL11B 169 | CD8+ T STK17B 170 | CD8+ T CLEC2B 171 | CD8+ T AKNA 172 | CD8+ T SYTL3 173 | CD8+ T IL2RG 174 | CD8+ T PMAIP1 175 | CD8+ T ICOS 176 | CD8+ T LCK 177 | CD8+ T GZMH 178 | CD8+ T PPP2R5C 179 | CD8+ T FNBP1 180 | CD8+ T ACAP1 181 | CD8+ T EVL 182 | CD8+ T LSP1 183 | CD8+ T CCND2 184 | CD8+ T PPP1R2 185 | CD8+ T ORAI1 186 | CD8+ T SH2D1A 187 | CD8+ T WIPF1 188 | CD8+ T RASGRP1 189 | CD8+ T TSPYL2 190 | CD8+ T ITGA4 191 | CD8+ T GGA2 192 | CD8+ T IFNG 193 | CD8+ T LCP1 194 | CD8+ T STK4 195 | CD8+ T HMGB2 196 | CD8+ T PTPN7 197 | CD8+ T CD96 198 | CD8+ T KPNA2 199 | Teff GNLY 200 | Teff FGFBP2 201 | Teff GZMB 202 | Teff TGFB1 203 | Teff PRF1 204 | Teff KLRD1 205 | Teff GZMM 206 | Teff FMNL1 207 | Teff FYN 208 | Teff ISG20 209 | Teff FLNA 210 | Teff S1PR4 211 | Teff RNF125 212 | Teff LYAR 213 | Teff KLRG1 214 | Teff ZEB2 215 | Teff SLC7A5 216 | Teff MYO1F 217 | Teff PIK3R1 218 | CD8-MAIT CXCR6 219 | CD8-MAIT NCR3 220 | CD8-MAIT IL4I1 221 | CD8-MAIT STAT4 222 | CD8-MAIT TTC39C 223 | CD8-MAIT GPR171 224 | CD8-MAIT MYBL1 225 | CD8-MAIT G3BP2 226 | CD8-MAIT PDE4D 227 | CD8-MAIT ODF2L 228 | CD8-MAIT GYG1 229 | CD8-MAIT PDCD4 230 | Treg BATF 231 | Treg TIGIT 232 | Treg TNFRSF18 233 | Treg TNFRSF4 234 | Treg IL32 235 | Treg CTLA4 236 | Treg CORO1B 237 | Treg TBC1D4 238 | Treg IL2RA 239 | Treg FOXP3 240 | Treg FAM129A 241 | Treg LAYN 242 | Treg UCP2 243 | Treg LAIR2 244 | Treg PIK3IP1 245 | Treg RTKN2 246 | Treg TSC22D3 247 | Treg CD7 248 | Treg ICAM3 249 | Treg UGP2 250 | Treg CTSC 251 | Treg BTG3 252 | NK2 SPON2 253 | NK2 KLRF1 254 | NK2 CD247 255 | NK2 CLIC3 256 | NK2 PLAC8 257 | NK2 PTGDS 258 | NK2 GNG2 259 | NK2 FCGR3A 260 | NK2 HOPX 261 | NK2 HSP90AA1 262 | NK2 ITGB2 263 | NK2 EFHD2 264 | NK2 DOK2 265 | NK2 S1PR5 266 | NK2 BIN2 267 | NK2 VPS37B 268 | NK2 SH2D2A 269 | NK2 IL2RB 270 | NK2 CCL4 271 | NK2 CDC42SE1 272 | NK2 B3GNT7 273 | NK2 CHST12 274 | NK2 DNAJB6 275 | NK2 MYOM2 276 | NK2 C1orf21 277 | NK2 HSH2D 278 | NK2 SLA2 279 | NK2 MATK 280 | NK2 XCL2 281 | NK2 CD53 282 | NK2 PYHIN1 283 | NK2 TNFRSF1B 284 | NK2 HAVCR2 285 | NK2 HSPA8 286 | NK2 ARPC2 287 | NK2 HSPE1 288 | NK2 HSPH1 289 | NK2 HSPA6 290 | NK2 CACYBP 291 | NK2 HSPD1 292 | NK2 HSPA1A 293 | NK2 DNAJB1 294 | NK1 KRT86 295 | NK1 KRT81 296 | NK1 KLRC1 297 | NK1 XCL1 298 | NK1 KLRC2 299 | NK1 TMIGD2 300 | NK1 ZNF683 301 | NK1 CD160 302 | NK1 PTPN22 303 | NK1 RPS17 304 | NK1 IGFBP2 305 | Tcm TSHZ2 306 | Tcm LEF1 307 | Tcm RPS6 308 | Tcm RPS15A 309 | Tcm RPS3 310 | Tcm PGAP1 311 | Tcm RPS27 312 | Tcm RPLP2 313 | Tcm AP3M2 314 | Tcm RPS10 315 | Tcm KLF2 316 | Tcm SATB1 317 | Tcm SLC2A3 318 | Tcm FOXP1 319 | TAM APOE 320 | TAM C1QB 321 | TAM C1QA 322 | TAM C1QC 323 | TAM CCL3 324 | TAM HLA-DPA1 325 | TAM HLA-DPB1 326 | TAM APOC1 327 | TAM HLA-DRB5 328 | TAM HLA-DRB1 329 | TAM CCL4L2 330 | TAM IL1B 331 | TAM MS4A7 332 | TAM MS4A6A 333 | TAM CD14 334 | TAM HLA-DMA 335 | TAM TNF 336 | TAM GPR183 337 | TAM FTL 338 | TAM CST3 339 | TAM CXCL3 340 | TAM PLAUR 341 | TAM TYROBP 342 | TAM LYZ 343 | TAM CD68 344 | TAM CTSB 345 | TAM OLR1 346 | TAM NPC2 347 | TAM AIF1 348 | TAM HLA-DQA2 349 | TAM HLA-DMB 350 | TAM FCGR2A 351 | TAM PSAP 352 | TAM LGMN 353 | TAM CFD 354 | TAM C5AR1 355 | TAM C3 356 | TAM GPNMB 357 | TAM CTSZ 358 | TAM CTSS 359 | TAM SDS 360 | TAM MAFB 361 | TAM C1orf162 362 | TAM PLEK 363 | TAM MS4A4A 364 | TAM SAT1 365 | TAM GRN 366 | TAM CPVL 367 | TAM LIPA 368 | TAM TREM2 369 | TAM MARCKS 370 | TAM MSR1 371 | TAM TNFAIP2 372 | TAM FGL2 373 | TAM CD163 374 | TAM PLAU 375 | TAM NRP2 376 | TAM IER3 377 | TAM CCL20 378 | TAM VSIG4 379 | Mono S100A9 380 | Mono S100A8 381 | Mono S100A12 382 | Mono EREG 383 | Mono SERPINB2 384 | Mono THBS1 385 | Mono VCAN 386 | Mono FCN1 387 | Mono CSTA 388 | Mono PPIF 389 | Mono NAMPT 390 | Mono TIMP1 391 | Mono AQP9 392 | Mono IL1RN 393 | Mono ATP2B1 394 | Mono LST1 395 | Mono MNDA 396 | Mono NLRP3 397 | Mono FPR1 398 | Mono THBD 399 | Mono TREM1 400 | Mono CD300E 401 | Mono GK 402 | Mono CCRL2 403 | Mono PTX3 404 | Mono ACSL1 405 | Mono SLC11A1 406 | Mono CEBPB 407 | Mono AP1S2 408 | Mono MXD1 409 | Mono CD93 410 | Mono CLEC4E 411 | Mono TNFAIP6 412 | Mono KYNU 413 | Mono GCA 414 | Mono COTL1 415 | Mono EHD1 416 | Mono OSM 417 | Mono THAP2 418 | Mono LIMS1 419 | Mono ARL5B 420 | Mono CSF3R 421 | Mono STXBP2 422 | Mono CHMP1B 423 | Mono GMFG 424 | Mono CYBA 425 | Mono RILPL2 426 | Mono WTAP 427 | Mono H3F3A 428 | Mono PTPRE 429 | Mono CFP 430 | Mono ETS2 431 | Mono PNPLA8 432 | Mono APOBEC3A 433 | Mono NINJ1 434 | Mono FTH1 435 | Mono MPEG1 436 | Mono BID 437 | Mono NR4A3 438 | Mono TSPO 439 | cDC2 CLEC10A 440 | cDC2 IL1R2 441 | cDC2 PKIB 442 | cDC2 ATP1B3 443 | cDC2 INHBA 444 | cDC2 CD1C 445 | cDC2 FCGR2B 446 | cDC2 IFI30 447 | cDC2 OGFRL1 448 | cDC2 AXL 449 | cDC2 STX11 450 | Mono-CD16 LILRB2 451 | Mono-CD16 WARS 452 | Mono-CD16 LYN 453 | Mono-CD16 LYPD2 454 | Mono-CD16 HES4 455 | Mono-CD16 LILRA5 456 | Mono-CD16 IFITM2 457 | Mono-CD16 PILRA 458 | Mono-CD16 HCK 459 | Mono-CD16 FAM49A 460 | Mono-CD16 RNF144B 461 | Mono-CD16 SLC43A2 462 | Mono-CD16 NAP1L1 463 | Mono-CD16 CMTM6 464 | Mono-CD16 TKT 465 | Mono-CD16 MYO1G 466 | Mono-CD16 SLC2A6 467 | Mono-CD16 ISG15 468 | Mono-CD16 ARPC1B 469 | Mono-CD16 CDKN1C 470 | Mono-CD16 PYCARD 471 | Mono-CD16 VASP 472 | Mono-CD16 NAAA 473 | Mono-CD16 CLEC12A 474 | Mono-CD16 IRAK3 475 | Mono-CD16 PTPN6 476 | Mono-CD16 ARPC3 477 | pDC IRF4 478 | pDC PLD4 479 | pDC IL3RA 480 | pDC TCF4 481 | pDC LILRA4 482 | pDC SERPINF1 483 | pDC TSPAN13 484 | pDC GNA15 485 | pDC SCT 486 | pDC CHAF1A 487 | pDC POLB 488 | pDC PTCRA 489 | pDC LILRB4 490 | pDC MYBL2 491 | pDC NEK8 492 | pDC TCL1A 493 | pDC SMPD3 494 | pDC VASH2 495 | pDC SEMA7A 496 | pDC ARID3A 497 | pDC IRF7 498 | pDC CIITA 499 | pDC INPP4A 500 | pDC SEL1L3 501 | pDC PPP1R14B 502 | pDC RAB11FIP1 503 | pDC ITM2C 504 | pDC SOX4 505 | pDC SH2B3 506 | pDC SLC20A1 507 | pDC SEC61B 508 | pDC NCF1 509 | pDC TRAF4 510 | pDC ETV3 511 | pDC C12orf45 512 | pDC GRASP 513 | pDC NR3C1 514 | pDC SLC15A4 515 | pDC C12orf75 516 | pDC CCDC50 517 | pDC FADS1 518 | pDC ZC3HAV1 519 | pDC N4BP2L1 520 | pDC MALT1 521 | pDC ANKRD11 522 | pDC DUSP5 523 | pDC FYTTD1 524 | pDC SPCS1 525 | pDC MARCKSL1 526 | pDC IRF2BP2 527 | pDC ATF5 528 | pDC PMEPA1 529 | pDC RANBP2 530 | pDC UGCG 531 | cDC3 IDO1 532 | cDC3 LAMP3 533 | cDC3 CCL19 534 | cDC3 NCCRP1 535 | cDC3 GPR157 536 | cDC3 DAPP1 537 | cDC3 CCL22 538 | cDC3 LY75 539 | cDC3 FSCN1 540 | cDC3 EBI3 541 | cDC3 TNFSF13B 542 | cDC3 GPR137B 543 | cDC3 ST8SIA4 544 | cDC3 NUB1 545 | cDC3 CXCL9 546 | cDC3 VOPP1 547 | cDC3 RAB8B 548 | cDC3 PPA1 549 | cDC3 CCDC88A 550 | cDC3 TXN 551 | cDC3 RAB9A 552 | cDC3 RALA 553 | cDC3 PTPN1 554 | cDC3 GSN 555 | cDC3 SYNGR2 556 | cDC3 ACTB 557 | cDC3 PSME2 558 | cDC3 SERPINB1 559 | cDC3 GRSF1 560 | cDC3 LGALS2 561 | cDC3 GABARAPL2 562 | cDC3 CD40 563 | cDC3 PFN1 564 | cDC1 DNASE1L3 565 | cDC1 C1orf54 566 | cDC1 CLEC9A 567 | cDC1 S100B 568 | cDC1 WDFY4 569 | cDC1 HLA-DOB 570 | cDC1 VMO1 571 | cDC1 HMGA1 572 | cDC1 TACSTD2 573 | cDC1 PLEKHO1 574 | cDC1 CPNE3 575 | cDC1 SNX3 576 | cDC1 H2AFY 577 | EC-cappillary PLVAP 578 | EC-cappillary ESM1 579 | EC-cappillary FLT1 580 | EC-cappillary SLC9A3R2 581 | EC-cappillary HSPG2 582 | EC-cappillary VWA1 583 | EC-cappillary INSR 584 | EC-cappillary SPARC 585 | EC-cappillary TIMP3 586 | EC-cappillary RBP7 587 | EC-cappillary RAMP2 588 | EC-cappillary VWF 589 | EC-cappillary RAMP3 590 | EC-cappillary SPARCL1 591 | EC-cappillary ENPP2 592 | EC-cappillary FCN3 593 | EC-cappillary PECAM1 594 | EC-cappillary A2M 595 | EC-cappillary EGFL7 596 | EC-cappillary COL4A1 597 | EC-cappillary ENG 598 | EC-cappillary IGFBP5 599 | EC-cappillary SPRY1 600 | EC-cappillary IFI27 601 | EC-cappillary EMCN 602 | EC-cappillary APP 603 | EC-cappillary EPAS1 604 | EC-cappillary PODXL 605 | EC-cappillary GNG11 606 | EC-cappillary NOTCH4 607 | EC-cappillary KDR 608 | EC-cappillary TMEM204 609 | EC-cappillary FAM167B 610 | EC-cappillary APOLD1 611 | EC-cappillary EDNRB 612 | EC-cappillary COL4A2 613 | EC-cappillary HYAL2 614 | EC-cappillary PRSS23 615 | EC-cappillary ESAM 616 | EC-cappillary CLEC14A 617 | EC-cappillary LDB2 618 | EC-cappillary TMEM88 619 | EC-cappillary FN1 620 | EC-cappillary PDGFD 621 | EC-cappillary TGFBR2 622 | EC-cappillary BTNL9 623 | EC-cappillary IGFBP7 624 | EC-cappillary CD34 625 | EC-cappillary FKBP1A 626 | EC-cappillary GJA1 627 | EC-cappillary SEC14L1 628 | EC-cappillary VAMP5 629 | EC-cappillary PTPRB 630 | EC-cappillary HTRA1 631 | EC-cappillary EFNB2 632 | EC-cappillary ECSCR 633 | EC-cappillary ARHGAP29 634 | EC-cappillary SLCO2A1 635 | EC-cappillary SPTBN1 636 | EC-cappillary CRIP2 637 | EC-Vein PLAT 638 | EC-Vein CTGF 639 | EC-Vein COL8A1 640 | EC-Vein COL3A1 641 | EC-Vein IL6ST 642 | EC-Vein FBLN2 643 | EC-Vein SELE 644 | EC-Vein PRCP 645 | EC-Vein TFF3 646 | EC-Vein CYP1B1 647 | EC-Vein CPE 648 | EC-Vein ADAM15 649 | EC-Vein TGM2 650 | EC-Vein ARL4A 651 | EC-Vein PPIC 652 | EC-Vein DUSP23 653 | EC-Vein SNCG 654 | EC-Vein CRIM1 655 | EC-Vein FAM107A 656 | EC-Vein NUAK1 657 | EC-Vein ANXA2 658 | EC-Vein JAM2 659 | EC-Vein BMPR2 660 | EC-Vein NR2F2 661 | EC-Vein PROCR 662 | EC-Vein TGFBR3 663 | EC-Vein ECE1 664 | EC-Vein NTS 665 | EC-Vein SULF2 666 | EC-Vein MALL 667 | EC-Vein PTMS 668 | EC-Vein LMCD1 669 | EC-Vein RSPO3 670 | EC-Vein SELP 671 | EC-Vein S100A6 672 | EC-Vein GPM6A 673 | EC-Vein TMTC1 674 | EC-Vein NCOA7 675 | EC-Vein C2CD4B 676 | EC-Vein IL33 677 | EC-Vein GUK1 678 | EC-Vein FLNB 679 | EC-Vein THSD7A 680 | EC-Vein STAB1 681 | EC-Vein ACTN1 682 | EC-Vein BST2 683 | EC-Vein CPXM2 684 | EC-Vein GNAQ 685 | EC-Vein PMP22 686 | EC-Vein IL1R1 687 | EC-Vein PDLIM1 688 | EC-Vein EFEMP1 689 | Artery GJA5 690 | Artery SRP14 691 | Artery FBLN5 692 | Artery SULF1 693 | Artery ACE 694 | Artery RND1 695 | Artery ARL15 696 | Artery SEMA3G 697 | Artery SOX17 698 | Artery GMNN 699 | Artery SLC45A4 700 | Artery IFITM1 701 | Artery SCGB3A1 702 | Artery SIPA1L2 703 | Artery VEGFC 704 | Artery FAM84A 705 | Artery MECOM 706 | Artery CTNNAL1 707 | Artery SOCS2 708 | Artery F2R 709 | Artery RGS3 710 | Artery GIMAP1 711 | Artery GFOD1 712 | Artery FILIP1 713 | Artery PDZD2 714 | Artery CTTNBP2NL 715 | Artery KIAA0355 716 | Artery PLLP 717 | Artery ID1 718 | Artery ADD1 719 | Artery SYNPO 720 | Artery ID3 721 | Artery NTN4 722 | Artery MAP4 723 | Artery CYB5R3 724 | Artery MYLIP 725 | Artery SWAP70 726 | Artery CDC42BPA 727 | Artery IGFBP3 728 | Artery SCARB1 729 | Artery JAG1 730 | Artery NAA10 731 | Artery PTPN12 732 | Artery ADAMTS1 733 | Artery RHOB 734 | Artery IFI6 735 | Artery LTBP4 736 | Artery CAV1 737 | Artery LIMA1 738 | Artery LAMB2 739 | Artery UBE2J1 740 | Artery ARGLU1 741 | Artery UTRN 742 | Artery POMP 743 | Artery TXNIP 744 | Artery DDIT4 745 | Artery ARRDC3 746 | SMC TAGLN 747 | SMC ACTA2 748 | SMC MYL9 749 | SMC TPM2 750 | SMC RGS5 751 | SMC SOD3 752 | SMC REN 753 | SMC CALD1 754 | SMC MYH11 755 | SMC COL18A1 756 | SMC MFGE8 757 | SMC BGN 758 | SMC PLN 759 | SMC FRZB 760 | SMC PPP1R14A 761 | SMC MYLK 762 | SMC MAP1B 763 | SMC PGF 764 | SMC PLAC9 765 | SMC RGS16 766 | SMC DSTN 767 | SMC TPPP3 768 | SMC MCAM 769 | SMC CRISPLD2 770 | SMC CSRP1 771 | SMC TINAGL1 772 | SMC COL6A2 773 | SMC PTP4A3 774 | SMC GJA4 775 | SMC COL1A2 776 | SMC NOTCH3 777 | SMC ID4 778 | SMC PALLD 779 | SMC ACTG2 780 | SMC CSRP2 781 | SMC GADD45B 782 | SMC COL1A1 783 | SMC DKK3 784 | SMC WFDC1 785 | SMC SLIT3 786 | SMC SSTR2 787 | SMC PDGFRB 788 | SMC FILIP1L 789 | SMC CNN1 790 | SMC COX4I2 791 | SMC TBX2 792 | SMC ISYNA1 793 | SMC HIGD1B 794 | SMC ADAMTS4 795 | SMC RASD1 796 | SMC LTBP1 797 | SMC 4-Sep 798 | SMC NGF 799 | SMC CRIP1 800 | SMC TGFB1I1 801 | SMC FOS 802 | SMC JUNB 803 | SMC PTK2 804 | SMC 7-Sep 805 | SMC SDC2 806 | peri CD36 807 | peri CYGB 808 | peri FABP4 809 | peri PLXDC1 810 | peri KCNJ8 811 | peri CCDC102B 812 | peri MYO1B 813 | peri SERPING1 814 | peri PRKG1 815 | peri CAMK2N1 816 | peri NDRG2 817 | peri S1PR3 818 | peri GJC1 819 | peri PCOLCE 820 | peri SERPINI1 821 | peri NES 822 | peri EDNRA 823 | peri UBA2 824 | peri NRGN 825 | peri ANO1 826 | peri ARHGEF17 827 | peri PTEN 828 | Fib LUM 829 | Fib DCN 830 | Fib POSTN 831 | Fib ASPN 832 | Fib CFH 833 | Fib C1R 834 | Fib GGT5 835 | Fib C1S 836 | Fib MMP11 837 | Fib COL6A3 838 | Fib C7 839 | Fib CLEC11A 840 | Fib CCDC80 841 | Fib COL5A2 842 | Fib THBS2 843 | Fib EMILIN1 844 | Fib PRELP 845 | Fib COL12A1 846 | Fib GPC3 847 | Fib AEBP1 848 | Fib PTN 849 | Fib IFIT3 850 | Fib SERPINE1 851 | Fib GBP2 852 | Fib STAT1 853 | Epi CRYAB 854 | Epi NNMT 855 | Epi CD24 856 | Epi CLU 857 | Epi CYB5A 858 | Epi SPP1 859 | Epi CXCL14 860 | Epi TMEM176A 861 | Epi FABP7 862 | Epi KRT18 863 | Epi CCL2 864 | Epi ANGPTL4 865 | Epi TMEM176B 866 | Epi KRT8 867 | Epi ANXA4 868 | Epi PDZK1IP1 869 | Epi NDUFA4L2 870 | Epi FXYD2 871 | Epi RARRES2 872 | Epi ATP1B1 873 | Epi BNIP3 874 | Epi CYR61 875 | Epi GSTA1 876 | Epi CCND1 877 | Epi MGST1 878 | Epi SLC3A1 879 | Epi TNFRSF12A 880 | Epi EGLN3 881 | Epi CLDN4 882 | Epi ENO1 883 | Epi GPX3 884 | Epi NAT8 885 | Epi VEGFA 886 | Epi IMPA2 887 | Epi UGT2B7 888 | Epi CNDP2 889 | Epi CCDC146 890 | Epi SERPINA1 891 | Epi NDRG1 892 | Epi ALDH1A1 893 | Epi DEFB1 894 | Epi MIF 895 | Epi S100A1 896 | Epi TPI1 897 | Epi SLC17A3 898 | Epi MT1X 899 | Epi ELF3 900 | Epi SPINT2 901 | Epi NUPR1 902 | Epi PEBP1 903 | Epi PDZK1 904 | Epi TNFSF10 905 | Epi RRAD 906 | Epi BBOX1 907 | Epi S100A13 908 | Epi S100A10 909 | Epi CMBL 910 | Epi TCEA3 911 | Epi OCIAD2 912 | Epi PFKP 913 | -------------------------------------------------------------------------------- /Figure 2/Source Data /arm_level_cnv_TJRCC.txt: -------------------------------------------------------------------------------- 1 | "A41_T" "C115_T" "C24_T" "C99_T" "D36_T" "D65_T" "F20_T" "F44_T" "F69_T" "G30_T" "G80_T" "H11_T" "H17_T" "H35_T" "H46_T" "H4_T" "H63_T" "H78_T" "H85_T" "J106_T" "J111_T" "J32_T" "J38_T" "L103_T" "L112_T" "L113_T" "L28_T" "L3_T" "L50_T" "L52_T" "L60_T" "L61_T" "L64_T" "L68_T" "L6_T" "L75_T" "L90_T" "L95_T" "L97_T" "L9_T" "M72_T" "N39_T" "O31_T" "P1_T" "P21_T" "P88_T" "Q93_T" "R114_T" "R25_T" "R29_T" "R51_T" "R82_T" "S15_T" "S2_T" "S86_T" "S92_T" "T45_T" "W101_T" "W105_T" "W108_T" "W116_T" "W14_T" "W18_T" "W33_T" "W37_T" "W59_T" "W5_T" "W62_T" "W66_T" "W73_T" "X117_T" "X13_T" "X22_T" "X34_T" "X49_T" "X94_T" "Y10_T" "Y12_T" "Y19_T" "Y27_T" "Y48_T" "Y57_T" "Y7_T" "Y89_T" "Y8_T" "Z16_T" "Z23_T" "Z26_T" "Z43_T" "Z58_T" "Z76_T" "Z81_T" "Z84_T" "Z87_T" "Z96_T" 2 | "1p" 0 0 -0.249 0 0 -0.174 0 0 0 -0.309 0 0 0 0 0 0 0 0 0 0 0 -0.292 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.169 0 0 0 0 0 -0.192 0 0 0 0 0 -0.358 0 0 0 0 0 0 0 0 0 0 0 -0.233 0 -0.653 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.568 -0.357 3 | "1q" 0 0 0 0 0 0 0 0 0 -0.309 0 0 0 0 0 0 0 0 0 0 0 -0.292 0 0 0 0 0 0 0 0 0 0 0 0.175 0 0 0 0 0 0 0 0.631 0 0.194 0.489 0 0 0 0 0.563 0 0.188 0 0 0 0 -0.358 0 0 0 0 0 0 0 0 0 0 0.401 -0.233 0 -0.78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.513 0 0 0 0 0 0 -0.183 0.413 4 | "2p" 0 0 0 0 0 0 0 0 0 0.128 0 0 0 0 0.275 0 0 0 0 0 0 0.111 0 0 0 0 0 0 0 0 0 0 0 0.32 0 0 0.424 0 0 0 0 0 0 0 0.144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.495 0 0.446 0 0.417 0 0 0.506 0 0 0 0 0.404 5 | "2q" 0 0 0 0 0 0 0 0 0 0.128 0 0 0 0 0.275 0 0 0 0.405 0 0 0.111 0 0 0 0 0 0 0 0 0 0 0 0.32 0 0 0.424 0 0 0 0 0 0 0 0.144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.495 0 0.446 0 0 0 0 0.506 0 0 0 0 0 6 | "3p" -0.372 -0.421 -0.611 -0.348 -0.611 -0.494 -0.475 -0.384 -0.506 -0.5 -0.542 -0.771 -0.658 -0.338 -0.337 -0.588 0 -0.455 -0.485 -0.37 -0.586 -0.537 -0.515 -0.27 0 -0.513 -0.569 -0.539 -0.703 -0.539 -0.133 -0.19 -0.593 -0.436 -0.453 -0.339 -0.425 -0.4 -0.611 -0.618 -0.671 -0.312 -0.511 -0.636 -0.468 -0.473 0 -0.722 -0.58 -0.293 -0.447 -0.307 -0.346 -0.41 -0.553 -0.747 -0.7 -0.301 -0.315 -0.282 -0.521 -0.52 -0.403 -0.466 -0.511 -0.464 -0.299 -0.411 -0.472 -0.463 -0.585 -0.339 -0.432 -0.308 -0.845 -0.452 -0.061 -0.62 -0.482 -0.583 -0.693 -0.425 -0.502 -0.402 -0.598 0 -0.086 0 -0.496 0.093 -0.403 -0.475 -0.163 -0.566 -0.258 7 | "3q" 0 -0.421 -0.611 0 0 0 0 0 0.452 0.113 0 -0.771 0 0 0.297 0 0 0 0 0 0 0 0 0 0 -0.513 0 -0.539 0 -0.539 0 0 -0.593 0.479 0 -0.339 -0.425 -0.4 -0.611 0 -0.671 -0.312 0 0 -0.468 0 0 0 0 -0.076 0 0 0 0 0 -0.747 0 0 0 0 0 0 -0.403 0 0 -0.464 0.105 0 -0.472 -0.463 0.173 0 0 -0.308 -0.845 0 0.506 0 0 -0.583 0 -0.425 0 -0.285 -0.598 0 0.264 0 -0.496 0.531 -0.403 0 0 -0.148 -0.258 8 | "4p" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.251 0 0 0 0 0 0 0 0 0 0 0 -0.201 0 0 0 0 0 0 0 0.341 0 0 0 0 0 0 -0.588 0 -0.486 0 0 0 0 0 0 0 0.265 0 0 0 0 0 0 0 0 -0.401 -0.233 0 -0.296 0 0 0 0 0 -0.639 0 0 0 0 0 0 -0.164 0 0 0 0 0 -0.456 0 0 0 0 -0.229 9 | "4q" 0 0 0 0 0 0 0 0 0 0 0 0 -0.344 0 0 -0.552 0 0 0 0 0 -0.251 0 0 0 0 0 0 0 0 0 0 0 -0.056 0 0 0 0 0 0 0 0.341 0 0 0 0 0 0 0 0 -0.187 0 -0.152 0 0 0 0 0 -0.3 0 0 0 0 0 0 0 0.367 -0.401 -0.233 0 -0.296 0 0 0 0 0 -0.639 0 0 0 0 0 0 -0.164 0 0 0 0 0 -0.456 0 0 0 0 -0.229 10 | "5p" 0 0.636 0 0 0 0 0 0 0 0.15 0.525 0.791 0 0 0.292 0 0 0 0 0.329 0 0.114 0 0 0 0.626 0.57 0 0 0 0 0 0 0.508 0.464 0 0 0 0.634 0 0.669 0.676 0 0.644 0.812 0 0 0 0.365 0 0.526 0 0 0 0 0.786 0 0 0 0.279 0 0 0 0.47 0.453 0.48 0 0.439 0 0 -0.289 0 0 0.401 0 0.436 0.526 0 0 0 0 0.483 0 0 1.19 0 0.195 0 0 0.529 0 0.493 0 0 0 11 | "5q" 0 0.636 0 0 0 0 0.519 0 0 0.842 0.525 0.791 0 0 0.292 0 0 0 0 0.329 0 0.114 0 0 0.438 0.626 0.57 0.405 0 0 0 0 0 0.307 0.464 0 0 0 0.634 0 0.669 0.676 0 0.644 0.812 0 0 0.566 0.365 0.29 0.526 0 0.51 0.409 0 0.786 0 0.257 0 0.279 0 0.478 0 0.47 0.453 0.48 0 0.439 0.502 0 -0.289 0.488 0 0.401 0.79 0.436 0.526 0 0 0.555 0.651 0.483 0.451 0.466 1.19 0 -0.198 0 0 0.529 0 0.493 0 0 0 12 | "6p" 0 -0.105 0 0 0 0 -0.479 0 0 -0.691 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.425 0 -0.123 0 0 0 0 0 -0.322 0 0 -0.155 0 0 0 0 0 -0.464 0 0.099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.264 0 -0.579 0 0 -0.306 0 0 -0.32 0 0 0 0 0 0 -0.161 0 0 0 0 0 -0.461 0 0 0 0 0 13 | "6q" 0 -0.105 -0.566 0 0 0 -0.479 0 0 -0.691 0 0 -0.366 0 0 0 0 0 0 0 0 -0.565 0 0 0 -0.514 0 0 -0.595 0 0 0 0 -0.425 -0.393 -0.123 0 0 0 0 0 -0.322 -0.557 0 -0.155 0 0 0 0 0 -0.464 0 -0.102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.264 0 -0.579 0 0 -0.306 0 0 -0.32 0 0 0 0 0 0 -0.161 0 0 -0.345 0 0 -0.461 0 0 0 0 -0.275 14 | "7p" 0.424 0.103 0 0 0.618 0 -0.265 0 0 0.108 0.532 0 0 0 0.293 0.581 0 0 0 0 0 0 0.517 0 0 0 0 0 0 0 0.123 0 0.6 0.549 0 0 0.452 0 0 0.71 0 0 0 0 0.168 0 0 0 0 0 0.301 0.318 0 0 0 0.737 -0.339 0.285 0 0.457 0 0 0 0 0.518 0 0 0 0 0.469 0.255 0 0 0.756 0 0 0 0 0 0 0 0 0 0 0.578 0 0.322 0 0.494 1.504 0 0 0 0 1.585 15 | "7q" 0.424 0.103 0 0 0.618 0 -0.265 0 0 0.108 0.532 0 0 0 0.293 0.581 0 0 0 0 0 0 0.517 0 0 0 0 0 0 0 0.123 0 0.6 0.549 0 0 0.452 0 0 0.71 -0.659 0 0 0 0.168 0 0 0 0 0 0.301 0.318 0 0 0.124 0.737 -0.339 0.285 0 0.457 0 0 0 0 0.518 0 0 0 0 0.469 0.255 0 0 0.756 0 0 0 0 0 0 0 0 0 0 0.578 0 0.322 0 0.494 1.504 0 0 0 0 0.987 16 | "8p" 0 0 -0.454 0 0 -0.458 0 0 0 -0.28 0 -0.692 0 0.1 -0.513 0 0 -0.392 0 0 0 0 0 0 0 0 0 0 -0.693 0 0 0 0 -0.527 -0.452 0 0 0 0 0 0 0.337 0 -0.573 -0.122 0 -0.45 0 -0.311 0.07 -0.171 -0.108 0 0 -0.143 0 0 0 0.372 -0.183 0 0 0 0 0 0 0 0 0 0 0.248 0 0 -0.601 0 0 0 0.031 0 0 0 0 0 0 0 0 -0.346 -0.3 0 0.097 -0.423 0 0 0 -0.29 17 | "8q" 0 0 0 0 0 0 0 0 0 -0.28 0 0 0 0.434 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.452 0 0 0 0 0.637 0 0.337 0 0 -0.122 0 -0.45 0 -0.311 0.321 -0.171 0 0 0 0 0 0 0 0.685 0 0 0 0 0 0 0 0 0 0 0 1.019 0 0 0 0 0 0 0.267 0 0 0 0 0 0 0 0 0 -0.3 0 0.302 -0.423 0 0 0 -0.29 18 | "9p" 0 0 0 0 0 0 -0.225 0 0 -0.286 0 0 0 -0.404 -0.322 0 0 0 0 0 0 0 0 0 0 -0.51 0 0 0 0 0 0 0 0 0 -0.148 0 0 -0.621 0 0 -0.291 0 0 -0.517 0 0 0 0 0 0 -0.355 0 0 -0.543 0 -0.326 0 -0.319 -0.155 0 0 -0.401 0 0 0 -0.351 -0.415 -0.482 0 -0.78 0 0 -0.294 0 0 -0.308 -0.625 0 0 0 0 0 -0.23 0 0 -0.278 0 0 -0.463 0 0 0 -0.38 -0.36 19 | "9q" 0 0 -0.225 0 0 0 -0.225 0 0 -0.286 0 0 0 -0.404 -0.322 0 0 0 0 0 0 0 0 0 0 -0.51 0 0 0 0 0 0 0 0 0 -0.148 0 0 -0.621 0 0 -0.291 0 0 -0.517 0 0 0 0 0 0 -0.355 0 0 -0.543 0 -0.326 0 -0.319 -0.155 0 0 -0.401 0 0 0 -0.351 -0.415 -0.482 0 -0.78 0 0 -0.294 0 0 -0.308 -0.625 0 0 0 0 0 -0.23 0 0 -0.278 0 0 -0.463 0 0 0 -0.38 -0.36 20 | "10p" 0 -0.232 0 0 0 0 0 0 0 -0.285 0 0 0 0 0.24 0 0 0 0 0 0 -0.243 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.144 0 0 0 0 0 0 0 0.252 0.191 0 0 0 0 0 0 0 0 0 0 0 -0.315 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 0 -0.245 0 0 0 0 0 0 -0.168 0 0 0.302 0 0 -0.486 -0.408 0 0 0 0.491 21 | "10q" 0 -0.232 0 0 0 0 -0.469 0 0 -0.285 0 -0.78 0 0 0.24 0 0 0 0 0 0 -0.243 0 0 0 0 -0.316 0 -0.575 0 0 0 0 0 0 -0.144 0 0 0 0 0 0 -0.272 0 0.191 0 0 0 0 0 0 0 0 0 0 0 -0.315 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 0 -0.245 0 0 0 0 0 0 -0.168 0 0 0.302 0 -0.386 -0.486 -0.408 0 0 0 -0.059 22 | "11p" 0 0 0 0 0 0 0 0 0 -0.3 0 0 0 0 0.19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.287 0 0 0 0 0 0 0 0 0 0 0 0 -0.19 0 0 0.116 0 0 0 0 0 0 0 0.226 23 | "11q" 0 0 0 0 0 0 0 0 0 -0.3 0 0 0 0 0.19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.218 0 0 0 0 0 0 0 0 0 0 -0.287 0 0 0 0 0 0 0 0 0 0 0 0 -0.19 0 0 0.116 0 0 0 0 0 0 0 0.226 24 | "12p" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.284 0.471 0 0 0.376 0 0 0 0.329 0.612 0 0.333 0 0 0 0 0 0.284 0 0 0 0.546 0 0 0.318 0.228 0.228 0 0 0 0 0 0 0.33 0 0 0 0.269 0 0 0.361 0 0 0.156 0 0 0 0 0 0 0.405 0.573 0 0.303 0 0 0.708 0 0 0 0 0.257 25 | "12q" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.284 0.471 0 0 0.376 0 0 0 0.329 0.609 0 0.214 0 0 0 0 0 0.284 0 0 0 0.546 0 0 0.318 0.228 0.228 0 0 0 0 0 0 0.33 0 0 0 0.269 0 0 0.361 0 0 0.156 0 0 0 0 0 0 0.405 0.573 0 0.303 0 0 0.708 0 0 0 0 0.257 26 | "13q" 0 0 0 0 0 0 -0.196 0 0 -0.239 0 0 0 0 0 0 0 0 0 0 0 0 0.525 0 0 -0.49 0 0 0 0 0 0 0 -0.392 0 0 0 0 0 0 0 0 0 0 -0.185 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.117 0 0 0 0 0 0 0 0 -0.37 -0.498 0 -0.568 0 0 -0.276 0 0 0 0 0 0 0 0 0 0 0 0 -0.335 0 0 -0.448 0 0 0 0 0.12 27 | "14q" 0 -0.187 -0.269 0 0 0 0 0 0 -0.253 0 0 0 -0.381 0 0 0 0 0 0 0 -0.256 0 0 0 -0.505 0 0 0 0 0 0 0 -0.415 0 -0.303 0 0 0 0 0 -0.318 0 -0.462 -0.521 0 0 0 -0.585 -0.298 -0.527 -0.354 0 0 -0.537 0 0 0 -0.131 0 0 0 0 0 -0.527 0 0 -0.395 0 0 0.137 0 -0.49 0.41 0 -0.439 -0.645 -0.644 0 0 0 0 0 -0.15 0 0 -0.425 0 0 -0.456 0 0 0 -0.574 0.245 28 | "15q" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.519 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.261 0 0 0 0 0 -0.299 0 0 0 0 0 -0.36 0 0 0 0 0 0 0 0 0 0 -0.418 -0.469 0 -0.776 0 0 0 0 0 -0.359 0 0 0 0 0 0 -0.205 0 0 -0.447 0 0 0 0 0 0 0 0.415 29 | "16p" 0 0 0 -0.1 -0.144 0 0 0 0 0 0 0 0 -0.129 0.202 0 0 0 0 0 -0.109 0.208 0 0 -0.13 0.522 0 0 0 0 0 0 0 -0.103 0 0 0 0 0 0 0 0.3 0 0.354 0 0 0 0 0 0 0.136 -0.16 0 0 0 0 0 0.143 -0.419 -0.104 0 0 0 -0.1 0 0 0.204 0 0 0 -0.42 0 0 0.327 -0.145 0 0 0 0 0 0 -0.104 0.384 0 -0.1 0 -0.176 0 0 0.346 0 0 0 0.715 0.252 30 | "16q" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.202 0 0 0 0 0 0 0.208 0 0 0 0.522 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0 0.354 0 0 0 0 0 0 0.136 0 0 0 0 0 0 0.143 -0.419 0 0 0 0 0 -0.328 0 0 0 0 0 -0.42 0 0 0.327 0 0 0 0 0 0 0 0 0.384 0 -0.1 0 -0.176 0 0 0 0 0 0 0.59 0.252 31 | "17p" 0 0 0 0 0 0 -0.27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.171 0 0.107 0 0 0 0 0 0 -0.203 0 0 0 0 0 0 0.571 0 -0.111 0 0 0 0 0 0 -0.133 0 0 0 0 0 0 0 0 0 -0.218 0 0 0 0 0 0 0 -0.286 0 0 0 0 0 0 0 0 0 -0.21 0 0 0 0 0 0 0 0 32 | "17q" 0 0 0 0 0 0 -0.27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.171 0 0.107 0 0 0 0 0 0 0 0 0 0 0 0 0 0.571 0 -0.111 0 0 0 0 0 0 -0.133 0 0 0 0 0 0 0 0 0 -0.218 0 0 0 0 0 0 0 -0.286 0 0 0 0 0 0 0 0 0 0.52 0 0 0 0 0 0 0.568 0 33 | "18p" 0 0 0 0 0 0 -0.176 0 0 -0.256 0 0 0 0 0 0 0 0 0 0 0 -0.256 0 0 0 0.552 0 0 0 0.565 0 0 0 -0.404 0 0 0 0 0 0 0 0 0 0 0.187 0 0 0 -0.284 0 -0.185 -0.13 0 0 0 0 0 0 -0.143 0 0 0 0 0 0 0 0 -0.31 -0.213 0 0.128 0 0 -0.281 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.455 0 0 0 0 -0.347 34 | "18q" 0 0 0 0 0 0 -0.176 0 0 -0.256 0 0 0 0 0 0 0 0 0 0 0 -0.256 0 0 0 0.552 0 0 0 0.565 0 0 0 -0.404 0 0 0 0 0 0 0 0 0 0 0.187 0 0 0 -0.284 0 -0.185 -0.13 0 0 0 0 0 0 -0.143 0 0 0 0 0 0 0 0 -0.31 -0.213 0 0.128 0 0 -0.281 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.455 0 0 0 0 -0.347 35 | "19p" -0.161 0 -0.122 0 -0.18 0 0 -0.171 0 0 0 -0.139 -0.171 -0.193 -0.195 0 0.108 0 0 0 0 -0.117 -0.105 0 -0.142 0 -0.142 -0.146 -0.116 0 0 0 -0.102 0 0 0 0 0 0 -0.111 0 0 -0.132 0 0 0 0 -0.109 -0.111 0 0 -0.204 0 -0.106 0 0 0 0 0 -0.124 -0.141 0 -0.114 -0.134 -0.151 -0.133 -0.112 0 0 0 0 0 -0.15 0 -0.213 0 0 0 0 0 0 -0.125 0 0 0.377 -0.158 0 0 0 0 0 0 -0.143 -0.54 0 36 | "19q" -0.161 0 -0.122 0 -0.17 0 0 -0.171 0 0 0 -0.139 -0.171 -0.193 -0.195 0 0.108 0 0 0 0 -0.117 -0.105 0 -0.142 0 -0.142 -0.146 -0.116 0 0 0 -0.102 0 0 0 0 0 0 -0.111 0 0 -0.132 0 0 0 0 -0.109 -0.111 0 0 -0.204 0 -0.106 0 0 0 0 0 0 -0.141 0 -0.114 -0.134 -0.151 -0.133 -0.112 0 0 0 0 0 -0.15 0 -0.213 0 0 0 0 0 0 -0.125 0 0 0.377 -0.158 0 0 0 0 0 0 -0.143 0 0 37 | "20p" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.022 0 0 0 0 0 0 0 0 0 0 0.521 0 0 0 0 0 0 0 0 0.438 0 0 0 0 0 0 0.908 0 0 0 0 0 0 0 0 0.751 0 0.108 0 0 0 0 0 0.598 0 0 0 0 0 0 0 0 0.439 0 0 0 0 0 0.441 0 0 0 0.666 0 0 0 0 0 0 1.058 0 0.126 0 0 0.504 0 0 0 0 1.008 38 | "20q" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.271 0 0 0 0 0 0 0 0 0 0 0.521 0 0 0 0 0 0 0 0 0.438 0 0 0 0 0 0 0.908 0 0 0 0 0 0 0 0 0.531 0 0.108 0 0 0 0 0 0.318 0 0 0 0 0 0 0 0 0.439 0 0 0 0 0 0.269 -0.122 0 0 0.666 0 0 0 0 0 0 1.058 0 0 0 0 0.504 0 0 0 0 1.008 39 | "21p" 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.33 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 -0.493 0 -0.122 0.392 0 0 0 0 0 0 0 -0.294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.251 0 0 0 0 0 0 0 -0.325 0 0 -0.461 0 0 0 0 0 -0.188 0 0 0 0 0 0 -0.105 0.59 0 -0.184 0 0 -0.483 0 0 0 0 0 40 | "21q" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 -0.122 0.392 0 0 0 0 0 0 0 0.135 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.413 0 0 -0.188 0 0 0 0 0 0 -0.105 0.59 0 -0.184 0 0 0 0 0 0 0 0 41 | "22p" -0.127 0 -0.107 0 -0.134 0 0 -0.139 0 0 0 -0.151 -0.125 -0.165 -0.236 -0.128 0 0 0 0 0 0 -0.104 0 0 0 -0.104 -0.109 -0.125 0 0 0 0 -0.204 0 0 0 0 0 0 0 0 0 0 -0.32 0 -0.101 -0.126 0 0 0.291 -0.177 0 -0.119 0 -0.106 0 -0.114 0 -0.341 -0.142 0 0 0 -0.158 0 -0.103 0 0 0 0 0 -0.122 0 0 0 -0.263 0 0 0 0 0 0 0 -0.156 0 0 0 0 0 0 0 -0.152 0 -0.416 42 | "22q" -0.127 0 -0.107 0 -0.134 0 0 -0.139 0 0 0 -0.151 -0.125 -0.165 -0.236 -0.128 0 0 0 0 0 0 -0.104 0 0 0 -0.104 -0.109 -0.125 0 0 0 0 -0.204 0 0.115 0 0 0 0 0 0 0 0 -0.32 0 0 -0.126 0 0 0.291 -0.177 0 -0.119 0 -0.106 0 -0.114 0 -0.341 -0.142 0 0 0 -0.158 0 -0.103 0 0 0 0 0 -0.122 0 0 0 -0.263 0 0 0 0 0 0 0 -0.156 0 0 0 0 0.103 0 0 -0.152 -0.545 -0.416 43 | -------------------------------------------------------------------------------- /Figure 2/Source Data /sample_info.csv: -------------------------------------------------------------------------------- 1 | ,sex,age,T,N,M,stage,grade,class,VHL,PBRM1,BAP1,SETD2,KDM5C,X3p,X5q,X7p,X9p,X12p,X14q 2 | A41_T,female,40-60,T1,N0,M0,stage I,2,1,WT,mut,WT,WT,WT,loss,WT,gain,WT,WT,WT 3 | C115_T,male,40-60,T1,N0,M0,stage I,2,2,mut,mut,WT,WT,WT,loss,gain,gain,WT,WT,loss 4 | C24_T,female,>60,T4,N0,M0,stage IV,3,2,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,loss 5 | C99_T,female,40-60,T2,N0,M0,stage II,2,2,WT,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 6 | D36_T,male,40-60,T1,N0,M0,stage I,3,2,mut,mut,WT,WT,WT,loss,WT,gain,WT,WT,WT 7 | D65_T,male,>60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,WT 8 | F20_T,female,>60,T3,N0,M0,stage III,3,3,WT,WT,WT,WT,WT,loss,gain,WT,loss,WT,WT 9 | F44_T,female,40-60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,WT 10 | F69_T,female,40-60,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 11 | G30_T,male,40-60,T3,N0,M0,stage III,2,2,mut,mut,WT,WT,WT,loss,gain,gain,loss,WT,loss 12 | G80_T,male,40-60,T1,N0,M0,stage I,2,2,mut,mut,WT,WT,WT,loss,gain,gain,WT,WT,WT 13 | H11_T,male,>60,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 14 | H17_T,male,>60,T1,N0,M0,stage I,2,2,mut,mut,mut,WT,WT,loss,WT,WT,WT,WT,WT 15 | H35_T,male,>60,T1,N0,M0,stage I,4,3,WT,mut,WT,WT,WT,loss,WT,WT,loss,WT,loss 16 | H46_T,male,>60,T3,N0,M0,stage III,2,4,mut,mut,WT,WT,WT,loss,gain,gain,loss,gain,WT 17 | H4_T,female,40-60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,WT,gain,WT,WT,WT 18 | H63_T,male,>60,T1,N0,M0,stage I,2,1,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT 19 | H78_T,female,40-60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,mut,loss,WT,WT,WT,WT,WT 20 | H85_T,female,>60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,WT 21 | H91_T,female,40-60,T1,N0,M0,stage I,1,1,WT,WT,WT,WT,WT,NA,NA,NA,NA,NA,NA 22 | J106_T,male,40-60,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 23 | J111_T,female,40-60,T1,N0,M0,stage I,2,2,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,WT 24 | J32_T,male,>60,T1,N0,M0,stage I,3,2,mut,WT,WT,mut,WT,loss,gain,WT,WT,WT,loss 25 | J38_T,male,<40,T1,N0,M0,stage I,2,1,WT,WT,WT,WT,WT,loss,WT,gain,WT,WT,WT 26 | L103_T,female,40-60,T1,N0,M0,stage I,2,2,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 27 | L112_T,female,<40,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,WT,gain,WT,WT,WT,WT 28 | L113_T,male,>60,T1,N0,M0,stage I,4,3,WT,WT,WT,WT,WT,loss,gain,WT,loss,WT,loss 29 | L28_T,male,40-60,T2,N0,M0,stage II,2,3,mut,mut,WT,WT,WT,loss,gain,WT,WT,WT,WT 30 | L3_T,male,>60,T1,N0,M0,stage I,2,2,WT,WT,WT,mut,WT,loss,gain,WT,WT,WT,WT 31 | L50_T,female,>60,T1,N0,M0,stage I,3,2,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,WT 32 | L52_T,male,<40,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 33 | L60_T,male,>60,T3,N0,M0,stage III,2,3,mut,WT,WT,WT,WT,loss,WT,gain,WT,WT,WT 34 | L61_T,male,40-60,T1,N0,M0,stage I,1,4,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 35 | L64_T,male,>60,T1,N0,M0,stage I,2,3,WT,WT,WT,WT,WT,loss,WT,gain,WT,WT,WT 36 | L68_T,female,40-60,T3,N0,M0,stage III,3,4,WT,WT,mut,WT,WT,loss,gain,gain,WT,gain,loss 37 | L6_T,male,<40,T1,N0,M0,stage I,3,3,mut,WT,WT,WT,WT,loss,gain,WT,WT,gain,WT 38 | L75_T,male,40-60,T1,N0,M0,stage I,2,4,WT,WT,mut,WT,WT,loss,WT,WT,loss,WT,loss 39 | L90_T,male,40-60,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,gain,WT,WT,WT 40 | L95_T,male,<40,T1,N0,M0,stage I,1,3,mut,WT,WT,WT,WT,loss,WT,WT,WT,gain,WT 41 | L97_T,male,40-60,T3,N0,M0,stage III,2,3,mut,mut,WT,WT,WT,loss,gain,WT,loss,WT,WT 42 | L9_T,male,40-60,T1,N0,M0,stage I,3,1,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT 43 | M104_T,male,40-60,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,NA,NA,NA,NA,NA,NA 44 | M72_T,male,<40,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 45 | N39_T,male,>60,T2,N0,M0,stage II,2,3,mut,mut,WT,mut,mut,loss,gain,WT,loss,gain,loss 46 | P1_T,male,>60,T1,N0,M0,stage I,2,2,WT,mut,WT,WT,WT,loss,gain,WT,WT,WT,loss 47 | P21_T,male,40-60,T1,N0,M0,stage I,3,3,mut,WT,mut,WT,WT,loss,gain,gain,loss,gain,loss 48 | P88_T,female,>60,T1,N0,M0,stage I,2,2,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 49 | Q93_T,male,40-60,T1,N0,M0,stage I,2,3,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT 50 | R114_T,male,40-60,T3,N0,M0,stage III,3,2,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 51 | R25_T,male,40-60,T1,N0,M0,stage I,3,3,mut,WT,mut,WT,WT,loss,gain,WT,WT,WT,loss 52 | R29_T,male,40-60,T2,N1,M1,stage IV,3,3,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,loss 53 | R51_T,male,>60,T3,N0,M1,stage IV,3,3,mut,WT,WT,WT,WT,loss,gain,gain,WT,gain,loss 54 | R82_T,female,>60,T3,N0,M0,stage III,4,3,WT,WT,WT,WT,WT,loss,WT,gain,loss,WT,loss 55 | S15_T,female,<40,T1,N0,M0,stage I,2,2,mut,WT,WT,WT,mut,loss,gain,WT,loss,gain,loss 56 | S2_T,male,>60,T1,N0,M0,stage I,3,3,mut,WT,WT,mut,WT,loss,gain,WT,WT,WT,WT 57 | S86_T,male,40-60,T1,N0,M0,stage I,2,4,mut,mut,WT,mut,WT,loss,WT,gain,loss,gain,loss 58 | S92_T,male,>60,T2,N0,M0,stage II,2,2,mut,WT,WT,WT,WT,loss,gain,gain,WT,WT,WT 59 | T42_T,female,>60,T1,N0,M0,stage I,2,3,WT,mut,WT,mut,WT,NA,NA,NA,NA,NA,NA 60 | W101_T,female,40-60,T3,N0,M0,stage III,3,4,WT,WT,mut,mut,WT,loss,gain,gain,WT,gain,WT 61 | W105_T,male,40-60,T1,N0,M0,stage I,3,3,mut,WT,mut,WT,WT,loss,WT,WT,loss,gain,loss 62 | W108_T,female,>60,T1,N0,M0,stage I,2,3,mut,WT,WT,mut,WT,loss,gain,gain,loss,gain,WT 63 | W116_T,female,>60,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 64 | W14_T,male,40-60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,gain,WT,WT,WT,WT 65 | W18_T,female,40-60,T1,N0,M0,stage I,3,1,mut,WT,WT,WT,WT,loss,WT,WT,loss,WT,WT 66 | W33_T,female,40-60,T1,N0,M0,stage I,2,2,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 67 | W37_T,male,>60,T2,N0,M0,stage II,3,3,mut,WT,WT,WT,WT,loss,gain,gain,WT,WT,loss 68 | W59_T,male,40-60,T1,N0,M0,stage I,1,2,mut,mut,WT,WT,WT,loss,gain,WT,WT,WT,WT 69 | W5_T,male,40-60,T3,N0,M0,stage III,3,4,mut,WT,WT,WT,WT,loss,WT,WT,loss,gain,WT 70 | W66_T,female,<40,T1,N0,M0,stage I,3,4,mut,WT,WT,WT,WT,loss,gain,WT,loss,WT,WT 71 | W73_T,male,40-60,T1,N0,M0,stage I,3,3,mut,WT,WT,WT,WT,loss,WT,gain,WT,WT,WT 72 | X117_T,male,40-60,T1,N0,M0,stage I,4,4,mut,WT,mut,mut,WT,loss,WT,gain,loss,gain,WT 73 | X13_T,female,>60,T3,N0,M0,stage III,2,3,mut,WT,mut,WT,WT,loss,WT,WT,loss,WT,loss 74 | X22_T,female,>60,T1,N0,M0,stage I,3,1,mut,mut,WT,WT,WT,loss,WT,WT,WT,WT,loss 75 | X34_T,female,40-60,T4,N0,M0,stage IV,3,4,mut,mut,WT,WT,WT,loss,gain,gain,loss,gain,WT 76 | X49_T,male,40-60,T2,N0,M0,stage II,3,2,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 77 | X94_T,female,40-60,T1,N0,M0,stage I,2,3,mut,mut,WT,WT,WT,loss,gain,WT,WT,WT,loss 78 | X98_T,male,40-60,T1,N0,M0,stage I,2,1,WT,WT,WT,WT,WT,NA,NA,NA,NA,NA,NA 79 | Y102_T,female,>60,T1,N0,M0,stage I,2,4,WT,WT,WT,WT,WT,NA,NA,NA,NA,NA,NA 80 | Y10_T,male,>60,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,loss,gain,WT,WT,gain,WT 81 | Y12_T,female,40-60,T1,N0,M0,stage I,2,3,mut,WT,WT,mut,WT,loss,gain,WT,WT,WT,WT 82 | Y19_T,female,40-60,T1,N0,M0,stage I,2,2,WT,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 83 | Y27_T,male,>60,T1,N0,M0,stage I,3,2,WT,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 84 | Y48_T,female,>60,T1,N0,M0,stage I,3,3,mut,WT,WT,WT,mut,loss,gain,WT,WT,WT,WT 85 | Y57_T,male,>60,T1,N0,M0,stage I,1,1,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 86 | Y7_T,female,>60,T1,N0,M0,stage I,2,2,mut,WT,WT,WT,WT,loss,gain,WT,WT,WT,WT 87 | Y89_T,male,40-60,T1,N0,M0,stage I,2,4,mut,mut,WT,WT,WT,loss,gain,WT,loss,gain,loss 88 | Y8_T,male,>60,T1,N0,M0,stage I,3,4,mut,WT,WT,WT,WT,loss,gain,gain,WT,gain,WT 89 | Z16_T,female,>60,T2,N0,M1,stage IV,4,3,mut,mut,WT,WT,WT,loss,WT,gain,WT,WT,WT 90 | Z23_T,male,40-60,T2,N0,M0,stage II,4,3,mut,mut,mut,WT,WT,loss,WT,gain,loss,gain,loss 91 | Z26_T,male,40-60,T1,N0,M0,stage I,2,2,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT,WT 92 | Z43_T,male,40-60,T1,N0,M0,stage I,2,1,mut,mut,WT,WT,WT,loss,WT,gain,WT,WT,WT 93 | Z58_T,male,>60,T1,N0,M0,stage I,3,3,mut,mut,WT,mut,WT,WT,gain,gain,loss,gain,loss 94 | Z76_T,male,>60,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 95 | Z81_T,male,40-60,T1,N0,M0,stage I,2,2,mut,mut,WT,mut,WT,loss,gain,WT,WT,WT,WT 96 | Z84_T,male,<40,T1,N0,M0,stage I,2,1,mut,WT,WT,WT,WT,loss,WT,WT,WT,WT,WT 97 | Z87_T,female,>60,T1,N0,M0,stage I,2,3,mut,WT,WT,WT,WT,loss,WT,WT,loss,WT,loss 98 | Z96_T,male,40-60,T1,N0,M0,stage I,3,4,mut,mut,WT,mut,WT,loss,WT,gain,loss,gain,WT 99 | W62_T,male,40-60,T3,N0,M0,stage III,4,4,WT,WT,WT,WT,WT,loss,gain,WT,loss,WT,loss 100 | O31_T,female,40-60,T1,N0,M0,stage I,2,2,WT,WT,WT,WT,WT,loss,WT,WT,WT,gain,WT 101 | T45_T,male,>60,T1,N0,M0,stage I,3,2,WT,WT,WT,WT,mut,loss,WT,WT,loss,WT,WT 102 | -------------------------------------------------------------------------------- /Figure 2/Source Data /specific_gene_sig.txt: -------------------------------------------------------------------------------- 1 | Fib pericyte SMC IGF+ Mac FOLR2+ Mac GPNMB+ Mac EC Tex Treg Vein Artery 2 | THBS2 COL25A1 ELN IGF1 LILRB5 HS3ST2 PTPRB CD200R1 FOXP3 ACKR1 GJA5 3 | DCN CD36 MYH11 F13A1 MRC1 GPNMB FLT1 LAG3 TNFRSF18 RAB3C FBLN5 4 | PDGFRA CPA6 NTRK3 GPR34 FOLR2 PLA2G7 ANO2 TNFRSF9 CTLA4 ADAMTS18 SEMA3G 5 | POSTN IL1RAPL1 FGF13 HTRA4 VWF CXCL13 CCR8 SELP IL33 6 | PCDH7 ANO3 COL14A1 COLEC12 ST6GALNAC3 TOX FBLN2 TACR1 7 | ITGBL1 GRIK3 PECAM1 TIGIT BMX 8 | LAMA2 RAPGEF4 9 | SLC24A3 RASGRF2 10 | PDGFD 11 | EFNB2 12 | ADGRL4 13 | ESM1 14 | RASGRP3 15 | -------------------------------------------------------------------------------- /Figure 2/Source Data /tmp_org.csv: -------------------------------------------------------------------------------- 1 | ,Symbol,Immune subtype 2 | 1,HTR2B,IM1 3 | 2,CD300LG,IM1 4 | 3,COL14A1,IM1 5 | 4,C7,IM1 6 | 5,DKK2,IM1 7 | 6,COL16A1,IM1 8 | 7,MEST,IM1 9 | 8,AVPR1A,IM1 10 | 9,DLL1,IM1 11 | 10,CORO2B,IM1 12 | 11,TIMP3,IM1 13 | 12,SNED1,IM1 14 | 13,CHRM3,IM1 15 | 14,SEMA3D,IM1 16 | 15,SEMA3G,IM1 17 | 16,C14orf132,IM1 18 | 17,RERGL,IM1 19 | 18,CXCL12,IM1 20 | 19,MMP2,IM1 21 | 20,LTBP4,IM1 22 | 21,LTBP2,IM1 23 | 22,FLRT2,IM1 24 | 23,PTGER3,IM1 25 | 24,TMEM88,IM1 26 | 25,RAMP3,IM1 27 | 26,COL12A1,IM1 28 | 27,MRC1,IM1 29 | 28,ITGA11,IM1 30 | 29,IGF2,IM1 31 | 30,ITGBL1,IM1 32 | 31,CDKN1C,IM1 33 | 32,PPP1R14A,IM1 34 | 33,TACR1,IM1 35 | 34,VIPR1,IM1 36 | 35,TMEM119,IM1 37 | 36,TAGLN,IM1 38 | 37,IL33,IM1 39 | 38,NYNRIN,IM1 40 | 39,RGMA,IM1 41 | 40,INMT,IM1 42 | 41,GLT8D2,IM1 43 | 42,F2RL3,IM1 44 | 43,CREB3L1,IM1 45 | 44,ISLR,IM1 46 | 45,EGR1,IM1 47 | 46,EGR3,IM1 48 | 47,CLEC3B,IM1 49 | 48,CRHBP,IM1 50 | 49,POSTN,IM1 51 | 50,EMCN,IM1 52 | 51,EMP1,IM1 53 | 52,SOCS2,IM1 54 | 53,SOCS3,IM1 55 | 54,NTRK2,IM1 56 | 55,NTRK3,IM1 57 | 56,NKD1,IM1 58 | 57,SCUBE3,IM1 59 | 58,SCUBE1,IM1 60 | 59,DNASE1L3,IM1 61 | 60,PTGIS,IM1 62 | 61,JAM2,IM1 63 | 62,MRGPRF,IM1 64 | 63,HMCN2,IM1 65 | 64,OPCML,IM1 66 | 65,SFRP1,IM1 67 | 66,CAVIN2,IM1 68 | 67,JDP2,IM1 69 | 68,ADGRL3,IM1 70 | 69,CCDC80,IM1 71 | 70,CSRNP1,IM1 72 | 71,MYOCD,IM1 73 | 72,PTPRB,IM1 74 | 73,AOC3,IM1 75 | 74,APOD,IM1 76 | 75,SDK2,IM1 77 | 76,FREM1,IM1 78 | 77,SELE,IM1 79 | 78,ART4,IM1 80 | 79,SGCD,IM1 81 | 80,GRASP,IM1 82 | 81,ASPN,IM1 83 | 82,ATF3,IM1 84 | 83,PCDH9,IM1 85 | 84,PCDH7,IM1 86 | 85,DACT3,IM1 87 | 86,DACT1,IM1 88 | 87,FCN3,IM1 89 | 88,JPH4,IM1 90 | 89,CLSTN2,IM1 91 | 90,STEAP4,IM1 92 | 91,NPY1R,IM1 93 | 92,CNTN1,IM1 94 | 93,FGF7,IM1 95 | 94,FNDC1,IM1 96 | 95,JUNB,IM1 97 | 96,JUND,IM1 98 | 97,SPEG,IM1 99 | 98,SPTB,IM1 100 | 99,SLCO2A1,IM1 101 | 100,ABCA8,IM1 102 | 101,SRPX,IM1 103 | 102,FABP4,IM1 104 | 103,HSPA12B,IM1 105 | 104,FMO3,IM1 106 | 105,FMOD,IM1 107 | 106,PLCXD3,IM1 108 | 107,CA4,IM1 109 | 108,FOSB,IM1 110 | 109,DCN,IM1 111 | 110,DES,IM1 112 | 111,DPT,IM1 113 | 112,ELN,IM1 114 | 113,ADRA2B,IM1 115 | 114,ADRA2A,IM1 116 | 115,RGS16,IM1 117 | 116,FOS,IM1 118 | 117,APOLD1,IM1 119 | 118,ID1,IM1 120 | 119,CASKIN2,IM1 121 | 120,NHSL2,IM1 122 | 121,EFEMP1,IM1 123 | 122,LTF,IM1 124 | 123,LUM,IM1 125 | 124,MGP,IM1 126 | 125,DOC2B,IM1 127 | 126,BMP5,IM1 128 | 127,TAL1,IM1 129 | 128,LMOD1,IM1 130 | 129,COL3A1,IM1 131 | 130,OGN,IM1 132 | 131,TCIM,IM1 133 | 132,COL5A1,IM1 134 | 133,TCF21,IM1 135 | 134,EFHD1,IM1 136 | 135,KLF4,IM1 137 | 136,KLF2,IM1 138 | 137,GALNT16,IM1 139 | 138,NR4A2,IM1 140 | 139,NR4A1,IM1 141 | 140,NR4A3,IM1 142 | 141,ADAMTS16,IM1 143 | 142,MMP19,IM1 144 | 143,SLIT3,IM1 145 | 144,SLIT2,IM1 146 | 145,TEK,IM1 147 | 146,ADAMTSL1,IM1 148 | 147,ADAMTSL2,IM1 149 | 148,GAS1,IM1 150 | 149,GAS6,IM1 151 | 150,TNC,IM1 152 | 151,THBD,IM1 153 | 152,COL1A1,IM1 154 | 153,COL1A2,IM1 155 | 154,PDE2A,IM1 156 | 155,LIMS2,IM1 157 | 156,TLE2,IM1 158 | 157,PLXNA4,IM1 159 | 158,VGLL3,IM1 160 | 159,ATRNL1,IM1 161 | 160,GGT5,IM1 162 | 161,TNXB,IM1 163 | 162,GJA5,IM1 164 | 163,PEG3,IM1 165 | 164,C2orf40,IM1 166 | 165,MPPED2,IM1 167 | 166,ZNF423,IM1 168 | 167,PI16,IM1 169 | 168,THBS2,IM1 170 | 169,APLNR,IM1 171 | 170,AGTR1,IM1 172 | 171,SYNPO2,IM1 173 | 172,PKP1,IM1 174 | 173,CES1,IM1 175 | 174,PLAT,IM1 176 | 175,SUSD5,IM1 177 | 176,PODN,IM1 178 | 177,HSPB6,IM1 179 | 178,HSPB7,IM1 180 | 179,IGSF10,IM1 181 | 180,LDB3,IM1 182 | 181,LDLR,IM1 183 | 182,FBLN1,IM1 184 | 183,FBLN2,IM1 185 | 184,FBLN5,IM1 186 | 185,KANK3,IM1 187 | 186,IGFBP5,IM1 188 | 187,IGFBP2,IM1 189 | 188,LGI2,IM1 190 | 189,FAM110D,IM1 191 | 190,MAMDC2,IM1 192 | 191,CCDC3,IM1 193 | 192,CNN1,IM1 194 | 193,CNR1,IM1 195 | 194,ATP1A2,IM1 196 | 195,LIPE,IM1 197 | 196,DPEP1,IM1 198 | 197,LAMA2,IM1 199 | 198,FAM107A,IM1 200 | 199,PRELP,IM1 201 | 200,PKNOX2,IM1 202 | 201,SLC9A3R2,IM1 203 | 202,ACTC1,IM1 204 | 203,EMILIN1,IM1 205 | 204,LMO3,IM1 206 | 205,CTGF,IM1 207 | 206,C11orf96,IM1 208 | 207,CCL21,IM1 209 | 208,FXYD6,IM1 210 | 209,PRDM16,IM1 211 | 210,ANGPTL1,IM1 212 | 211,SVEP1,IM1 213 | 212,RNASE1,IM1 214 | 213,EPHB4,IM1 215 | 214,PDGFRA,IM1 216 | 215,SMOC2,IM1 217 | 216,HIC1,IM1 218 | 217,CYR61,IM1 219 | 218,ANGPT1,IM1 220 | 219,SHISA3,IM1 221 | 220,CPXM1,IM1 222 | 221,ADCY1,IM1 223 | 222,MFAP4,IM1 224 | 223,ITGA7,IM1 225 | 224,ADH1B,IM1 226 | 225,NFASC,IM1 227 | 226,TMTC1,IM1 228 | 227,SLC10A2,IM2 229 | 228,CLVS2,IM2 230 | 229,KL,IM2 231 | 230,AVPR1B,IM2 232 | 231,NCR3LG1,IM2 233 | 232,SLC5A12,IM2 234 | 233,SLC5A10,IM2 235 | 234,MGAM,IM2 236 | 235,SLC13A1,IM2 237 | 236,FBXL16,IM2 238 | 237,PANK1,IM2 239 | 238,TINAG,IM2 240 | 239,TRHDE,IM2 241 | 240,SERPINA6,IM2 242 | 241,MIOX,IM2 243 | 242,CHRM3,IM2 244 | 243,GAREM1,IM2 245 | 244,WDR72,IM2 246 | 245,LARGE2,IM2 247 | 246,CDHR2,IM2 248 | 247,ZDHHC11B,IM2 249 | 248,VIL1,IM2 250 | 249,KLHDC7A,IM2 251 | 250,TRPM3,IM2 252 | 251,PTGER3,IM2 253 | 252,SMTNL2,IM2 254 | 253,TMEM72,IM2 255 | 254,TMEM27,IM2 256 | 255,ADSSL1,IM2 257 | 256,A1CF,IM2 258 | 257,TMEM174,IM2 259 | 258,TMEM125,IM2 260 | 259,TMEM38B,IM2 261 | 260,HSD11B2,IM2 262 | 261,RGS5,IM2 263 | 262,STK32B,IM2 264 | 263,TRIM15,IM2 265 | 264,TRIM10,IM2 266 | 265,SLC17A1,IM2 267 | 266,SLC17A3,IM2 268 | 267,SLC17A4,IM2 269 | 268,ERICH5,IM2 270 | 269,SLC16A9,IM2 271 | 270,CREB3L3,IM2 272 | 271,EDNRB,IM2 273 | 272,NAT8,IM2 274 | 273,CYP2J2,IM2 275 | 274,HHLA2,IM2 276 | 275,ACSM2A,IM2 277 | 276,ACSM2B,IM2 278 | 277,KCNJ3,IM2 279 | 278,PKHD1,IM2 280 | 279,PAIP2B,IM2 281 | 280,EMCN,IM2 282 | 281,EMX2,IM2 283 | 282,SLC47A1,IM2 284 | 283,ENTPD2,IM2 285 | 284,ENAM,IM2 286 | 285,ACE2,IM2 287 | 286,ADH6,IM2 288 | 287,PTH1R,IM2 289 | 288,PTH2R,IM2 290 | 289,LRRC19,IM2 291 | 290,ESPN,IM2 292 | 291,NPR3,IM2 293 | 292,RAB3IP,IM2 294 | 293,KCNJ15,IM2 295 | 294,ALPL,IM2 296 | 295,CYP4A22,IM2 297 | 296,CYP4A11,IM2 298 | 297,COL23A1,IM2 299 | 298,FRAS1,IM2 300 | 299,CABP1,IM2 301 | 300,AOC1,IM2 302 | 301,COL25A1,IM2 303 | 302,SCGN,IM2 304 | 303,CERKL,IM2 305 | 304,APOM,IM2 306 | 305,FREM2,IM2 307 | 306,AQP7,IM2 308 | 307,AQP1,IM2 309 | 308,MYRFL,IM2 310 | 309,SLCO4C1,IM2 311 | 310,ASPG,IM2 312 | 311,ASPA,IM2 313 | 312,EHHADH,IM2 314 | 313,FBP1,IM2 315 | 314,FRMD3,IM2 316 | 315,GRIK3,IM2 317 | 316,SLC3A1,IM2 318 | 317,SLC51A,IM2 319 | 318,SLC5A8,IM2 320 | 319,SLC5A1,IM2 321 | 320,CSDC2,IM2 322 | 321,GIPC2,IM2 323 | 322,SLC6A3,IM2 324 | 323,SLC22A12,IM2 325 | 324,SLC22A11,IM2 326 | 325,SLC22A24,IM2 327 | 326,DIRAS2,IM2 328 | 327,FMO1,IM2 329 | 328,AMN,IM2 330 | 329,ABCG2,IM2 331 | 330,SLC2A2,IM2 332 | 331,STUM,IM2 333 | 332,LGALS2,IM2 334 | 333,CA4,IM2 335 | 334,CGN,IM2 336 | 335,CLEC18C,IM2 337 | 336,CLEC18B,IM2 338 | 337,CLEC18A,IM2 339 | 338,DDC,IM2 340 | 339,BDNF,IM2 341 | 340,SLC16A12,IM2 342 | 341,ANKS4B,IM2 343 | 342,SYT9,IM2 344 | 343,GHR,IM2 345 | 344,SLC39A5,IM2 346 | 345,FTCD,IM2 347 | 346,BHMT,IM2 348 | 347,G6PC,IM2 349 | 348,FUT6,IM2 350 | 349,KHK,IM2 351 | 350,SPON1,IM2 352 | 351,DOC2A,IM2 353 | 352,SMIM24,IM2 354 | 353,GABRB3,IM2 355 | 354,HMGCS2,IM2 356 | 355,PLG,IM2 357 | 356,SCN4B,IM2 358 | 357,BBOX1,IM2 359 | 358,GATM,IM2 360 | 359,GDF6,IM2 361 | 360,PDGFD,IM2 362 | 361,LIN7A,IM2 363 | 362,TLL1,IM2 364 | 363,ANXA13,IM2 365 | 364,PCK1,IM2 366 | 365,GJB1,IM2 367 | 366,AGMAT,IM2 368 | 367,TPPP,IM2 369 | 368,ZNF711,IM2 370 | 369,ACADL,IM2 371 | 370,ZNF385B,IM2 372 | 371,BTNL9,IM2 373 | 372,PHYHIPL,IM2 374 | 373,IQSEC3,IM2 375 | 374,CD36,IM2 376 | 375,AGTR1,IM2 377 | 376,PKLR,IM2 378 | 377,CES3,IM2 379 | 378,FAM196B,IM2 380 | 379,SLC22A6,IM2 381 | 380,SLC22A2,IM2 382 | 381,GSTA1,IM2 383 | 382,GLYATL1,IM2 384 | 383,C1orf210,IM2 385 | 384,ALDOB,IM2 386 | 385,CIB4,IM2 387 | 386,SLC27A2,IM2 388 | 387,AGXT2,IM2 389 | 388,SLC26A9,IM2 390 | 389,PDZK1,IM2 391 | 390,SLC6A19,IM2 392 | 391,SLC6A18,IM2 393 | 392,SLC6A13,IM2 394 | 393,SLC6A12,IM2 395 | 394,CMBL,IM2 396 | 395,SLC25A48,IM2 397 | 396,ATP2B2,IM2 398 | 397,SULT1C4,IM2 399 | 398,CLDN10,IM2 400 | 399,HAO2,IM2 401 | 400,CLCN5,IM2 402 | 401,CUBN,IM2 403 | 402,PEG10,IM2 404 | 403,LRP2,IM2 405 | 404,CYS1,IM2 406 | 405,ALDH6A1,IM2 407 | 406,UPB1,IM2 408 | 407,MASP1,IM2 409 | 408,FCAMR,IM2 410 | 409,ALDH1L1,IM2 411 | 410,ADCY5,IM2 412 | 411,GPAT3,IM2 413 | 412,SLC28A1,IM2 414 | 413,HRH2,IM2 415 | 414,MAP7,IM2 416 | 415,MAPT,IM2 417 | 416,IL2RG,IM3 418 | 417,C3,IM3 419 | 418,CP,IM3 420 | 419,HLA-DOA,IM3 421 | 420,HLA-DOB,IM3 422 | 421,SIRPG,IM3 423 | 422,GPR65,IM3 424 | 423,FCRL3,IM3 425 | 424,HYDIN,IM3 426 | 425,IKZF3,IM3 427 | 426,HLA-G,IM3 428 | 427,CXCL13,IM3 429 | 428,CXCL14,IM3 430 | 429,CXCL10,IM3 431 | 430,CXCL11,IM3 432 | 431,ICOS,IM3 433 | 432,CALHM6,IM3 434 | 433,APOBEC3G,IM3 435 | 434,TNFSF14,IM3 436 | 435,MTTP,IM3 437 | 436,LILRB4,IM3 438 | 437,TEX11,IM3 439 | 438,CYP8B1,IM3 440 | 439,GLYAT,IM3 441 | 440,IRF4,IM3 442 | 441,CYP4F3,IM3 443 | 442,NCF1,IM3 444 | 443,BIRC3,IM3 445 | 444,CD200R1,IM3 446 | 445,PTPN22,IM3 447 | 446,TNFRSF9,IM3 448 | 447,EVI2B,IM3 449 | 448,SLFN12L,IM3 450 | 449,C10orf99,IM3 451 | 450,FCGR3A,IM3 452 | 451,TSPAN1,IM3 453 | 452,PLA2G2D,IM3 454 | 453,MGST1,IM3 455 | 454,MYH14,IM3 456 | 455,SPAG17,IM3 457 | 456,NOD2,IM3 458 | 457,DEFB1,IM3 459 | 458,THEMIS,IM3 460 | 459,CRTAM,IM3 461 | 460,SAA1,IM3 462 | 461,SAA2,IM3 463 | 462,IL20RB,IM3 464 | 463,PTPN7,IM3 465 | 464,SP140,IM3 466 | 465,APOE,IM3 467 | 466,APOB,IM3 468 | 467,DNAJB13,IM3 469 | 468,STRIP2,IM3 470 | 469,STAT1,IM3 471 | 470,SLCO4C1,IM3 472 | 471,ANKRD22,IM3 473 | 472,SIT1,IM3 474 | 473,MCOLN2,IM3 475 | 474,NUGGC,IM3 476 | 475,STK33,IM3 477 | 476,SOD2,IM3 478 | 477,ABCC6,IM3 479 | 478,C1S,IM3 480 | 479,CD2,IM3 481 | 480,CFI,IM3 482 | 481,XCR1,IM3 483 | 482,CLEC12A,IM3 484 | 483,GPR174,IM3 485 | 484,AKAP5,IM3 486 | 485,OLR1,IM3 487 | 486,GDA,IM3 488 | 487,HNF4A,IM3 489 | 488,KMO,IM3 490 | 489,HLA-DQA2,IM3 491 | 490,LBP,IM3 492 | 491,FYB1,IM3 493 | 492,HLA-DPA1,IM3 494 | 493,CXCL9,IM3 495 | 494,CHI3L2,IM3 496 | 495,FASLG,IM3 497 | 496,PYHIN1,IM3 498 | 497,PDCD1,IM3 499 | 498,TOX,IM3 500 | 499,UBD,IM3 501 | 500,GBP1,IM3 502 | 501,GBP5,IM3 503 | 502,PIK3AP1,IM3 504 | 503,VCAM1,IM3 505 | 504,TLR8,IM3 506 | 505,IL22RA1,IM3 507 | 506,KSR2,IM3 508 | 507,PAK3,IM3 509 | 508,IL17RB,IM3 510 | 509,TMEM178B,IM3 511 | 510,EOMES,IM3 512 | 511,GLDC,IM3 513 | 512,APBB1IP,IM3 514 | 513,CCL5,IM3 515 | 514,LACTB2,IM3 516 | 515,SLAMF7,IM3 517 | 516,SLAMF6,IM3 518 | 517,LRRN4,IM3 519 | 518,CD27,IM3 520 | 519,CD3G,IM3 521 | 520,CD3E,IM3 522 | 521,CD3D,IM3 523 | 522,CD38,IM3 524 | 523,CCR5,IM3 525 | 524,CD74,IM3 526 | 525,CD70,IM3 527 | 526,CD96,IM3 528 | 527,CD8B,IM3 529 | 528,CD8A,IM3 530 | 529,CDH6,IM3 531 | 530,GPX3,IM3 532 | 531,SLC23A1,IM3 533 | 532,APOL1,IM3 534 | 533,C1orf186,IM3 535 | 534,APOC1,IM3 536 | 535,GSTA2,IM3 537 | 536,CYP2C9,IM3 538 | 537,LAG3,IM3 539 | 538,LAX1,IM3 540 | 539,PTER,IM3 541 | 540,GZMA,IM3 542 | 541,GZMK,IM3 543 | 542,CFAP47,IM3 544 | 543,SIGLEC8,IM3 545 | 544,RARRES3,IM3 546 | 545,ALOX5,IM3 547 | 546,FAM135B,IM3 548 | 547,CTSW,IM3 549 | 548,CTSE,IM3 550 | 549,HKDC1,IM3 551 | 550,ANGPTL3,IM3 552 | 551,EPHA7,IM3 553 | 552,EPHA6,IM3 554 | 553,CD244,IM3 555 | 554,S100A1,IM3 556 | 555,ALDH8A1,IM3 557 | 556,UGT2A3,IM3 558 | 557,SIRPB1,IM3 559 | 558,MAL2,IM3 560 | 559,TIGIT,IM3 561 | 560,CHIT1,IM3 562 | 561,MAOA,IM3 563 | 562,COL13A1,IM4 564 | 563,IL2RA,IM4 565 | 564,HTRA3,IM4 566 | 565,HTRA1,IM4 567 | 566,MOCOS,IM4 568 | 567,DIO2,IM4 569 | 568,IL1R2,IM4 570 | 569,F2,IM4 571 | 570,F3,IM4 572 | 571,PLEKHG4B,IM4 573 | 572,IGFN1,IM4 574 | 573,SLC7A5,IM4 575 | 574,TRIB3,IM4 576 | 575,SPOCD1,IM4 577 | 576,SPOCK1,IM4 578 | 577,TIMP1,IM4 579 | 578,RAB3B,IM4 580 | 579,RAB42,IM4 581 | 580,RAB6B,IM4 582 | 581,P4HA3,IM4 583 | 582,PSAT1,IM4 584 | 583,DNER,IM4 585 | 584,CDCP1,IM4 586 | 585,SRPX2,IM4 587 | 586,SLC12A8,IM4 588 | 587,SERPINE1,IM4 589 | 588,SERPINF1,IM4 590 | 589,SERPINH1,IM4 591 | 590,SERPINA5,IM4 592 | 591,ITPKA,IM4 593 | 592,SEMA3C,IM4 594 | 593,SEMA4B,IM4 595 | 594,CHST1,IM4 596 | 595,WDR86,IM4 597 | 596,MAP3K15,IM4 598 | 597,AMIGO2,IM4 599 | 598,MLPH,IM4 600 | 599,APCDD1L,IM4 601 | 600,CTHRC1,IM4 602 | 601,MMP9,IM4 603 | 602,LTBP1,IM4 604 | 603,TRNP1,IM4 605 | 604,IBSP,IM4 606 | 605,LOXL1,IM4 607 | 606,LOXL2,IM4 608 | 607,COL10A1,IM4 609 | 608,ADAMTS2,IM4 610 | 609,KLHDC8A,IM4 611 | 610,KIF26B,IM4 612 | 611,MRC2,IM4 613 | 612,CACNB3,IM4 614 | 613,KIF18B,IM4 615 | 614,DDIT4,IM4 616 | 615,L1CAM,IM4 617 | 616,MT1X,IM4 618 | 617,MT2A,IM4 619 | 618,OLFML3,IM4 620 | 619,TENM3,IM4 621 | 620,MXRA8,IM4 622 | 621,MXRA5,IM4 623 | 622,SPTBN2,IM4 624 | 623,QSOX1,IM4 625 | 624,TNNT1,IM4 626 | 625,SSC5D,IM4 627 | 626,NT5DC2,IM4 628 | 627,SLC18A3,IM4 629 | 628,ARL4C,IM4 630 | 629,TRIM46,IM4 631 | 630,RIN1,IM4 632 | 631,ECM1,IM4 633 | 632,SLC17A9,IM4 634 | 633,WISP2,IM4 635 | 634,IRS2,IM4 636 | 635,NAV1,IM4 637 | 636,NAV3,IM4 638 | 637,ROS1,IM4 639 | 638,AHNAK2,IM4 640 | 639,NEFL,IM4 641 | 640,KCND1,IM4 642 | 641,KCNQ3,IM4 643 | 642,KCNS3,IM4 644 | 643,CARD14,IM4 645 | 644,CARD11,IM4 646 | 645,SPINK13,IM4 647 | 646,MYBL2,IM4 648 | 647,ELL2,IM4 649 | 648,RFLNA,IM4 650 | 649,CEBPB,IM4 651 | 650,RTL1,IM4 652 | 651,FAM20A,IM4 653 | 652,ACAN,IM4 654 | 653,RAB27B,IM4 655 | 654,ADD2,IM4 656 | 655,C10orf99,IM4 657 | 656,LRRC15,IM4 658 | 657,LRRC8E,IM4 659 | 658,PTHLH,IM4 660 | 659,BACE2,IM4 661 | 660,RYR2,IM4 662 | 661,LYPD1,IM4 663 | 662,JAK3,IM4 664 | 663,DCBLD2,IM4 665 | 664,C6orf141,IM4 666 | 665,HMGA2,IM4 667 | 666,COL22A1,IM4 668 | 667,CCDC91,IM4 669 | 668,MUC12,IM4 670 | 669,ADGRG2,IM4 671 | 670,SAA1,IM4 672 | 671,SAA2,IM4 673 | 672,WNT5A,IM4 674 | 673,IGDCC4,IM4 675 | 674,IL20RB,IM4 676 | 675,AMZ1,IM4 677 | 676,COL24A1,IM4 678 | 677,TFPI2,IM4 679 | 678,KDELR3,IM4 680 | 679,ANLN,IM4 681 | 680,PTPRN,IM4 682 | 681,PTPRH,IM4 683 | 682,IMPDH1,IM4 684 | 683,SCG2,IM4 685 | 684,AQP9,IM4 686 | 685,AC068580.4,IM4 687 | 686,ADAMDEC1,IM4 688 | 687,NPTX2,IM4 689 | 688,PCBP3,IM4 690 | 689,PLPPR4,IM4 691 | 690,TFAP2A,IM4 692 | 691,GREM1,IM4 693 | 692,PYCR1,IM4 694 | 693,JPH2,IM4 695 | 694,SOX11,IM4 696 | 695,STEAP3,IM4 697 | 696,BASP1,IM4 698 | 697,DPYSL3,IM4 699 | 698,BTBD11,IM4 700 | 699,SLPI,IM4 701 | 700,GRIK4,IM4 702 | 701,SLC4A3,IM4 703 | 702,PLAUR,IM4 704 | 703,FHL2,IM4 705 | 704,FHL3,IM4 706 | 705,BMPR1B,IM4 707 | 706,SLC2A1,IM4 708 | 707,C1S,IM4 709 | 708,C1R,IM4 710 | 709,LGALS1,IM4 711 | 710,TBX15,IM4 712 | 711,PLIN3,IM4 713 | 712,G0S2,IM4 714 | 713,SLC35F3,IM4 715 | 714,SLITRK2,IM4 716 | 715,EPHA10,IM4 717 | 716,GPR173,IM4 718 | 717,FAP,IM4 719 | 718,TGFBI,IM4 720 | 719,NFKBIZ,IM4 721 | 720,FGB,IM4 722 | 721,FGA,IM4 723 | 722,FGG,IM4 724 | 723,RGS17,IM4 725 | 724,FN1,IM4 726 | 725,SPHK1,IM4 727 | 726,PLOD2,IM4 728 | 727,SYBU,IM4 729 | 728,SLC38A5,IM4 730 | 729,PPP1R1A,IM4 731 | 730,KIF2A,IM4 732 | 731,PDLIM7,IM4 733 | 732,PRIMA1,IM4 734 | 733,PLPP2,IM4 735 | 734,COL7A1,IM4 736 | 735,LIF,IM4 737 | 736,CERCAM,IM4 738 | 737,COL6A2,IM4 739 | 738,COL6A1,IM4 740 | 739,COL6A3,IM4 741 | 740,FSCN1,IM4 742 | 741,MDK,IM4 743 | 742,SPON2,IM4 744 | 743,FKBP10,IM4 745 | 744,ZFHX4,IM4 746 | 745,BMP1,IM4 747 | 746,PLXDC1,IM4 748 | 747,SPSB1,IM4 749 | 748,INHBA,IM4 750 | 749,COL5A2,IM4 751 | 750,GALNT17,IM4 752 | 751,ADAMTS14,IM4 753 | 752,MMP11,IM4 754 | 753,MMP16,IM4 755 | 754,MMP17,IM4 756 | 755,GAD1,IM4 757 | 756,TNR,IM4 758 | 757,HOXD11,IM4 759 | 758,HOXD10,IM4 760 | 759,SYT12,IM4 761 | 760,CACNA1H,IM4 762 | 761,PLXNB3,IM4 763 | 762,EFNA5,IM4 764 | 763,B3GALT5,IM4 765 | 764,SORCS2,IM4 766 | 765,KNDC1,IM4 767 | 766,RUNX2,IM4 768 | 767,RUNX1,IM4 769 | 768,UCHL1,IM4 770 | 769,B4GALNT4,IM4 771 | 770,SPINK1,IM4 772 | 771,TPM2,IM4 773 | 772,NPEPL1,IM4 774 | 773,PDPN,IM4 775 | 774,MLLT11,IM4 776 | 775,ZNF703,IM4 777 | 776,KRT19,IM4 778 | 777,KRT17,IM4 779 | 778,KRT80,IM4 780 | 779,TSKU,IM4 781 | 780,ZNF469,IM4 782 | 781,FAM78B,IM4 783 | 782,ZNF365,IM4 784 | 783,TMEM132A,IM4 785 | 784,SPRED3,IM4 786 | 785,LRRC3,IM4 787 | 786,CD44,IM4 788 | 787,GPC1,IM4 789 | 788,CD82,IM4 790 | 789,CDH3,IM4 791 | 790,APLP1,IM4 792 | 791,PKP3,IM4 793 | 792,BCAT1,IM4 794 | 793,PLAU,IM4 795 | 794,ADAM19,IM4 796 | 795,ADAM12,IM4 797 | 796,PLP2,IM4 798 | 797,PODNL1,IM4 799 | 798,PLTP,IM4 800 | 799,GRIN2D,IM4 801 | 800,GFPT2,IM4 802 | 801,B3GNT4,IM4 803 | 802,SCNN1G,IM4 804 | 803,MELTF,IM4 805 | 804,LEF1,IM4 806 | 805,PPP2R2C,IM4 807 | 806,PRAME,IM4 808 | 807,CLMP,IM4 809 | 808,ATP8A2,IM4 810 | 809,IGFBP1,IM4 811 | 810,ATP8B3,IM4 812 | 811,PSD3,IM4 813 | 812,SLC6A17,IM4 814 | 813,C1QL1,IM4 815 | 814,PREX2,IM4 816 | 815,CPA4,IM4 817 | 816,CFAP47,IM4 818 | 817,LAMB3,IM4 819 | 818,LAMB1,IM4 820 | 819,PXDN,IM4 821 | 820,IGF2BP3,IM4 822 | 821,IGF2BP2,IM4 823 | 822,CPNE7,IM4 824 | 823,ACTN2,IM4 825 | 824,ACTN1,IM4 826 | 825,ACTG2,IM4 827 | 826,RARRES1,IM4 828 | 827,THSD4,IM4 829 | 828,FAM167A,IM4 830 | 829,GXYLT2,IM4 831 | 830,GALNT2,IM4 832 | 831,ZPLD1,IM4 833 | 832,MEX3B,IM4 834 | 833,GPRC5A,IM4 835 | 834,BAIAP2L1,IM4 836 | 835,N4BP3,IM4 837 | 836,MICAL2,IM4 838 | 837,CD276,IM4 839 | 838,SMOC1,IM4 840 | 839,C5orf46,IM4 841 | 840,HOXB9,IM4 842 | 841,NALCN,IM4 843 | 842,ALDH1L2,IM4 844 | 843,C16orf74,IM4 845 | 844,MFAP5,IM4 846 | 845,CHRDL2,IM4 847 | 846,DBN1,IM4 848 | 847,KIAA1644,IM4 849 | 848,OLFML2B,IM4 850 | 849,ITGB4,IM4 851 | 850,ELFN2,IM4 852 | 851,ITGB6,IM4 853 | 852,ITGA5,IM4 854 | 853,C1QTNF1,IM4 855 | 854,GRAMD1B,IM4 856 | 855,ZBTB7C,IM4 857 | 856,TRAM2,IM4 858 | -------------------------------------------------------------------------------- /Figure 2/cross-validation using TCGA-KIRC.R: -------------------------------------------------------------------------------- 1 | #####cross-validation using TCGA-KIRC, related to Figure 2############# 2 | 3 | TCGA <- fread("./TCGA_KIRC_pre_processed.txt") 4 | TCGA <- data.frame(TCGA[,-1],row.names = TCGA$V1) 5 | 6 | tmp_org2 <- tmp_org[tmp_org$Symbol%in%rownames(TCGA),] 7 | 8 | library(Biobase) 9 | library(CMScaller) 10 | 11 | colnames(tmp_org2) <- c("probe","class") 12 | 13 | emat <- ematAdjust(TCGA[tmp_org2$probe,], normMethod = 'RLE') 14 | res <- ntp(emat, tmp_org2, doPlot=TRUE, nPerm=1000, seed = 42,nCores =30) #######predict subtype using ntp algorithm 15 | 16 | IM_group_TCGA <- res$prediction %>% data.frame() 17 | rownames(IM_group_TCGA) <- colnames(TCGA) 18 | colnames(IM_group_TCGA) <- "predicted_subtype" 19 | 20 | top_anno <- HeatmapAnnotation(df = IM_group_TCGA, col = 21 | list(predicted_subtype=c("IM1"="#E64B35FF", "IM2"="#4DBBD5FF", "IM3"="#00A087FF", "IM4"="#3C5488FF" )), 22 | show_legend = T) 23 | 24 | col <- brewer.pal(11,"RdBu")[11:1] 25 | heat2 <- Heatmap(t(scale(t(TCGA)))[tmp_org2$probe, ], 26 | col = colorRamp2(seq(-2,2,length.out = 11),col), 27 | cluster_rows = F, 28 | cluster_columns = F, 29 | row_names_gp = gpar(fontsize = 10), 30 | show_column_names = F, 31 | show_row_names = F, 32 | border = "black", 33 | row_split = tmp_org2$class, 34 | column_split = res$prediction, 35 | column_gap = unit(0, "mm"), 36 | row_gap = unit(0, "mm"), 37 | top_annotation = top_anno 38 | ) 39 | heat2 40 | 41 | 42 | clinical_TCGA <- read.table("TCGA_clinical.txt") ########load organized clinical data 43 | clinical_TCGA <- clinical_TCGA[colnames(TCGA),] #### keep in the same order 44 | all(rownames(clinical_TCGA)==colnames(TCGA)) 45 | #[1] TRUE 46 | 47 | table(res$prediction,clinical_TCGA$prediction) 48 | 49 | # IM1 IM2 IM3 IM4 50 | # IM1 93 0 0 0 51 | # IM2 0 159 0 0 52 | # IM3 0 0 74 0 53 | # IM4 0 0 0 116 54 | 55 | ########################### Extended Data Figure 3B ############################### 56 | column <- as.data.frame(table(clinical_TCGA$prediction, clinical_TCGA$grade)) 57 | 58 | colnames(column) <- c("IM_group","grade","Freq") 59 | 60 | grade=c("G1"="#fee5d9","G2"="#fcae91","G3"="#de2d26","G4"="#a50f15","GX"="grey85") 61 | p1 <- ggplot(column,aes(IM_group,weight=Freq,fill=grade))+geom_bar(position="fill")+#coord_flip()+ 62 | theme(panel.grid.major =element_blank(), 63 | panel.grid.minor = element_blank(), 64 | panel.background = element_blank(), 65 | axis.line = element_line(colour = "black")) + #scale_fill_npg() 66 | scale_fill_manual(values = grade) #[c(1,5,17,14,21)] 67 | p1 + theme_bw()+ 68 | theme(axis.text.x = element_text(angle = 45, hjust = 1)) 69 | 70 | 71 | ########################### Extended Data Figure 3C ############################### 72 | column <- as.data.frame(table(clinical_TCGA$prediction, clinical_TCGA$stage)) 73 | 74 | colnames(column) <- c("IM_group","stage","Freq") 75 | 76 | stage = c("stage i"="#C6DBEF", "stage ii"="#6BAED6", "stage iii"="#2171B5", "stage iv"="#08306B","not reported"="grey85") 77 | p1 <- ggplot(column,aes(IM_group,weight=Freq,fill=stage))+geom_bar(position="fill")+#coord_flip()+ 78 | theme(panel.grid.major =element_blank(), 79 | panel.grid.minor = element_blank(), 80 | panel.background = element_blank(), 81 | axis.line = element_line(colour = "black")) + #scale_fill_npg() 82 | scale_fill_manual(values = stage) #[c(1,5,17,14,21)] 83 | p1 + theme_bw()+ 84 | theme(axis.text.x = element_text(angle = 45, hjust = 1)) 85 | 86 | 87 | ########################### Extended Data Figure 3D ############################### 88 | 89 | library(survminer) 90 | library(survival) 91 | library(cowplot) 92 | 93 | os_sub <- clinical_TCGA[!clinical_TCGA$stage%in%c("stage i"),] 94 | 95 | fit <- survfit(Surv(OS.time/30, OS) ~ prediction, data = clinical_TCGA) 96 | p <- ggsurvplot(fit, 97 | pval = T ,conf.int = F,censor = T, censor.size = 3, 98 | axes.offset = T, 99 | surv.median.line = "hv", # Specify median survival 100 | ggtheme = theme_classic(base_line_size=1, base_rect_size=1), # Change ggplot2 theme 101 | palette = pal_npg()(4) 102 | ) 103 | p 104 | 105 | 106 | fit <- survfit(Surv(PFI.time/30, PFI) ~ prediction, data = clinical_TCGA) 107 | p <- ggsurvplot(fit, 108 | pval = T ,conf.int = F,censor = T, censor.size = 3, 109 | axes.offset = T, 110 | surv.median.line = "hv", # Specify median survival 111 | ggtheme = theme_classic(base_line_size=1, base_rect_size=1), # Change ggplot2 theme 112 | palette = pal_npg()(4) 113 | ) 114 | p 115 | 116 | 117 | -------------------------------------------------------------------------------- /Figure 2/processing of snRNA-seq data.R: -------------------------------------------------------------------------------- 1 | library(dplyr) 2 | library(ggplot2) 3 | library(cowplot) 4 | library(harmony) 5 | library(Seurat) 6 | library(ggplot2) 7 | library(cowplot) 8 | library(ggsci) 9 | library(Rcpp) 10 | library(RColorBrewer) 11 | library(ggpointdensity) 12 | library(symphony) 13 | library(viridis) 14 | options(stringsAsFactors = F) 15 | 16 | snRNA <- readRDS("./snRNA.rds") 17 | 18 | VlnPlot(snRNA, c("nUMI","nGene","percent.mito"), group.by = "sample",pt.size = 0) 19 | 20 | snRNA <- SetIdent(snRNA, cells = NULL, 21 | value = snRNA@meta.data$celltype2) 22 | 23 | snRNA <- NormalizeData(snRNA) 24 | 25 | snRNA <- FindVariableFeatures(snRNA, nfeatures = 2000) 26 | VariableFeaturePlot(snRNA) 27 | snRNA <- ScaleData(snRNA, verbose = T) 28 | snRNA <- RunPCA(snRNA, npcs = 50, verbose = FALSE) 29 | PCAPlot(snRNA,cols=celltype) 30 | ElbowPlot(snRNA, ndims = 50) 31 | snRNA <- RunHarmony(snRNA, c("sample"),max.iter.harmony = 20) 32 | snRNA <- FindNeighbors(snRNA, reduction = "harmony", dims = 1:50, do.plot = T) 33 | snRNA <- FindClusters(snRNA, resolution = 1) 34 | 35 | snRNA <- RunUMAP(snRNA, reduction = "harmony", dims = 1:50, n.components = 2) 36 | 37 | snRNA <- CellCycleScoring(snRNA, g2m.features = cc.genes$g2m.genes, 38 | s.features = cc.genes$s.genes) 39 | 40 | 41 | ########################### Figure 2E ############################# 42 | 43 | DimPlot(snRNA, reduction = "umap", label = F, repel = TRUE, raster= F,group.by = "celltype", 44 | cols = c("#fc772d", "#c6d5a8", "#b48f60", "#a75565", "#e7553e") 45 | ) 46 | DimPlot(snRNA, reduction = "umap", label = F, repel = TRUE, raster= F,group.by = "class", 47 | cols = brewer.pal(11,"Set3")[c(1,3:5)] 48 | ) 49 | 50 | #######Sub-clustering of different cell lineages were performed using the same pipeline 51 | 52 | 53 | ########################### Figure 2F ############################# 54 | 55 | column <- as.data.frame(table(snRNA$sample, snRNA$celltype)) 56 | group <- as.data.frame(table(snRNA$sample, snRNA$class)) 57 | group <- group[group$Freq>0,] 58 | 59 | column$IM_subtype <- plyr::mapvalues(x = column$Var1, 60 | from = as.character(group$Var1), 61 | to = as.character(group$Var2)) 62 | 63 | colnames(column) <- c("Patient","cluster","Freq","IM_subtype") 64 | 65 | column$IM_subtype <- as.character(column$IM_subtype) 66 | 67 | p1 <- ggplot(column,aes(Patient,weight=Freq,fill=cluster))+geom_bar(position="fill")+ 68 | theme(panel.grid.major =element_blank(), 69 | panel.grid.minor = element_blank(), 70 | panel.background = element_blank(), 71 | axis.line = element_line(colour = "black")) 72 | scale_fill_manual(values = c(celltype)) 73 | p1 + facet_grid(~IM_subtype,scales = "free", space = "free") + 74 | theme(axis.text.x = element_text(angle = 45, hjust = 1), 75 | axis.ticks.length = unit(.2, "cm")) + ylab("Proportion") 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Figure 2/processing public ccRCC scRNA-seq data.R: -------------------------------------------------------------------------------- 1 | library(dplyr) 2 | library(ggplot2) 3 | library(cowplot) 4 | library(Seurat) 5 | library(harmony) 6 | library(ggplot2) 7 | library(cowplot) 8 | library(ggsci) 9 | library(RColorBrewer) 10 | library(ComplexHeatmap) 11 | library(circlize) 12 | options(stringsAsFactors = F) 13 | 14 | ##########count matrix was obtained from mendeley################ 15 | 16 | merge@meta.data$nUMI <- merge@meta.data$nCount_RNA 17 | merge@meta.data$nGene <- merge@meta.data$nFeature_RNA 18 | 19 | 20 | mito.genes <- grep( 21 | pattern = "^MT-", 22 | x = rownames(x = merge@assays$RNA@data), 23 | value = TRUE) 24 | 25 | percent.mito <- Matrix::colSums(merge@assays$RNA@counts[mito.genes, ]) / Matrix::colSums(merge@assays$RNA@counts) 26 | 27 | merge <- AddMetaData( 28 | object = merge, 29 | metadata = percent.mito, 30 | col.name = "percent.mito") 31 | VlnPlot(merge, c("nUMI","nGene","percent.mito"), group.by = "sample",pt.size = 0) 32 | 33 | 34 | merge <- subset(merge, subset = percent.mito < 0.3) 35 | merge <- subset(merge, subset = nGene < 7500) 36 | merge <- subset(merge, subset = nUMI > 1000) 37 | merge <- subset(merge, subset = nUMI < 30000) 38 | 39 | merge <- NormalizeData(merge) 40 | 41 | merge <- FindVariableFeatures(merge) 42 | VariableFeaturePlot(merge) 43 | merge <- ScaleData(merge, verbose = T) 44 | merge <- RunPCA(merge, npcs = 100, verbose = FALSE) 45 | PCAPlot(merge) 46 | ElbowPlot(merge, ndims = 100) 47 | merge <- RunHarmony(merge, c("sample")) 48 | merge <- FindNeighbors(merge, reduction = "harmony", dims = 1:75, do.plot = T) 49 | merge <- FindClusters(merge, resolution = 1) 50 | 51 | merge <- RunUMAP(merge, reduction = "harmony", dims = 1:75) 52 | 53 | merge <- CellCycleScoring(merge, g2m.features = cc.genes$g2m.genes, 54 | s.features = cc.genes$s.genes) 55 | 56 | #########################Extended Data Figure 2-1############################## 57 | celltype <- c(brewer.pal(11,"Set3")[c(1,3:8,10:11)],pal_aaas(alpha = 0.7)(10)[-2],brewer.pal(8,"Set2"),brewer.pal(11,"Paired"))#[13:1] 58 | 59 | DimPlot(merge, reduction = "umap", group.by = "celltype2", label = F, repel = TRUE,#pt.size = 1, 60 | cols = celltype 61 | ) 62 | 63 | 64 | merge <- SetIdent(merge, cells = NULL, 65 | value = merge@meta.data$celltype2) 66 | 67 | all.markers_celltype <- FindAllMarkers(merge, verbose = T) 68 | 69 | marker <- all.markers_celltype[all.markers_celltype$avg_logFC > 0.8,] 70 | marker <- marker[!duplicated(marker$gene),] 71 | 72 | marker %>% group_by(cluster) %>% top_n(60, avg_logFC) -> top_marker 73 | 74 | ave <- AverageExpression(merge,return.seurat = T) 75 | 76 | cell_exp <- ave@assays$RNA@data[top_marker$gene,] 77 | 78 | cell_exp <- (scale(t(cell_exp))) 79 | cell_exp <- na.omit(cell_exp) 80 | 81 | #########################Extended Data Figure 2-2############################## 82 | Heatmap(cell_exp, 83 | col = colorRamp2(seq(-4,4,length.out = 11),col), 84 | cluster_rows = F, 85 | cluster_columns = F, 86 | show_column_names = F, 87 | show_row_names = T, 88 | use_raster=F, 89 | column_gap = unit(1, "mm"), 90 | column_title = NULL) 91 | 92 | 93 | #####subtyping with consensusclusterplus################## 94 | 95 | 96 | coding_matrix <- read.csv("./coding_mRNA.csv", sep = ",", header = T, row.names = 1) 97 | 98 | coding_matrix <- log2(coding_matrix+1) 99 | 100 | tumor <- grep(colnames(d), pattern = "_T", value = T) 101 | 102 | d=coding_matrix[top_marker$gene,tumor] 103 | 104 | d = sweep(d,1, apply(d,1,median,na.rm=T)) 105 | d <- as.matrix(d) 106 | 107 | library(ConsensusClusterPlus) 108 | title="./ConsensusClusterPlus/" 109 | results = ConsensusClusterPlus(d,maxK=20, 110 | reps=100, 111 | pItem=0.8, 112 | pFeature=1, 113 | title=title, 114 | clusterAlg="hc", 115 | distance="pearson", 116 | seed=1262118388.71279, 117 | plot="png", 118 | verbose = T) 119 | ####k=4 was choosen according to the CDF plot################# -------------------------------------------------------------------------------- /Figure 2/snATAC analysis pipeline.R: -------------------------------------------------------------------------------- 1 | library(ArchR) 2 | library(dplyr) 3 | library(ggplot2) 4 | library(cowplot) 5 | library(harmony) 6 | library(Seurat) 7 | library(ggplot2) 8 | library(cowplot) 9 | library(ggsci) 10 | library(Rcpp) 11 | library(RColorBrewer) 12 | library(ggpointdensity) 13 | library(parallel) 14 | options(stringsAsFactors = F) 15 | 16 | addArchRThreads(threads = 35) 17 | memory.limit(1000000000) 18 | addArchRGenome("hg38") 19 | 20 | inputFiles <- "./atac_fragments.tsv.gz" 21 | names(inputFiles) <- "aggr" 22 | 23 | 24 | ############load ATAC data################ 25 | ArrowFiles <- createArrowFiles( 26 | inputFiles = inputFiles, 27 | sampleNames = names(inputFiles), 28 | filterTSS = 1, #Dont set this too high because you can always increase later 29 | filterFrags = 1000, 30 | addTileMat = TRUE, 31 | addGeneScoreMat = TRUE 32 | ) 33 | 34 | projHeme1 <- ArchRProject( 35 | ArrowFiles = ArrowFiles, 36 | outputDirectory = "ccRCC", 37 | copyArrows = TRUE #This is recommened so that if you modify the Arrow files you have an original copy for later usage. 38 | ) 39 | projHeme1 40 | 41 | df <- getCellColData(projHeme1, select = c("log10(nFrags)", "TSSEnrichment")) 42 | df 43 | 44 | p <- ggPoint( 45 | x = df[,1], 46 | y = df[,2], 47 | size =0.5, 48 | colorDensity = TRUE, 49 | continuousSet = "sambaNight", 50 | xlabel = "Log10 Unique Fragments", 51 | ylabel = "TSS Enrichment", 52 | xlim = c(log10(500), quantile(df[,1], probs = 0.99)), 53 | ylim = c(0, quantile(df[,2], probs = 0.99)) 54 | ) + geom_hline(yintercept = 4, lty = "dashed") + geom_vline(xintercept = 3, lty = "dashed") 55 | 56 | p 57 | 58 | plotPDF(p, name = "TSS-vs-Frags.pdf", ArchRProj = projHeme1, addDOC = FALSE) 59 | 60 | 61 | ##############select single nucleic with paired snRNA-seq data############## 62 | 63 | id <- projHeme1$cellNames 64 | id <- gsub("aggr#","",id) 65 | id2 <- colnames(annotated_snRNA)[which(annotated_snRNA$cohort=="10X_ARC")] 66 | idxPass <- which(id %in% id2) 67 | cellsPass <- projHeme1$cellNames[idxPass] 68 | projHeme2 <- projHeme1[cellsPass, ] 69 | 70 | meta <- annotated_snRNA@meta.data[cellNames,] 71 | rownames(meta) <- paste("aggr#",rownames(meta),sep = "") 72 | meta <- meta[projHeme2$cellNames,] 73 | 74 | projHeme2 <- addCellColData(ArchRProj = projHeme2, data = meta$class, 75 | cells = cellsPass, name = "class",force = TRUE) 76 | projHeme2 <- addCellColData(ArchRProj = projHeme2, data = meta$sample, 77 | cells = cellsPass, name = "sample",force = TRUE) 78 | projHeme2 <- addCellColData(ArchRProj = projHeme2, data = meta$celltype, 79 | cells = cellsPass, name = "celltype",force = TRUE) 80 | 81 | 82 | ########dimensional reduction############### 83 | projHeme2 <- addIterativeLSI( 84 | ArchRProj = projHeme2, 85 | useMatrix = "TileMatrix", 86 | name = "IterativeLSI", 87 | iterations = 4, 88 | clusterParams = list( #See Seurat::FindClusters 89 | resolution = c(0.8), 90 | sampleCells = 20000, 91 | n.start = 10 92 | ), 93 | varFeatures = 25000, 94 | dimsToUse = 1:30 95 | ) 96 | 97 | projHeme2 <- addUMAP( 98 | ArchRProj = projHeme2, reducedDims = "IterativeLSI", name = "UMAP", 99 | nNeighbors = 30, minDist = 0.5, metric = "cosine" 100 | ) 101 | 102 | ######add snRNA-seq data############## 103 | seRNA <- import10xFeatureMatrix( 104 | input = c("./filtered_feature_bc_matrix.h5"), 105 | names = c("aggr") 106 | ) 107 | 108 | seRNA <- subset(seRNA, cells=projHeme2@cellColData@rownames) 109 | 110 | projHeme2 <- addGeneExpressionMatrix( 111 | input = projHeme2, 112 | seRNA = seRNA, 113 | chromSizes = getChromSizes(projHeme2), 114 | excludeChr = c("chrM", "chrY"), 115 | scaleTo = 10000, 116 | verbose = TRUE, 117 | threads = getArchRThreads(), 118 | parallelParam = NULL, 119 | force = TRUE, 120 | logFile = createLogFile("addGeneExpressionMatrix") 121 | ) 122 | 123 | 124 | 125 | 126 | meta_EC <- snRNA_EC@meta.data ####a subset of snRNA-seq data with only endothelial cells 127 | rownames(meta_EC) <- paste("aggr#",rownames(meta_EC),sep = "") 128 | meta_EC <- meta_EC[rownames(meta_EC)%in%projHeme2$cellNames,] 129 | 130 | EC <- projHeme2[rownames(meta_EC), ] 131 | 132 | 133 | EC <- addUMAP( 134 | ArchRProj = EC, reducedDims = "IterativeLSI", name = "UMAP", force = TRUE, 135 | nNeighbors = 30, minDist = 0.5, metric = "cosine" 136 | ) 137 | 138 | EC <- addImputeWeights(EC) 139 | 140 | 141 | ##########SFigure 7c########## 142 | pathToMacs2 <- ("/home/usr/miniconda3/bin/macs2") 143 | 144 | EC <- addReproduciblePeakSet( 145 | ArchRProj = EC, 146 | groupBy = "class", 147 | pathToMacs2 = pathToMacs2 148 | ) 149 | 150 | EC <- addPeakMatrix(EC) 151 | 152 | EC <- addPeak2GeneLinks( 153 | ArchRProj = EC, 154 | reducedDims = "IterativeLSI", 155 | useMatrix = "GeneExpressionMatrix" 156 | ) 157 | 158 | ################## Extended Data Figure 4D #################### 159 | 160 | p <- plotBrowserTrack( 161 | ArchRProj = EC, 162 | groupBy = "class", 163 | geneSymbol = "FOS", 164 | upstream = 40000, 165 | downstream = 50000, 166 | loops = getPeak2GeneLinks(EC) 167 | ) 168 | grid::grid.newpage() 169 | grid::grid.draw(p[[1]]) 170 | 171 | p <- plotBrowserTrack( 172 | ArchRProj = EC, 173 | groupBy = "class", 174 | geneSymbol = "FOS", 175 | upstream = 40000, 176 | downstream = 50000, 177 | loops = getPeak2GeneLinks(EC) 178 | ) 179 | grid::grid.newpage() 180 | grid::grid.draw(p[[1]]) 181 | 182 | -------------------------------------------------------------------------------- /Figure 2/ssgsea_macrophage.R: -------------------------------------------------------------------------------- 1 | Myeloid <- snRNA[,snRNA$celltype%in%c("Myeloid")] 2 | 3 | matrix <- Myeloid@assays$RNA@data[,grep("Macro",Myeloid$celltype2)] 4 | res_h <- gsva(as.matrix(matrix), geneset, method = "ssgsea", parallel.sz = 0, verbose = T) 5 | res2 <- gsva(as.matrix(matrix), geneset2, method = "ssgsea", parallel.sz = 0, verbose = T) 6 | res5 <- gsva(as.matrix(matrix), geneset5, method = "ssgsea", parallel.sz = 0, verbose = T) 7 | 8 | a <- unique(Myeloid$celltype2[grep("Macro",Myeloid$celltype2)]) 9 | 10 | results <- lapply(a, function(m) { 11 | group <- ifelse(Myeloid$celltype2 == m, "select", "ref") 12 | group_mat <- model.matrix(~factor(group)) 13 | colnames(group_mat) <- c("ref", "select") 14 | fit <- lmFit(rbind(res_h, res2, res5), group_mat) 15 | fit2 <- eBayes(fit) 16 | allDiff <- topTable(fit2, adjust = 'fdr', coef = 2, number = 200000) 17 | allDiff$X <- row.names(allDiff) 18 | ##### only select T-value from the result ############ 19 | allDiff <- allDiff[, c("X", "t")] 20 | colnames(allDiff)[2] <- m 21 | return(allDiff) 22 | }) 23 | 24 | b <- Reduce(function(x, y) {merge(x, y, by = "X")}, results) 25 | b <- data.frame(b[-1],row.names = b$X) 26 | 27 | ssgsea_macro <- c("GOBP_REGULATION_OF_T_CELL_MEDIATED_CYTOTOXICITY", "GOCC_MHC_CLASS_II_PROTEIN_COMPLEX", 28 | "GOBP_POSITIVE_REGULATION_OF_ACUTE_INFLAMMATORY_RESPONSE", "GOBP_INTERLEUKIN_18_PRODUCTION", 29 | "HALLMARK_INTERFERON_GAMMA_RESPONSE", "GOMF_SCAVENGER_RECEPTOR_ACTIVITY", 30 | "GOBP_ENDOTHELIAL_CELL_FATE_COMMITMENT", "GOCC_GROWTH_FACTOR_COMPLEX" ) 31 | 32 | ssgsea_macro <- b[ssgsea_macro,] 33 | rownames(ssgsea_macro) <- tolower(rownames(ssgsea_macro)) 34 | rownames(ssgsea_macro) <- strsplit(rownames(ssgsea_macro),"_")[] %>% 35 | lapply(., function(x) x[-1]) %>% 36 | sapply(., function(x) paste(x, collapse = " ")) 37 | 38 | ####################### Extended Data Figure 3J ############################## 39 | 40 | bk=c(seq(-20,-0.1,by=0.01),seq(0,20,by=0.01)) 41 | pheatmap(ssgsea_macro, border_color = NA, fontsize = 9,cellheight = 12,cellwidth = 15, 42 | cluster_col=T, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 43 | color = c(colorRampPalette(colors = brewer.pal(11,"RdBu")[11:6])(length(bk)/2), 44 | colorRampPalette(colors = brewer.pal(11,"RdBu")[6:1])(length(bk)/2))) 45 | -------------------------------------------------------------------------------- /Figure 3/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 3 and Extended Data Figure 5. ssgsea analysis.R contains code for Fig. 3a-3b,3f and eFig 5a. differential analysis of metabolites.R contains code for Fig 3e. visulization of spatial metabolomics.R contains code for Fig. 3h. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 3/Source Data /metabolic_selected.txt: -------------------------------------------------------------------------------- 1 | GO_terms 2 | GOBP_ACETYL_COA_BIOSYNTHETIC_PROCESS 3 | GOBP_ACETYL_COA_BIOSYNTHETIC_PROCESS_FROM_PYRUVATE 4 | GOBP_ACETYL_COA_METABOLIC_PROCESS 5 | GOBP_ALANINE_CATABOLIC_PROCESS 6 | GOBP_ALCOHOL_CATABOLIC_PROCESS 7 | GOBP_ALDEHYDE_BIOSYNTHETIC_PROCESS 8 | GOBP_ALDITOL_BIOSYNTHETIC_PROCESS 9 | GOBP_ALDITOL_METABOLIC_PROCESS 10 | GOBP_ALDITOL_PHOSPHATE_METABOLIC_PROCESS 11 | GOBP_ALKALOID_METABOLIC_PROCESS 12 | GOBP_ALPHA_AMINO_ACID_CATABOLIC_PROCESS 13 | GOBP_ALPHA_AMINO_ACID_METABOLIC_PROCESS 14 | GOBP_AMINE_BIOSYNTHETIC_PROCESS 15 | GOBP_AMINO_ACID_BETAINE_BIOSYNTHETIC_PROCESS 16 | GOBP_AMINO_ACID_BETAINE_METABOLIC_PROCESS 17 | GOBP_AMINO_SUGAR_CATABOLIC_PROCESS 18 | GOBP_AMINOGLYCAN_BIOSYNTHETIC_PROCESS 19 | GOBP_AMINOGLYCAN_METABOLIC_PROCESS 20 | GOBP_AMMONIUM_ION_METABOLIC_PROCESS 21 | GOBP_AMP_CATABOLIC_PROCESS 22 | GOBP_ANAPHASE_PROMOTING_COMPLEX_DEPENDENT_CATABOLIC_PROCESS 23 | GOBP_ARGININE_CATABOLIC_PROCESS 24 | GOBP_ASPARAGINE_METABOLIC_PROCESS 25 | GOBP_ASPARTATE_FAMILY_AMINO_ACID_METABOLIC_PROCESS 26 | GOBP_BRANCHED_CHAIN_AMINO_ACID_CATABOLIC_PROCESS 27 | GOBP_BRANCHED_CHAIN_AMINO_ACID_METABOLIC_PROCESS 28 | GOBP_C21_STEROID_HORMONE_BIOSYNTHETIC_PROCESS 29 | GOBP_C21_STEROID_HORMONE_METABOLIC_PROCESS 30 | GOBP_CAMP_BIOSYNTHETIC_PROCESS 31 | GOBP_CAMP_METABOLIC_PROCESS 32 | GOBP_CARNITINE_METABOLIC_PROCESS 33 | GOBP_CATECHOL_CONTAINING_COMPOUND_BIOSYNTHETIC_PROCESS 34 | GOBP_CELLULAR_AMINO_ACID_CATABOLIC_PROCESS 35 | GOBP_CELLULAR_AMINO_ACID_METABOLIC_PROCESS 36 | GOBP_CELLULAR_NITROGEN_COMPOUND_CATABOLIC_PROCESS 37 | GOBP_CGMP_BIOSYNTHETIC_PROCESS 38 | GOBP_CGMP_METABOLIC_PROCESS 39 | GOBP_CHOLINE_METABOLIC_PROCESS 40 | GOBP_CHONDROITIN_SULFATE_BIOSYNTHETIC_PROCESS 41 | GOBP_CHONDROITIN_SULFATE_PROTEOGLYCAN_BIOSYNTHETIC_PROCESS 42 | GOBP_CHONDROITIN_SULFATE_PROTEOGLYCAN_METABOLIC_PROCESS 43 | GOBP_COBALAMIN_METABOLIC_PROCESS 44 | GOBP_COLLAGEN_BIOSYNTHETIC_PROCESS 45 | GOBP_COLLAGEN_CATABOLIC_PROCESS 46 | GOBP_COLLAGEN_METABOLIC_PROCESS 47 | GOBP_CORTISOL_BIOSYNTHETIC_PROCESS 48 | GOBP_CORTISOL_METABOLIC_PROCESS 49 | GOBP_CYCLIC_NUCLEOTIDE_BIOSYNTHETIC_PROCESS 50 | GOBP_CYCLIC_NUCLEOTIDE_CATABOLIC_PROCESS 51 | GOBP_CYCLIC_NUCLEOTIDE_METABOLIC_PROCESS 52 | GOBP_CYTIDINE_METABOLIC_PROCESS 53 | GOBP_DEOXYRIBOSE_PHOSPHATE_METABOLIC_PROCESS 54 | GOBP_DIOL_METABOLIC_PROCESS 55 | GOBP_DIPHOSPHOINOSITOL_POLYPHOSPHATE_METABOLIC_PROCESS 56 | GOBP_DISACCHARIDE_METABOLIC_PROCESS 57 | GOBP_DOPAMINE_BIOSYNTHETIC_PROCESS 58 | GOBP_FARNESYL_DIPHOSPHATE_METABOLIC_PROCESS 59 | GOBP_FATTY_ACID_CATABOLIC_PROCESS 60 | GOBP_FATTY_ACID_DERIVATIVE_METABOLIC_PROCESS 61 | GOBP_FATTY_ACID_METABOLIC_PROCESS 62 | GOBP_FRUCTOSE_1_6_BISPHOSPHATE_METABOLIC_PROCESS 63 | GOBP_FUCOSE_CATABOLIC_PROCESS 64 | GOBP_GAMMA_AMINOBUTYRIC_ACID_METABOLIC_PROCESS 65 | GOBP_GLUCOCORTICOID_BIOSYNTHETIC_PROCESS 66 | GOBP_GLUCOCORTICOID_METABOLIC_PROCESS 67 | GOBP_GLUCOSAMINE_CONTAINING_COMPOUND_CATABOLIC_PROCESS 68 | GOBP_GLYCEROL_3_PHOSPHATE_METABOLIC_PROCESS 69 | GOBP_GLYCINE_BIOSYNTHETIC_PROCESS 70 | GOBP_GLYCINE_METABOLIC_PROCESS 71 | GOBP_GLYCOPROTEIN_METABOLIC_PROCESS 72 | GOBP_GLYCOSYL_COMPOUND_CATABOLIC_PROCESS 73 | GOBP_GLYCOSYL_COMPOUND_METABOLIC_PROCESS 74 | GOBP_GLYOXYLATE_METABOLIC_PROCESS 75 | GOBP_HEMOGLOBIN_BIOSYNTHETIC_PROCESS 76 | GOBP_HEPARAN_SULFATE_PROTEOGLYCAN_BIOSYNTHETIC_PROCESS 77 | GOBP_HEPARAN_SULFATE_PROTEOGLYCAN_BIOSYNTHETIC_PROCESS_POLYSACCHARIDE_CHAIN_BIOSYNTHETIC_PROCESS 78 | GOBP_HEPARAN_SULFATE_PROTEOGLYCAN_METABOLIC_PROCESS 79 | GOBP_HEPARIN_BIOSYNTHETIC_PROCESS 80 | GOBP_HEPARIN_METABOLIC_PROCESS 81 | GOBP_HISTIDINE_CATABOLIC_PROCESS 82 | GOBP_HISTIDINE_METABOLIC_PROCESS 83 | GOBP_HORMONE_CATABOLIC_PROCESS 84 | GOBP_INDOLE_CONTAINING_COMPOUND_BIOSYNTHETIC_PROCESS 85 | GOBP_INOSITOL_METABOLIC_PROCESS 86 | GOBP_INOSITOL_PHOSPHATE_CATABOLIC_PROCESS 87 | GOBP_INTEGRIN_BIOSYNTHETIC_PROCESS 88 | GOBP_KERATAN_SULFATE_METABOLIC_PROCESS 89 | GOBP_KETONE_BODY_BIOSYNTHETIC_PROCESS 90 | GOBP_KETONE_BODY_METABOLIC_PROCESS 91 | GOBP_LEUCINE_CATABOLIC_PROCESS 92 | GOBP_LIPOXIN_METABOLIC_PROCESS 93 | GOBP_LONG_CHAIN_FATTY_ACID_CATABOLIC_PROCESS 94 | GOBP_MEDIUM_CHAIN_FATTY_ACID_CATABOLIC_PROCESS 95 | GOBP_MEDIUM_CHAIN_FATTY_ACID_METABOLIC_PROCESS 96 | GOBP_METHIONINE_METABOLIC_PROCESS 97 | GOBP_MHC_CLASS_I_BIOSYNTHETIC_PROCESS 98 | GOBP_MHC_CLASS_II_BIOSYNTHETIC_PROCESS 99 | GOBP_MINERALOCORTICOID_BIOSYNTHETIC_PROCESS 100 | GOBP_MINERALOCORTICOID_METABOLIC_PROCESS 101 | GOBP_MITOCHONDRIAL_ACETYL_COA_BIOSYNTHETIC_PROCESS_FROM_PYRUVATE 102 | GOBP_MITOCHONDRIAL_PROTEIN_CATABOLIC_PROCESS 103 | GOBP_MONOACYLGLYCEROL_CATABOLIC_PROCESS 104 | GOBP_MONOCARBOXYLIC_ACID_CATABOLIC_PROCESS 105 | GOBP_MONOCARBOXYLIC_ACID_METABOLIC_PROCESS 106 | GOBP_MUCOPOLYSACCHARIDE_METABOLIC_PROCESS 107 | GOBP_N_ACETYLGLUCOSAMINE_METABOLIC_PROCESS 108 | GOBP_NEGATIVE_REGULATION_OF_BIOSYNTHETIC_PROCESS 109 | GOBP_NEGATIVE_REGULATION_OF_CELLULAR_AMINE_METABOLIC_PROCESS 110 | GOBP_NEGATIVE_REGULATION_OF_COLLAGEN_METABOLIC_PROCESS 111 | GOBP_NEGATIVE_REGULATION_OF_GLUCOCORTICOID_METABOLIC_PROCESS 112 | GOBP_NEGATIVE_REGULATION_OF_LIPID_CATABOLIC_PROCESS 113 | GOBP_NEGATIVE_REGULATION_OF_LIPID_METABOLIC_PROCESS 114 | GOBP_NEGATIVE_REGULATION_OF_NUCLEOBASE_CONTAINING_COMPOUND_METABOLIC_PROCESS 115 | GOBP_NEGATIVE_REGULATION_OF_PHOSPHORUS_METABOLIC_PROCESS 116 | GOBP_NEGATIVE_REGULATION_OF_PROTEIN_CATABOLIC_PROCESS 117 | GOBP_NEGATIVE_REGULATION_OF_TRIGLYCERIDE_CATABOLIC_PROCESS 118 | GOBP_NEGATIVE_REGULATION_OF_TRIGLYCERIDE_METABOLIC_PROCESS 119 | GOBP_NEGATIVE_REGULATION_OF_VITAMIN_D_BIOSYNTHETIC_PROCESS 120 | GOBP_NONRIBOSOMAL_PEPTIDE_BIOSYNTHETIC_PROCESS 121 | GOBP_NOREPINEPHRINE_METABOLIC_PROCESS 122 | GOBP_NUCLEOBASE_CONTAINING_SMALL_MOLECULE_CATABOLIC_PROCESS 123 | GOBP_NUCLEOSIDE_CATABOLIC_PROCESS 124 | GOBP_NUCLEOSIDE_METABOLIC_PROCESS 125 | GOBP_OLEFINIC_COMPOUND_BIOSYNTHETIC_PROCESS 126 | GOBP_ONE_CARBON_METABOLIC_PROCESS 127 | GOBP_ORGANIC_ACID_BIOSYNTHETIC_PROCESS 128 | GOBP_ORGANIC_ACID_CATABOLIC_PROCESS 129 | GOBP_ORGANIC_ACID_METABOLIC_PROCESS 130 | GOBP_ORGANIC_CYCLIC_COMPOUND_CATABOLIC_PROCESS 131 | GOBP_OXALOACETATE_METABOLIC_PROCESS 132 | GOBP_PENTOSE_CATABOLIC_PROCESS 133 | GOBP_PHOSPHATIDYLINOSITOL_BIOSYNTHETIC_PROCESS 134 | GOBP_PHOSPHATIDYLINOSITOL_METABOLIC_PROCESS 135 | GOBP_POLYOL_BIOSYNTHETIC_PROCESS 136 | GOBP_POLYOL_CATABOLIC_PROCESS 137 | GOBP_POLYOL_METABOLIC_PROCESS 138 | GOBP_POSITIVE_REGULATION_OF_ATP_METABOLIC_PROCESS 139 | GOBP_POSITIVE_REGULATION_OF_COLLAGEN_METABOLIC_PROCESS 140 | GOBP_POSITIVE_REGULATION_OF_DNA_BIOSYNTHETIC_PROCESS 141 | GOBP_POSITIVE_REGULATION_OF_LIPID_METABOLIC_PROCESS 142 | GOBP_POSITIVE_REGULATION_OF_MHC_CLASS_I_BIOSYNTHETIC_PROCESS 143 | GOBP_POSITIVE_REGULATION_OF_NITRIC_OXIDE_SYNTHASE_BIOSYNTHETIC_PROCESS 144 | GOBP_POSITIVE_REGULATION_OF_NUCLEAR_TRANSCRIBED_MRNA_CATABOLIC_PROCESS_DEADENYLATION_DEPENDENT_DECAY 145 | GOBP_POSITIVE_REGULATION_OF_NUCLEOTIDE_BIOSYNTHETIC_PROCESS 146 | GOBP_POSITIVE_REGULATION_OF_NUCLEOTIDE_METABOLIC_PROCESS 147 | GOBP_POSITIVE_REGULATION_OF_PHOSPHORUS_METABOLIC_PROCESS 148 | GOBP_POSITIVE_REGULATION_OF_RECEPTOR_CATABOLIC_PROCESS 149 | GOBP_POSITIVE_REGULATION_OF_UNSATURATED_FATTY_ACID_BIOSYNTHETIC_PROCESS 150 | GOBP_PRIMARY_ALCOHOL_BIOSYNTHETIC_PROCESS 151 | GOBP_PRIMARY_AMINO_COMPOUND_BIOSYNTHETIC_PROCESS 152 | GOBP_PROTEOGLYCAN_BIOSYNTHETIC_PROCESS 153 | GOBP_PROTEOGLYCAN_METABOLIC_PROCESS 154 | GOBP_PUTRESCINE_BIOSYNTHETIC_PROCESS 155 | GOBP_PYRIMIDINE_CONTAINING_COMPOUND_CATABOLIC_PROCESS 156 | GOBP_PYRIMIDINE_CONTAINING_COMPOUND_METABOLIC_PROCESS 157 | GOBP_PYRIMIDINE_DEOXYRIBONUCLEOTIDE_METABOLIC_PROCESS 158 | GOBP_PYRIMIDINE_NUCLEOSIDE_CATABOLIC_PROCESS 159 | GOBP_PYRIMIDINE_NUCLEOSIDE_METABOLIC_PROCESS 160 | GOBP_PYRIMIDINE_NUCLEOTIDE_CATABOLIC_PROCESS 161 | GOBP_PYRIMIDINE_NUCLEOTIDE_METABOLIC_PROCESS 162 | GOBP_REACTIVE_OXYGEN_SPECIES_BIOSYNTHETIC_PROCESS 163 | GOBP_REGULATION_OF_ALDOSTERONE_METABOLIC_PROCESS 164 | GOBP_REGULATION_OF_ANAPHASE_PROMOTING_COMPLEX_DEPENDENT_CATABOLIC_PROCESS 165 | GOBP_REGULATION_OF_COLLAGEN_METABOLIC_PROCESS 166 | GOBP_REGULATION_OF_GLUCOCORTICOID_BIOSYNTHETIC_PROCESS 167 | GOBP_REGULATION_OF_GLUCOCORTICOID_METABOLIC_PROCESS 168 | GOBP_REGULATION_OF_KETONE_BIOSYNTHETIC_PROCESS 169 | GOBP_REGULATION_OF_PHOSPHATIDYLINOSITOL_BIOSYNTHETIC_PROCESS 170 | GOBP_REGULATION_OF_PHOSPHORUS_METABOLIC_PROCESS 171 | GOBP_REGULATION_OF_SECONDARY_METABOLIC_PROCESS 172 | GOBP_REGULATION_OF_STEROID_HORMONE_BIOSYNTHETIC_PROCESS 173 | GOBP_REGULATION_OF_TRIGLYCERIDE_CATABOLIC_PROCESS 174 | GOBP_RIBONUCLEOSIDE_CATABOLIC_PROCESS 175 | GOBP_RIBONUCLEOSIDE_METABOLIC_PROCESS 176 | GOBP_S_ADENOSYLMETHIONINE_METABOLIC_PROCESS 177 | GOBP_SCF_DEPENDENT_PROTEASOMAL_UBIQUITIN_DEPENDENT_PROTEIN_CATABOLIC_PROCESS 178 | GOBP_SERINE_FAMILY_AMINO_ACID_BIOSYNTHETIC_PROCESS 179 | GOBP_SERINE_FAMILY_AMINO_ACID_METABOLIC_PROCESS 180 | GOBP_SHORT_CHAIN_FATTY_ACID_CATABOLIC_PROCESS 181 | GOBP_SHORT_CHAIN_FATTY_ACID_METABOLIC_PROCESS 182 | GOBP_SMALL_MOLECULE_CATABOLIC_PROCESS 183 | GOBP_SUCCINATE_METABOLIC_PROCESS 184 | GOBP_SULFUR_AMINO_ACID_BIOSYNTHETIC_PROCESS 185 | GOBP_TETRAHYDROFOLATE_BIOSYNTHETIC_PROCESS 186 | GOBP_TETRAHYDROFOLATE_METABOLIC_PROCESS 187 | GOBP_THIOESTER_BIOSYNTHETIC_PROCESS 188 | GOBP_THIOESTER_METABOLIC_PROCESS 189 | GOBP_TOXIN_METABOLIC_PROCESS 190 | GOBP_TRYPTOPHAN_CATABOLIC_PROCESS 191 | GOBP_TRYPTOPHAN_CATABOLIC_PROCESS_TO_KYNURENINE 192 | GOBP_UBIQUITIN_DEPENDENT_SMAD_PROTEIN_CATABOLIC_PROCESS 193 | GOBP_URATE_METABOLIC_PROCESS 194 | GOBP_VERY_LONG_CHAIN_FATTY_ACID_CATABOLIC_PROCESS 195 | GOBP_VERY_LONG_CHAIN_FATTY_ACID_METABOLIC_PROCESS 196 | GOBP_WATER_SOLUBLE_VITAMIN_BIOSYNTHETIC_PROCESS 197 | GOBP_XENOBIOTIC_METABOLIC_PROCESS 198 | GOCC_UBIQUINONE_BIOSYNTHESIS_COMPLEX 199 | REACTOME_GLUCAGON_SIGNALING_IN_METABOLIC_REGULATION 200 | -------------------------------------------------------------------------------- /Figure 3/differential analysis of metabolites.R: -------------------------------------------------------------------------------- 1 | # calculate mean value of metabolites in each IM subgroups 2 | data_df <- t(matrix_meta[,tumor]) %>% as.data.frame() 3 | 4 | data_df$group <- sample_info[rownames(data_df),]$class 5 | 6 | group_means <- aggregate(. ~ group, data_df, mean) 7 | 8 | result_mat <- data.frame(group_means[-1]) %>% t() 9 | colnames(result_mat) <- group_means$group 10 | rownames(result_mat) <- rownames(matrix_meta) 11 | 12 | IM3_meta <- c("Glucose 6-phosphate","D-fructose 6-phosphate", 13 | "Xanthosine","Guanosine","Guanosine 3'-phosphate","Inosine","IDP", 14 | "dCMP","Hypoxanthine",#"UDP-L-rhamnose","CDP-glucose", 15 | "LysoPC(20:4(8Z,11Z,14Z,17Z)/0:0)","LysoPC(22:6(4Z,7Z,10Z,13Z,16Z,19Z)/0:0)", 16 | "LysoPC(22:5(4Z,7Z,10Z,13Z,16Z)/0:0)","LysoPC(18:2(9Z,12Z))","PC(16:1(9Z)/0:0)", 17 | "PC(22:4(7Z,10Z,13Z,16Z)/0:0)" 18 | ) 19 | 20 | row_anno <- data.frame(c(rep("glycolysis",2),rep("pyrimidine derivatives",7),rep("Glycerophospholipids",6))) 21 | colnames(row_anno) <- "class" 22 | rownames(row_anno) <- IM3_meta 23 | cl_right <- list(class=c("glycolysis"="#8DD3C7","pyrimidine derivatives"="#BEBADA","Glycerophospholipids"="#FB8072")) 24 | right_anno <- rowAnnotation(df=row_anno,col = cl_right,show_legend = T) 25 | 26 | data <- matrix_meta[IM3_meta,tumor] %>% as.matrix() 27 | groups <- sample_info$class 28 | 29 | p_values <- matrix(NA, nrow = nrow(data), ncol = 4) 30 | 31 | for (i in 1:4) { 32 | p_value <- apply(data, 1, function(x) { 33 | wilcox.test(x[groups == unique(groups)[i]], x[groups != unique(groups)[i]])$p.value 34 | }) 35 | p_value <- p.adjust(p_value,"BH") 36 | p_values[,i] <- p_value 37 | 38 | } 39 | colnames(p_values) <- unique(groups) 40 | rownames(p_values) <- rownames(data) 41 | 42 | b <- p_values[IM3_meta,] 43 | 44 | b = ifelse(b >= 0.05, "", 45 | ifelse(b<0.0001,"****", 46 | ifelse(b<0.001,"***", 47 | ifelse(b<0.01,"**", 48 | ifelse(b < 0.05,"*",""))))) 49 | 50 | bk=c(seq(-2,0,by=0.01),seq(0,2,by=0.01)) 51 | 52 | ################### Figure 3E ###################### 53 | pheatmap(t(scale(t(result_mat[IM3_meta,]))), border_color = "NA", fontsize = 9,cellheight = 15,cellwidth = 20, 54 | display_numbers = b,number_color="black",fontsize_number=10, 55 | cluster_col=F, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 56 | annotation_row = row_anno,annotation_colors = cl_right, 57 | color = c(colorRampPalette(colors = col[1:6])(length(bk)/2), 58 | colorRampPalette(colors = col[6:11])(length(bk)/2))) 59 | -------------------------------------------------------------------------------- /Figure 3/ssgsea analysis.R: -------------------------------------------------------------------------------- 1 | ############extract 4 metabolic-associated GO modules ################# 2 | #################### Extended Data Figure 5A ####################### 3 | 4 | metabolic <- fread("./metabolic_selected.txt") 5 | 6 | GO2 <- rbind(res_h_RNA,res2_RNA,res5_RNA)[metabolic$GO_terms,tumor] 7 | GO2 <- t(scale(t(GO2))) 8 | 9 | top_anno <- HeatmapAnnotation(df =sample_info[,c(1:2,6:19)], 10 | col = cl_col,show_legend = T) 11 | 12 | col <- brewer.pal(11,"RdBu")[11:1] 13 | heat2 <- Heatmap(GO2[,], 14 | col = colorRamp2(seq(-2,2,length.out = 11),col), 15 | cluster_rows = T, 16 | cluster_columns = T, 17 | show_column_names = F, 18 | show_row_names = F, 19 | use_raster=F, 20 | border = "BLACK", 21 | show_row_dend = T, 22 | row_gap = unit(1, "mm"), 23 | column_split = cluster_info2[tumor,]$class, 24 | row_split = 4, 25 | column_gap = unit(1, "mm"), 26 | top_annotation = top_anno, 27 | column_title = NULL) 28 | heat2 29 | 30 | 31 | #############select pyrimidine realated GO terms ############### 32 | #################### Extended Data Figure 3A ####################### 33 | 34 | GO3 <- GO2[c(grep("NUCLEOSIDE",metabolic$GO_terms,value = T),grep("PYRIMIDINE",metabolic$GO_terms,value = T), 35 | grep("CYTIDINE",metabolic$GO_terms,value = T)),tumor] 36 | 37 | GO3 <- GO3[!duplicated(rownames(GO3)),] 38 | row.names(GO3) <- tolower(row.names(GO3)) 39 | row.names(GO3) <- gsub("_"," ",row.names(GO3)) 40 | row.names(GO3) <- gsub("gobp","",row.names(GO3)) 41 | 42 | heat2 <- Heatmap(GO3, 43 | col = colorRamp2(seq(-2,2,length.out = 11),col), 44 | cluster_rows = T, 45 | cluster_columns = T, 46 | show_column_names = F, 47 | show_row_names = T, 48 | use_raster=F, 49 | show_row_dend = T, 50 | clustering_method_rows = "ward.D", 51 | clustering_method_columns = "ward.D", 52 | row_gap = unit(1, "mm"), 53 | column_gap = unit(1, "mm"), 54 | top_annotation = top_anno, 55 | column_title = NULL) 56 | heat2 57 | 58 | ############# comparison of RNA-seq and proteomics ############# 59 | ######################### Figure 3B ############################ 60 | 61 | ssgsea_IM3_diff <- fread("./IM3_ssgsea_diff.txt") %>% as.data.frame()###load organized data 62 | 63 | rownames(dotplot) <- tolower(rownames(dotplot)) 64 | 65 | pathway <- c(grep("gobp",rownames(dotplot),value = T),grep("kegg",rownames(dotplot),value = T), 66 | grep("reactome",rownames(dotplot),value = T),grep("hallmark",rownames(dotplot),value = T)) 67 | dotplot <- dotplot[pathway,] 68 | dotplot$color <- "others" 69 | dotplot$pathway <- rownames(dotplot) 70 | ssgsea_IM3_diff$color[grep("nucleoside",ssgsea_IM3_diff$pathway)]="nucleoside" 71 | ssgsea_IM3_diff$color[grep("cytidine",ssgsea_IM3_diff$pathway)]="cytidine" 72 | ssgsea_IM3_diff$color[grep("pyrimidine",ssgsea_IM3_diff$pathway)]="pyrimidine" 73 | ssgsea_IM3_diff <- ssgsea_IM3_diff[order(ssgsea_IM3_diff$color,decreasing = T),] 74 | ggplot(ssgsea_IM3_diff,aes(ssgsea_IM3_diff$proteomics,ssgsea_IM3_diff$transcriptome,color=color))+ 75 | geom_point(size=1)+ggthemes::theme_base()+ 76 | scale_color_manual(values = c("#E64B35FF", "#3C5488FF","grey", "#00A087FF"))+ 77 | ylim(-11.2,11.2)+ylab("T-value (transcriptome)")+xlab("T-value (proteome)")+ 78 | geom_vline(xintercept = 0)+geom_hline(yintercept = 0) 79 | 80 | 81 | data_box <- rbind(res_h_RNA,res2_RNA,res5_RNA)[c("GOBP_GLUCOSE_6_PHOSPHATE_METABOLIC_PROCESS", 82 | "WP_GLYCEROPHOSPHOLIPID_BIOSYNTHETIC_PATHWAY"),tumor] %>% t() %>% as.data.frame() 83 | data_box$IM_subtype <- sample_info[tumor,]$class 84 | 85 | 86 | ###################### Figure 3F-1 ############################ 87 | 88 | # on-way ANOVA analysis 89 | aov_res <- aov(GOBP_GLUCOSE_6_PHOSPHATE_METABOLIC_PROCESS ~ IM_subtype, data = data_box) 90 | summary(aov_res) 91 | 92 | # If one-way ANOVA p-value < 0.05, then perform pairwise comparison with Tukey HSD test 93 | tukey_res <- TukeyHSD(aov_res) 94 | tukey_df <- data.frame(tukey_res$IM_subtype) 95 | 96 | signif_df <- data.frame( 97 | xstart = as.numeric(gsub("-.*", "", rownames(tukey_df))), 98 | xend = as.numeric(gsub(".*-", "", rownames(tukey_df))), 99 | annotations = ifelse(tukey_df$p.adj >= 0.05, "", 100 | ifelse(tukey_df$p.adj<0.001,"***", 101 | ifelse(tukey_df$p.adj<0.01,"**", 102 | ifelse(tukey_df$p.adj < 0.05,"*","")))) # text of the label 103 | ) 104 | signif_df <- signif_df[signif_df$annotations!="",] 105 | 106 | ggplot(data_box,aes(IM_subtype,GOBP_GLUCOSE_6_PHOSPHATE_METABOLIC_PROCESS,fill=IM_subtype,color=IM_subtype))+ 107 | geom_boxplot(outlier.colour = NA,size=1)+geom_jitter(size=1.5,aes(color=IM_subtype))+theme_bw()+ 108 | scale_fill_manual(values = alpha(class,0)) + scale_color_manual(values = class)+ #ylim(0,40) + 109 | theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 110 | labs(y="Normalized level") + 111 | theme( 112 | panel.border = element_rect(colour = "black",size=1), 113 | plot.title = element_text(hjust = 0.5), 114 | axis.line = element_line(colour = "black",size=0.5), 115 | axis.title.y=element_text(size=14),axis.text.y=element_text(size=14), 116 | axis.title.x=element_blank(),axis.text.x=element_text(size=12) 117 | ) + ggtitle("Glucose-6-phosphate (G6P) metabolic process")+ 118 | geom_signif(annotations = signif_df$annotations, 119 | y_position = c(0.24,0.26,0.28,0.3), 120 | xmin = signif_df$xstart, 121 | xmax = signif_df$xend,color="black") 122 | 123 | ###################### Figure 3F-2 was drawn with the same code ############################ 124 | -------------------------------------------------------------------------------- /Figure 3/visulization of spatial metabolomics.R: -------------------------------------------------------------------------------- 1 | library(Cardinal) 2 | library(ggpubr) 3 | library(ggsci) 4 | library(ggrepel) 5 | 6 | ############## Figure 3H ############### 7 | #Spatial metabolomics visualization was conducted for each individual sample. We illustrate this process using the example of R29_T 8 | ##ImzML files are all accessible at zenodo and Mendeley 9 | 10 | R29_T_neg <- readImzML(name="R29-T-neg", folder = "./") 11 | image(R29_T_neg,mz=132.0302, normalize.image="none",colorscale=c(rep("black",2),col.map("jet",n=99)), 12 | contrast.enhance="histogram",smooth.image = "gaussian") 13 | dev.off() 14 | 15 | R29_T_pos <- readImzML(name="R29-T-pos", folder = "./") 16 | 17 | image(R29_T_pos,mz=137.04581, normalize.image="none",colorscale=c(rep("black",2),col.map("jet",n=99)), 18 | contrast.enhance="histogram",smooth.image = "gaussian") 19 | -------------------------------------------------------------------------------- /Figure 4/Processing snRNA-seq data of NATs.R: -------------------------------------------------------------------------------- 1 | library(dplyr) 2 | library(ggplot2) 3 | library(cowplot) 4 | library(harmony) 5 | library(Seurat) 6 | library(ggsci) 7 | library(Rcpp) 8 | library(RColorBrewer) 9 | options(stringsAsFactors = F) 10 | 11 | snRNA_NAT <- readRDS("./normal_snRNA.rds") 12 | 13 | snRNA_NAT@meta.data$nUMI <- snRNA_NAT@meta.data$nCount_RNA 14 | snRNA_NAT@meta.data$nGene <- snRNA_NAT@meta.data$nFeature_RNA 15 | 16 | 17 | mito.genes <- grep( 18 | pattern = "^MT-", 19 | x = rownames(x = snRNA_NAT@assays$RNA@data), 20 | value = TRUE) 21 | 22 | percent.mito <- Matrix::colSums(snRNA_NAT@assays$RNA@counts[mito.genes, ]) / Matrix::colSums(snRNA_NAT@assays$RNA@counts) 23 | 24 | snRNA_NAT <- AddMetaData( 25 | object = snRNA_NAT, 26 | metadata = percent.mito, 27 | col.name = "percent.mito") 28 | VlnPlot(snRNA_NAT, c("nUMI","nGene","percent.mito"), group.by = "sample",pt.size = 0) 29 | 30 | snRNA_NAT <- subset(snRNA_NAT, subset = percent.mito < 0.05) 31 | snRNA_NAT <- subset(snRNA_NAT, subset = n_genes > 500) 32 | snRNA_NAT <- subset(snRNA_NAT, subset = nUMI > 1000) 33 | 34 | snRNA_NAT <- snRNA_NATizeData(snRNA_NAT) 35 | 36 | snRNA_NAT <- FindVariableFeatures(snRNA_NAT, nfeatures = 3000) 37 | VariableFeaturePlot(snRNA_NAT) 38 | snRNA_NAT <- ScaleData(snRNA_NAT, verbose = T) 39 | snRNA_NAT <- RunPCA(snRNA_NAT, npcs = 50, verbose = FALSE) 40 | PCAPlot(snRNA_NAT) 41 | ElbowPlot(snRNA_NAT, ndims = 50) 42 | snRNA_NAT <- RunHarmony(snRNA_NAT, c("sample")) 43 | snRNA_NAT <- FindNeighbors(snRNA_NAT, reduction = "harmony", dims = 1:50, do.plot = T) 44 | snRNA_NAT <- FindClusters(snRNA_NAT, resolution = 1) 45 | 46 | snRNA_NAT <- RunUMAP(snRNA_NAT, reduction = "harmony", dims = 1:50, n.components = 2) 47 | 48 | p1 <- DimPlot(snRNA_NAT, reduction = "umap", group.by = "sample",cols = celltype, label = TRUE)+ NoLegend() 49 | p2 <- DimPlot(snRNA_NAT, reduction = "umap", group.by = "RNA_snn_res.1", cols = celltype, pt.size = 0.4, 50 | label = TRUE,raster = F) + NoLegend() 51 | plot_grid(p1,p2) 52 | 53 | snRNA_NAT <- CellCycleScoring(snRNA_NAT, g2m.features = cc.genes$g2m.genes, 54 | s.features = cc.genes$s.genes) 55 | 56 | celltype <- c(brewer.pal(11,"Set3")[c(1,3:8,10:11)],pal_npg(alpha = 0.7)(9), 57 | brewer.pal(11,"Paired")[11:1],brewer.pal(8,"Set1")[8:1], 58 | brewer.pal(8,"Set2"))#[13:1] 59 | 60 | ############ Extended Data Figure 6B ################## 61 | DimPlot(snRNA_NAT, reduction = "umap", group.by = "celltype2", label = T, repel = TRUE, 62 | cols = celltype, pt.size =0.4, 63 | ) 64 | 65 | ############# scoring 4 modules in snRNA-seq data ################## 66 | 67 | genelist <- list(module1=genelist_Figure4a[a[[1]]], 68 | module2=genelist_Figure4a[a[[2]]], 69 | module3=genelist_Figure4a[a[[3]]], 70 | module4=genelist_Figure4a[a[[4]]],)#a is the row cluster tree of Figure 4a 71 | 72 | snRNA_NAT <- AddModuleScore(snRNA_NAT,genelist) 73 | 74 | ############ Extended Data Figure 6D ################## 75 | FeaturePlot(snRNA_NAT, c("Cluster1","Cluster2","Cluster3","Cluster4"), 76 | raster=F,max.cutoff = "q99", min.cutoff = "q0", 77 | cols = c("grey85",brewer.pal(9,"YlOrRd")[-1]),reduction = "umap", slot = "data") 78 | 79 | 80 | library(COSG) 81 | 82 | snRNA_NAT <- SetIdent(snRNA_NAT, cells = NULL, 83 | value = snRNA_NAT@meta.data$celltype2) 84 | 85 | marker_cosg <- cosg( 86 | snRNA_NAT, 87 | groups='all', 88 | assay='RNA', 89 | slot='data', 90 | mu=1, 91 | n_genes_user=5) 92 | 93 | head(marker_cosg$names) 94 | marker=marker_cosg$names 95 | marker <- marker[,order(colnames(marker))] 96 | 97 | ############ Extended Data Figure 6C ################## 98 | 99 | col <- viridis::viridis(11,option = "A") 100 | A <- DotPlot(object = snRNA_NAT, features = unique(as.character(as.matrix(marker))), 101 | group.by = "celltype3")+scale_color_gradientn(colours = col) 102 | A + ggthemes::theme_base() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) 103 | -------------------------------------------------------------------------------- /Figure 4/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 4 and Extended Data Figure 6. bulk_analysis.R contains code for Fig. 4a-4b,4f and 4h. Processing snRNA-seq data of NATs.R contains code for eFig 6b-6d. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 4/Source Data /genelist_Figure4a.txt: -------------------------------------------------------------------------------- 1 | "x" 2 | "1" "HTRA3" 3 | "2" "MOCOS" 4 | "3" "DIO2" 5 | "4" "PLEKHG4B" 6 | "5" "IGFN1" 7 | "6" "TRIB3" 8 | "7" "SPOCD1" 9 | "8" "SPOCK1" 10 | "9" "RAB3B" 11 | "10" "RAB42" 12 | "11" "RAB6B" 13 | "12" "PSAT1" 14 | "13" "DNER" 15 | "14" "CDCP1" 16 | "15" "SLC12A8" 17 | "16" "ITPKA" 18 | "17" "SEMA3C" 19 | "18" "SEMA4B" 20 | "19" "CHST1" 21 | "20" "WDR86" 22 | "21" "MAP3K15" 23 | "22" "AMIGO2" 24 | "23" "APCDD1L" 25 | "24" "TRNP1" 26 | "25" "KLHDC8A" 27 | "26" "KIF26B" 28 | "27" "MRC2" 29 | "28" "CACNB3" 30 | "29" "KIF18B" 31 | "30" "MT1X" 32 | "31" "OLFML3" 33 | "32" "TENM3" 34 | "33" "MXRA8" 35 | "34" "SPTBN2" 36 | "35" "TNNT1" 37 | "36" "NT5DC2" 38 | "37" "SLC18A3" 39 | "38" "TRIM46" 40 | "39" "RIN1" 41 | "40" "SLC17A9" 42 | "41" "WISP2" 43 | "42" "IRS2" 44 | "43" "NAV1" 45 | "44" "NAV3" 46 | "45" "ROS1" 47 | "46" "AHNAK2" 48 | "47" "NEFL" 49 | "48" "KCND1" 50 | "49" "KCNQ3" 51 | "50" "KCNS3" 52 | "51" "CARD14" 53 | "52" "CARD11" 54 | "53" "SPINK13" 55 | "54" "ELL2" 56 | "55" "RFLNA" 57 | "56" "RTL1" 58 | "57" "FAM20A" 59 | "58" "ADD2" 60 | "59" "C10orf99" 61 | "60" "LRRC8E" 62 | "61" "PTHLH" 63 | "62" "BACE2" 64 | "63" "RYR2" 65 | "64" "LYPD1" 66 | "65" "JAK3" 67 | "66" "DCBLD2" 68 | "67" "C6orf141" 69 | "68" "HMGA2" 70 | "69" "CCDC91" 71 | "70" "MUC12" 72 | "71" "ADGRG2" 73 | "72" "SAA1" 74 | "73" "SAA2" 75 | "74" "IGDCC4" 76 | "75" "IL20RB" 77 | "76" "AMZ1" 78 | "77" "KDELR3" 79 | "78" "ANLN" 80 | "79" "PTPRN" 81 | "80" "PTPRH" 82 | "81" "IMPDH1" 83 | "82" "SCG2" 84 | "83" "AC068580.4" 85 | "84" "NPTX2" 86 | "85" "PCBP3" 87 | "86" "PLPPR4" 88 | "87" "TFAP2A" 89 | "88" "PYCR1" 90 | "89" "JPH2" 91 | "90" "SOX11" 92 | "91" "STEAP3" 93 | "92" "DPYSL3" 94 | "93" "BTBD11" 95 | "94" "GRIK4" 96 | "95" "SLC4A3" 97 | "96" "FHL2" 98 | "97" "FHL3" 99 | "98" "BMPR1B" 100 | "99" "SLC2A1" 101 | "100" "TBX15" 102 | "101" "PLIN3" 103 | "102" "SLC35F3" 104 | "103" "SLITRK2" 105 | "104" "EPHA10" 106 | "105" "GPR173" 107 | "106" "RGS17" 108 | "107" "SPHK1" 109 | "108" "SYBU" 110 | "109" "SLC38A5" 111 | "110" "PPP1R1A" 112 | "111" "KIF2A" 113 | "112" "PRIMA1" 114 | "113" "PLPP2" 115 | "114" "CERCAM" 116 | "115" "ZFHX4" 117 | "116" "SPSB1" 118 | "117" "GALNT17" 119 | "118" "GAD1" 120 | "119" "HOXD11" 121 | "120" "HOXD10" 122 | "121" "SYT12" 123 | "122" "CACNA1H" 124 | "123" "PLXNB3" 125 | "124" "B3GALT5" 126 | "125" "SORCS2" 127 | "126" "KNDC1" 128 | "127" "RUNX2" 129 | "128" "UCHL1" 130 | "129" "B4GALNT4" 131 | "130" "SPINK1" 132 | "131" "NPEPL1" 133 | "132" "MLLT11" 134 | "133" "ZNF703" 135 | "134" "KRT19" 136 | "135" "KRT17" 137 | "136" "KRT80" 138 | "137" "TSKU" 139 | "138" "FAM78B" 140 | "139" "ZNF365" 141 | "140" "TMEM132A" 142 | "141" "SPRED3" 143 | "142" "LRRC3" 144 | "143" "CDH3" 145 | "144" "PKP3" 146 | "145" "BCAT1" 147 | "146" "PLP2" 148 | "147" "PODNL1" 149 | "148" "GRIN2D" 150 | "149" "GFPT2" 151 | "150" "B3GNT4" 152 | "151" "SCNN1G" 153 | "152" "PPP2R2C" 154 | "153" "PRAME" 155 | "154" "CLMP" 156 | "155" "ATP8A2" 157 | "156" "IGFBP1" 158 | "157" "ATP8B3" 159 | "158" "PSD3" 160 | "159" "SLC6A17" 161 | "160" "C1QL1" 162 | "161" "PREX2" 163 | "162" "CPA4" 164 | "163" "CFAP47" 165 | "164" "IGF2BP3" 166 | "165" "IGF2BP2" 167 | "166" "CPNE7" 168 | "167" "ACTN2" 169 | "168" "RARRES1" 170 | "169" "FAM167A" 171 | "170" "GXYLT2" 172 | "171" "GALNT2" 173 | "172" "MEX3B" 174 | "173" "GPRC5A" 175 | "174" "BAIAP2L1" 176 | "175" "N4BP3" 177 | "176" "MICAL2" 178 | "177" "CD276" 179 | "178" "C5orf46" 180 | "179" "HOXB9" 181 | "180" "NALCN" 182 | "181" "ALDH1L2" 183 | "182" "C16orf74" 184 | "183" "CHRDL2" 185 | "184" "DBN1" 186 | "185" "KIAA1644" 187 | "186" "ELFN2" 188 | "187" "GRAMD1B" 189 | "188" "ZBTB7C" 190 | "189" "TRAM2" 191 | "190" "SLC10A5" 192 | "191" "SLC10A2" 193 | "192" "HUNK" 194 | "193" "AR" 195 | "194" "C6" 196 | "195" "PABPC4L" 197 | "196" "KL" 198 | "197" "HYAL1" 199 | "198" "MEI4" 200 | "199" "RNF43" 201 | "200" "AVPR1B" 202 | "201" "NCR3LG1" 203 | "202" "DLG2" 204 | "203" "SLC7A9" 205 | "204" "SLC5A12" 206 | "205" "SLC5A10" 207 | "206" "MGAM" 208 | "207" "SLC13A1" 209 | "208" "FBXL16" 210 | "209" "RAB19" 211 | "210" "RAB17" 212 | "211" "PANK1" 213 | "212" "TRHDE" 214 | "213" "SH3BGRL2" 215 | "214" "PAQR5" 216 | "215" "SERPINA6" 217 | "216" "MIOX" 218 | "217" "CHRM3" 219 | "218" "SEMA6A" 220 | "219" "HYDIN" 221 | "220" "SEMA3D" 222 | "221" "DPYS" 223 | "222" "CHST9" 224 | "223" "GAREM1" 225 | "224" "WDR31" 226 | "225" "WDR17" 227 | "226" "LARGE2" 228 | "227" "DDAH1" 229 | "228" "CDH16" 230 | "229" "PPARGC1A" 231 | "230" "CXCL14" 232 | "231" "GLIS1" 233 | "232" "DSEL" 234 | "233" "CDHR2" 235 | "234" "ZDHHC11B" 236 | "235" "AIF1L" 237 | "236" "L2HGDH" 238 | "237" "ECHDC3" 239 | "238" "VIL1" 240 | "239" "FLRT3" 241 | "240" "MPC2" 242 | "241" "TRPA1" 243 | "242" "KLHDC7A" 244 | "243" "TRPM3" 245 | "244" "PTGER3" 246 | "245" "MPP6" 247 | "246" "TRPV4" 248 | "247" "SMTNL2" 249 | "248" "TMEM72" 250 | "249" "TMEM27" 251 | "250" "UNC5D" 252 | "251" "FAXDC2" 253 | "252" "DZIP3" 254 | "253" "MSRA" 255 | "254" "RAI2" 256 | "255" "RBP5" 257 | "256" "DSCAML1" 258 | "257" "A1CF" 259 | "258" "TMEM171" 260 | "259" "TMEM174" 261 | "260" "ILDR2" 262 | "261" "VIPR1" 263 | "262" "DDIT4L" 264 | "263" "TMEM139" 265 | "264" "TMEM125" 266 | "265" "SAMD5" 267 | "266" "DMGDH" 268 | "267" "KCTD16" 269 | "268" "TMEM252" 270 | "269" "TMEM246" 271 | "270" "TMEM220" 272 | "271" "PLEKHH2" 273 | "272" "MYL3" 274 | "273" "HSD11B2" 275 | "274" "MYOT" 276 | "275" "PLEKHA7" 277 | "276" "RGS9" 278 | "277" "STK32B" 279 | "278" "SNX30" 280 | "279" "RIDA" 281 | "280" "RIC3" 282 | "281" "AMDHD1" 283 | "282" "TRIM55" 284 | "283" "CABLES1" 285 | "284" "TRIM15" 286 | "285" "TRIM10" 287 | "286" "RIT1" 288 | "287" "GLYAT" 289 | "288" "SLC17A1" 290 | "289" "SLC17A2" 291 | "290" "SLC17A3" 292 | "291" "SLC17A4" 293 | "292" "STXBP1" 294 | "293" "EDN1" 295 | "294" "EDN2" 296 | "295" "ERICH5" 297 | "296" "SLC16A9" 298 | "297" "IQUB" 299 | "298" "IRF6" 300 | "299" "IRX3" 301 | "300" "AKR7A3" 302 | "301" "NAT8" 303 | "302" "CYP2J2" 304 | "303" "HHLA2" 305 | "304" "RORC" 306 | "305" "SPTLC3" 307 | "306" "ACSM2A" 308 | "307" "ACSM2B" 309 | "308" "CYP4V2" 310 | "309" "KLF15" 311 | "310" "CRHBP" 312 | "311" "NEBL" 313 | "312" "NEK5" 314 | "313" "KCNK5" 315 | "314" "KCNJ3" 316 | "315" "PKHD1" 317 | "316" "FRMPD2" 318 | "317" "NFIA" 319 | "318" "FAM47E" 320 | "319" "PAIP2B" 321 | "320" "ATP13A4" 322 | "321" "EML6" 323 | "322" "NGFR" 324 | "323" "EMX2" 325 | "324" "SLC47A1" 326 | "325" "ASRGL1" 327 | "326" "OGDHL" 328 | "327" "ACE2" 329 | "328" "ACY3" 330 | "329" "ADH6" 331 | "330" "KANSL1L" 332 | "331" "SOWAHB" 333 | "332" "PTH1R" 334 | "333" "PTH2R" 335 | "334" "LRRC19" 336 | "335" "USH1C" 337 | "336" "AJAP1" 338 | "337" "PDZRN3" 339 | "338" "ESPN" 340 | "339" "MYH14" 341 | "340" "ERBB3" 342 | "341" "ERBB2" 343 | "342" "PRODH2" 344 | "343" "MYLK4" 345 | "344" "RIMKLA" 346 | "345" "NPR3" 347 | "346" "RAB3IP" 348 | "347" "KCNJ15" 349 | "348" "KCNJ16" 350 | "349" "PPARG" 351 | "350" "CENPV" 352 | "351" "NRG1" 353 | "352" "MYO3A" 354 | "353" "MYO7B" 355 | "354" "MYO9A" 356 | "355" "ALPL" 357 | "356" "ALPI" 358 | "357" "CYP4A22" 359 | "358" "CYP4A11" 360 | "359" "EYA4" 361 | "360" "SLC44A3" 362 | "361" "SLC44A4" 363 | "362" "AMOT" 364 | "363" "CABP1" 365 | "364" "MRPL50" 366 | "365" "PTPN3" 367 | "366" "SPATA18" 368 | "367" "ANO4" 369 | "368" "SPATA6L" 370 | "369" "AOC1" 371 | "370" "SCGN" 372 | "371" "AOX1" 373 | "372" "PRKAA2" 374 | "373" "CERKL" 375 | "374" "APOM" 376 | "375" "AQP7" 377 | "376" "MYRFL" 378 | "377" "CRYL1" 379 | "378" "MYRIP" 380 | "379" "RAP1GAP" 381 | "380" "MYOCOS" 382 | "381" "KLHL32" 383 | "382" "SLCO4C1" 384 | "383" "ASPG" 385 | "384" "ASPA" 386 | "385" "NLGN1" 387 | "386" "FAAH" 388 | "387" "EHHADH" 389 | "388" "EPB41L5" 390 | "389" "PIP5K1B" 391 | "390" "FAT4" 392 | "391" "POU3F3" 393 | "392" "FBP1" 394 | "393" "OR2T10" 395 | "394" "OR2T11" 396 | "395" "FRMD1" 397 | "396" "FRMD3" 398 | "397" "BARX2" 399 | "398" "RASSF6" 400 | "399" "RASSF9" 401 | "400" "STEAP4" 402 | "401" "STEAP2" 403 | "402" "TNFRSF19" 404 | "403" "SLC3A1" 405 | "404" "SLC4A4" 406 | "405" "NUGGC" 407 | "406" "SLC51A" 408 | "407" "SLC5A8" 409 | "408" "SLC5A1" 410 | "409" "ELOVL7" 411 | "410" "CSDC2" 412 | "411" "GIPC2" 413 | "412" "PLCH1" 414 | "413" "SLC6A3" 415 | "414" "IMPA2" 416 | "415" "SOX6" 417 | "416" "OCLN" 418 | "417" "CASC1" 419 | "418" "ZNRF3" 420 | "419" "ASTN2" 421 | "420" "SLC22A12" 422 | "421" "SLC22A11" 423 | "422" "SLC22A24" 424 | "423" "ABCB1" 425 | "424" "FABP3" 426 | "425" "DIRAS2" 427 | "426" "SLC1A1" 428 | "427" "ENPEP" 429 | "428" "ABO" 430 | "429" "FMO2" 431 | "430" "AMN" 432 | "431" "AUH" 433 | "432" "HINT3" 434 | "433" "ABCG2" 435 | "434" "SLC2A2" 436 | "435" "SLC2A4" 437 | "436" "ABCC6" 438 | "437" "STUM" 439 | "438" "ENPP3" 440 | "439" "ENPP5" 441 | "440" "BSPRY" 442 | "441" "CGN" 443 | "442" "CIT" 444 | "443" "PLIN2" 445 | "444" "BCL2" 446 | "445" "ASXL3" 447 | "446" "CLEC18C" 448 | "447" "CLEC18B" 449 | "448" "CLEC18A" 450 | "449" "DAO" 451 | "450" "DDC" 452 | "451" "CSMD1" 453 | "452" "BDNF" 454 | "453" "SLITRK4" 455 | "454" "SLITRK5" 456 | "455" "SLC34A1" 457 | "456" "SLC16A12" 458 | "457" "F11" 459 | "458" "ANKS4B" 460 | "459" "ABHD6" 461 | "460" "BEX5" 462 | "461" "DHTKD1" 463 | "462" "GDA" 464 | "463" "SYT9" 465 | "464" "GHR" 466 | "465" "FAHD1" 467 | "466" "GPT" 468 | "467" "SLC39A5" 469 | "468" "FTCD" 470 | "469" "FAM189A1" 471 | "470" "SEPSECS" 472 | "471" "HLF" 473 | "472" "BHMT" 474 | "473" "HNF1B" 475 | "474" "HNF1A" 476 | "475" "HNF4A" 477 | "476" "G6PC" 478 | "477" "FUT6" 479 | "478" "IYD" 480 | "479" "ANKRD33B" 481 | "480" "DNALI1" 482 | "481" "SYDE2" 483 | "482" "KHK" 484 | "483" "SGSM1" 485 | "484" "LPL" 486 | "485" "MAL" 487 | "486" "FAM229B" 488 | "487" "DOC2A" 489 | "488" "MME" 490 | "489" "FZD1" 491 | "490" "SMIM24" 492 | "491" "SMIM32" 493 | "492" "TCN2" 494 | "493" "PAH" 495 | "494" "GABRB3" 496 | "495" "HMGCS2" 497 | "496" "RIPOR3" 498 | "497" "SCN4A" 499 | "498" "RGN" 500 | "499" "C4orf19" 501 | "500" "TFEC" 502 | "501" "GALNT15" 503 | "502" "SUCNR1" 504 | "503" "BBOX1" 505 | "504" "SPX" 506 | "505" "GATM" 507 | "506" "TUB" 508 | "507" "UBD" 509 | "508" "ESRRG" 510 | "509" "NECAB1" 511 | "510" "HOXC10" 512 | "511" "LIN7A" 513 | "512" "TSPAN12" 514 | "513" "SUGCT" 515 | "514" "TSPAN18" 516 | "515" "CACNA1D" 517 | "516" "TLN2" 518 | "517" "SORBS2" 519 | "518" "ANXA13" 520 | "519" "ATP7B" 521 | "520" "GGT1" 522 | "521" "HSDL2" 523 | "522" "ATOH8" 524 | "523" "PATJ" 525 | "524" "PAX2" 526 | "525" "METTL7A" 527 | "526" "DMRTA1" 528 | "527" "IL17RD" 529 | "528" "IL17RB" 530 | "529" "PBLD" 531 | "530" "PCK1" 532 | "531" "TOX3" 533 | "532" "GJB1" 534 | "533" "AGMAT" 535 | "534" "PDK4" 536 | "535" "PECR" 537 | "536" "ACAT1" 538 | "537" "ZNF711" 539 | "538" "ZNF704" 540 | "539" "ACADL" 541 | "540" "ACADM" 542 | "541" "ACAA2" 543 | "542" "TREH" 544 | "543" "ZNF385B" 545 | "544" "MARVELD2" 546 | "545" "GLDC" 547 | "546" "ZNF471" 548 | "547" "CASR" 549 | "548" "PHYHIPL" 550 | "549" "TMEM132E" 551 | "550" "FAM84B" 552 | "551" "PIGR" 553 | "552" "PIFO" 554 | "553" "LRRK2" 555 | "554" "IQSEC3" 556 | "555" "RUNDC3B" 557 | "556" "GPD1" 558 | "557" "ALKAL2" 559 | "558" "CDH9" 560 | "559" "GPX3" 561 | "560" "FOLR1" 562 | "561" "CDS1" 563 | "562" "AGTR1" 564 | "563" "SHMT1" 565 | "564" "PKLR" 566 | "565" "SLC23A3" 567 | "566" "CES3" 568 | "567" "FAM196B" 569 | "568" "PRUNE2" 570 | "569" "PLS1" 571 | "570" "C1orf115" 572 | "571" "RPS6KA6" 573 | "572" "SLC22A6" 574 | "573" "SLC22A2" 575 | "574" "SLC22A8" 576 | "575" "GSTA2" 577 | "576" "GSTA1" 578 | "577" "EXPH5" 579 | "578" "GLYATL1" 580 | "579" "C1orf210" 581 | "580" "CHDH" 582 | "581" "RNF152" 583 | "582" "ALDOB" 584 | "583" "MTMR10" 585 | "584" "SLC27A2" 586 | "585" "AGXT2" 587 | "586" "ACMSD" 588 | "587" "SLC26A1" 589 | "588" "SLC26A9" 590 | "589" "PDZK1" 591 | "590" "SLC25A4" 592 | "591" "CYB5A" 593 | "592" "PRKN" 594 | "593" "AKR1C1" 595 | "594" "PRLR" 596 | "595" "HOGA1" 597 | "596" "SLC6A19" 598 | "597" "SLC6A18" 599 | "598" "SLC6A13" 600 | "599" "SLC6A12" 601 | "600" "CMBL" 602 | "601" "GYPA" 603 | "602" "PDZD3" 604 | "603" "ACOX2" 605 | "604" "COBL" 606 | "605" "MACC1" 607 | "606" "LIPE" 608 | "607" "LIPC" 609 | "608" "SLC25A48" 610 | "609" "PRDX2" 611 | "610" "ACSS3" 612 | "611" "ACSM3" 613 | "612" "ACSM5" 614 | "613" "SULT1C4" 615 | "614" "HOOK1" 616 | "615" "UBXN10" 617 | "616" "CRY2" 618 | "617" "CRYM" 619 | "618" "CLDN10" 620 | "619" "CLDN2" 621 | "620" "CLDN3" 622 | "621" "HAO2" 623 | "622" "MLXIPL" 624 | "623" "ALPK2" 625 | "624" "CLCN5" 626 | "625" "LNX1" 627 | "626" "CUBN" 628 | "627" "C11orf54" 629 | "628" "FXYD2" 630 | "629" "PEG10" 631 | "630" "FBXL5" 632 | "631" "QRFPR" 633 | "632" "FGFR3" 634 | "633" "LRP2" 635 | "634" "BAIAP2L2" 636 | "635" "EPHA4" 637 | "636" "EPHA7" 638 | "637" "CCNG1" 639 | "638" "CCND1" 640 | "639" "CYS1" 641 | "640" "RRAGD" 642 | "641" "ACADSB" 643 | "642" "CLIC5" 644 | "643" "EPHX2" 645 | "644" "ALDH6A1" 646 | "645" "SHISA9" 647 | "646" "UPB1" 648 | "647" "ALDH8A1" 649 | "648" "MASP1" 650 | "649" "MAST4" 651 | "650" "FCAMR" 652 | "651" "MARC2" 653 | "652" "PRRG4" 654 | "653" "ALDH1L1" 655 | "654" "CTXND1" 656 | "655" "LYG1" 657 | "656" "KIAA1456" 658 | "657" "ADCY5" 659 | "658" "GPAT3" 660 | "659" "ALDH1A1" 661 | "660" "NAPSA" 662 | "661" "CCDC158" 663 | "662" "ARHGEF28" 664 | "663" "ARHGEF37" 665 | "664" "CCDC198" 666 | "665" "CCDC178" 667 | "666" "SLC28A1" 668 | "667" "ALDH3A2" 669 | "668" "UGT2A3" 670 | "669" "UGT2B7" 671 | "670" "GRAMD1C" 672 | "671" "UGT1A6" 673 | "672" "HRH2" 674 | "673" "MOB3B" 675 | "674" "UGT3A1" 676 | "675" "MAOA" 677 | "676" "MAP7" 678 | "677" "MAPT" 679 | -------------------------------------------------------------------------------- /Figure 4/Source Data /module3.txt: -------------------------------------------------------------------------------- 1 | ONTOLOGY ID Description GeneRatio BgRatio pvalue p.adjust qvalue geneID Count 2 | BP GO:1901605 alpha-amino acid metabolic process 18/164 195/18722 1.09E-13 2.43E-10 2.16E-10 RIDA/GPT/CRYM/PRODH2/FTCD/BHMT/GLYATL1/DDAH1/SHMT1/MSRA/PAH/DAO/IYD/ACADSB/AGMAT/ACAT1/GLDC/HOGA1 18 3 | BP GO:0006520 cellular amino acid metabolic process 20/164 284/18722 7.33E-13 3.53E-10 3.13E-10 RIDA/GPT/CRYM/PRODH2/FTCD/BHMT/DDC/GLYATL1/DDAH1/SHMT1/MSRA/PAH/DAO/IYD/ACADSB/ALDH6A1/AGMAT/ACAT1/GLDC/HOGA1 20 4 | BP GO:0043648 dicarboxylic acid metabolic process 9/164 96/18722 1.65E-07 4.58E-05 4.06E-05 PRODH2/FTCD/PCK1/ALDH1L1/FOLR1/SHMT1/L2HGDH/OGDHL/HOGA1 9 5 | BP GO:0006631 fatty acid metabolic process 14/164 390/18722 8.95E-06 0.001170175 0.001037828 PCK1/HAO2/CYP4A22/CYP4A11/CRYL1/ECHDC3/ACADM/FABP3/PPARGC1A/ACOX2/ACADSB/ACAT1/RGN/ACSM3 14 6 | BP GO:1902224 ketone body metabolic process 3/164 10/18722 7.57E-05 0.004802393 0.004259243 HMGCS2/ACSS3/ACAT1 3 7 | BP GO:0072521 purine-containing compound metabolic process 14/164 416/18722 1.84E-05 0.002048519 0.001816831 SLC26A1/PKLR/PDZD3/FBP1/HMGCS2/SHMT1/PANK1/PPARGC1A/DLG2/ALDOB/OGDHL/ACAT1/GPD1/ACSM3 14 8 | -------------------------------------------------------------------------------- /Figure 4/Source Data /module4.txt: -------------------------------------------------------------------------------- 1 | ONTOLOGY ID Description GeneRatio BgRatio pvalue p.adjust qvalue geneID Count 2 | BP GO:0046942 carboxylic acid transport 23/268 273/18722 9.90E-12 1.54E-08 1.33E-08 SLC17A4/EDN1/AVPR1B/SLC17A2/ACE2/SLC17A3/AKR1C1/SLC22A2/SLC3A1/SLC5A8/ABCG2/STXBP1/SLC10A2/SLC16A12/SLC1A1/MPC2/ABCC6/SLC47A1/LRP2/SLC6A13/SLC6A12/SLC51A/SLC10A5 23 3 | BP GO:0006631 fatty acid metabolic process 26/268 390/18722 8.15E-11 6.37E-08 5.49E-08 EDN1/CYP2J2/ACADL/ACSM5/ELOVL7/AKR1C1/GGT1/LPL/LIPC/PPARG/EDN2/SLC27A2/PDK4/EHHADH/PECR/PRKAA2/GSTA1/ACSM2A/ACSM2B/ABHD6/ALDH3A2/ACAA2/CYP4V2/AUH/MLXIPL/FAAH 26 4 | BP GO:0016053 organic acid biosynthetic process 19/268 316/18722 1.60E-07 4.53E-05 3.90E-05 EDN1/ACADL/ACSM5/ELOVL7/GGT1/LPL/LIPC/EDN2/SLC27A2/PDK4/ALDH1A1/PECR/ACMSD/PRKAA2/ACSM2A/ACSM2B/AGXT2/UPB1/MLXIPL 19 5 | BP GO:0046394 carboxylic acid biosynthetic process 19/268 314/18722 1.45E-07 4.51E-05 3.88E-05 EDN1/ACADL/ACSM5/ELOVL7/GGT1/LPL/LIPC/EDN2/SLC27A2/PDK4/ALDH1A1/PECR/ACMSD/PRKAA2/ACSM2A/ACSM2B/AGXT2/UPB1/MLXIPL 19 6 | BP GO:0006633 fatty acid biosynthetic process 13/268 163/18722 6.62E-07 0.000121263 0.000104355 EDN1/ACADL/ACSM5/ELOVL7/LPL/LIPC/EDN2/PDK4/PECR/PRKAA2/ACSM2A/ACSM2B/MLXIPL 13 7 | -------------------------------------------------------------------------------- /Figure 4/bulk_analysis.R: -------------------------------------------------------------------------------- 1 | ################# Figure 4a ###################### 2 | 3 | genelist_Figure4a <- read.table("genelist_Figure4a.txt")[,1]###pooled up-regulated and down-regulated genes in IM4 4 | 5 | normal <- grep("_N",colnames(mat),value = T) 6 | top_anno <- HeatmapAnnotation(df =sample_info[c(normal,tumor),c(1:2,6:19)], 7 | col = cl_col,show_legend = T) 8 | 9 | heat <- Heatmap(mat[genelist_Figure4a,c(normal,tumor)], 10 | col = colorRamp2(seq(-2,2,length.out = 11),col), 11 | cluster_rows = T, 12 | cluster_columns = T, 13 | show_column_names = F, 14 | show_row_names = F, 15 | use_raster=F, 16 | show_row_dend = T, 17 | na_col = "grey85", 18 | clustering_distance_rows = "pearson", 19 | clustering_method_rows = "ward.D", 20 | clustering_distance_columns = "pearson", 21 | clustering_method_columns = "ward.D", 22 | row_split = 4, 23 | column_split = c((rep("normal",50)),rep("tumor",100)), 24 | column_gap = unit(1, "mm"), 25 | row_gap = unit(1, "mm"), 26 | top_annotation = top_anno, 27 | column_title = NULL) # 不需要列标题) 28 | heat 29 | 30 | a <- row_order(heat) 31 | 32 | library(clusterProfiler) 33 | library(org.Hs.eg.db) 34 | 35 | go_UP <- enrichGO(genelist_Figure4a[a[[4]]], #extract genes in module 4,the same process was performed to obtain module 3 36 | OrgDb = org.Hs.eg.db, ont='ALL',pAdjustMethod = 'BH',pvalueCutoff = 0.01, 37 | qvalueCutoff = 0.05,keyType = 'SYMBOL') 38 | 39 | ########################### Figure 4B ########################## 40 | 41 | UP_model3 <- read.table("./Figure 4/module3.txt", sep = "\t", header = T, row.names = NULL) 42 | 43 | UP_model3$p.adjust <- -log10(UP_model3$p.adjust) 44 | UP_model3 <- UP_model3[order(UP_model3$p.adjust, decreasing = T),] 45 | UP_model3$order <- c(nrow(UP_model3):1) 46 | p1 <- ggplot(data=UP_model3, aes(x=reorder(Description,order),y=p.adjust, fill=p.adjust)) + 47 | geom_bar(position=position_dodge(), stat="identity") + 48 | xlab("GO term") + ylab("-log10(adjusted.p-value)") +coord_flip() + theme_bw() 49 | p1 + scale_fill_gradientn(colours = brewer.pal(9,"Blues")[-1],limit=c(2,10)) 50 | 51 | 52 | UP_model4 <- read.table("./module4.txt", sep = "\t", header = T, row.names = NULL) 53 | 54 | UP_model4$p.adjust <- -log10(UP_model4$p.adjust) 55 | UP_model4 <- UP_model4[order(UP_model4$p.adjust, decreasing = T),] 56 | UP_model4$order <- c(nrow(UP_model4):1) 57 | p1 <- ggplot(data=UP_model4, aes(x=reorder(Description,order),y=p.adjust, fill=p.adjust)) + 58 | geom_bar(position=position_dodge(), stat="identity") + 59 | xlab("GO term") + ylab("-log10(adjusted.p-value)") +coord_flip() + theme_bw() 60 | p1 + scale_fill_gradientn(colours = brewer.pal(9,"Reds")[-1],limit=c(3,8)) 61 | 62 | 63 | ############################# metabolomics ############################## 64 | # calculate mean value of metabolites in each IM subgroups 65 | 66 | meta_obj <- CreateSeuratObject(matrix_meta[,c(normal,tumor)]) 67 | meta_obj$group <- c(rep("N",50),sample_info[tumor,]$class) 68 | meta_obj <- SetIdent(meta_obj,value = "group") 69 | 70 | mean_mat <- as.matrix(AverageExpression(meta_obj, return.seurat = T)@assays$RNA@data) #use seurat to enable rapid visuliztion of metabolites in each group 71 | 72 | IM4_meta <- c( 73 | "Argininosuccinic acid","L-Arginine","Oxidized glutathione","Glutathionate(1-)","Fumaric acid", 74 | "Aminopropylcadaverine","Spermidine","Spermine","Glycine", 75 | "L-Ornithine","L-Aspartic acid","Urea","N-Acetylaspartylglutamic acid","N-acetylaspartate","Gamma-aminobutyric acid" 76 | ) 77 | 78 | data <- matrix_meta[,c(normal,tumor)] %>% as.matrix() 79 | groups <- c(rep("N",50),sample_info$class) 80 | 81 | p_values <- matrix(NA, nrow = nrow(data), ncol = 5) 82 | 83 | for (i in 1:5) { 84 | p_value <- apply(data, 1, function(x) { 85 | wilcox.test(x[groups == unique(groups)[i]], x[groups != unique(groups)[i]])$p.value 86 | }) 87 | p_value <- p.adjust(p_value,"BH") 88 | p_values[,i] <- p_value 89 | 90 | } 91 | colnames(p_values) <- unique(groups) 92 | rownames(p_values) <- rownames(data) 93 | 94 | b <- p_values[IM4_meta,] 95 | 96 | b = ifelse(b >= 0.05, "", 97 | ifelse(b<0.0001,"****", 98 | ifelse(b<0.001,"***", 99 | ifelse(b<0.01,"**", 100 | ifelse(b < 0.05,"*",""))))) 101 | 102 | bk=c(seq(-2,0,by=0.01),seq(0,2,by=0.01)) 103 | 104 | ################### Figure 4F ###################### 105 | pheatmap(t(scale(t(mean_mat[IM4_meta,]))), border_color = "NA", fontsize = 9,cellheight = 15,cellwidth = 20, 106 | display_numbers = b,number_color="black",fontsize_number=10, 107 | cluster_col=F, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 108 | color = c(colorRampPalette(colors = col[1:6])(length(bk)/2), 109 | colorRampPalette(colors = col[6:11])(length(bk)/2))) 110 | 111 | 112 | 113 | # calculate mean value of metabolites in each IM subgroups 114 | data_df <- t(matrix[,c(normal,tumor)]) %>% as.data.frame() 115 | 116 | data_df$group <- c(rep("N",50),sample_info[tumor,]$class) 117 | 118 | group_means <- aggregate(. ~ group, data_df, mean) 119 | 120 | result_mat <- data.frame(group_means[-1]) %>% t() 121 | colnames(result_mat) <- group_means$group 122 | rownames(result_mat) <- rownames(matrix_meta) 123 | 124 | Ion <- c("SLC7A5","SLC17A9","SLC38A5","SLC18A3","SLC12A8","SLC35F3","SLC38A2", 125 | "SLC1A5","SLC2A1","SLC2A3","SLC2A2","SLC4A3","SLC6A17") 126 | 127 | data <- matrix[,c(normal,tumor)] %>% as.matrix() 128 | groups <- c(rep("N",50),sample_info$class) 129 | 130 | p_values <- matrix(NA, nrow = nrow(data), ncol = 5) 131 | 132 | for (i in 1:5) { 133 | p_value <- apply(data, 1, function(x) { 134 | wilcox.test(x[groups == unique(groups)[i]], x[groups != unique(groups)[i]])$p.value 135 | }) 136 | p_value <- p.adjust(p_value,"BH") 137 | p_values[,i] <- p_value 138 | 139 | } 140 | colnames(p_values) <- unique(groups) 141 | rownames(p_values) <- rownames(data) 142 | 143 | b <- p_values[Ion,c(2:5,1)] 144 | 145 | b = ifelse(b >= 0.05, "", 146 | ifelse(b<0.0001,"****", 147 | ifelse(b<0.001,"***", 148 | ifelse(b<0.01,"**", 149 | ifelse(b < 0.05,"*",""))))) 150 | 151 | bk=c(seq(-2,0,by=0.01),seq(0,2,by=0.01)) 152 | 153 | ################### Figure 4F ###################### 154 | pheatmap(t(scale(t(result_mat[Ion,]))), border_color = "NA", fontsize = 9,cellheight = 15,cellwidth = 20, 155 | display_numbers = b[,],number_color="black",fontsize_number=10, 156 | clustering_distance_rows="correlation", 157 | cluster_col=F, cluster_rows=T, border= NULL, breaks=bk, treeheight_row = 20,treeheight_col = 20, 158 | color = c(colorRampPalette(colors = col[1:6])(length(bk)/2), 159 | colorRampPalette(colors = col[6:11])(length(bk)/2))) 160 | 161 | -------------------------------------------------------------------------------- /Figure 5/Processing of sequencing data of clinical trials.R: -------------------------------------------------------------------------------- 1 | ############ datasets of clinical trial are not provided in source data due to policy limitation. Data deposited in EGA needs DAC review 2 | ############relating to figure 5#####################3 3 | 4 | library(survminer) 5 | library(survival) 6 | library(data.table) 7 | library(CMScaller) 8 | library(tidyverse) 9 | library(forestplot) 10 | library(meta) 11 | 12 | 13 | matrix_IMmotion <- fread("./EGAF00004859518/IMmotion151.expression.data.TPM.anon.20201106.csv") 14 | matrix_IMmotion <- matrix_IMmotion[is.na(matrix_IMmotion$symbol)=="FALSE",] 15 | matrix_IMmotion <- matrix_IMmotion[!duplicated((matrix_IMmotion$symbol)),] 16 | matrix_IMmotion <- data.frame(matrix_IMmotion[,4:ncol(matrix_IMmotion)],row.names = matrix_IMmotion$symbol) 17 | 18 | clinical_IMmotion <- fread("./EGAF00004859519/IMmotion151_clinical_anon_20201106.csv") 19 | clinical_IMmotion <- data.frame(clinical_IMmotion) 20 | colnames(clinical_IMmotion) <- clinical_IMmotion[4,] 21 | clinical_IMmotion <- data.frame(clinical_IMmotion[5:nrow(clinical_IMmotion),]) 22 | clinical_IMmotion$RNASEQ_SAMPLE_ID <- gsub("-",".",clinical_IMmotion$RNASEQ_SAMPLE_ID) 23 | 24 | clinical_IMmotion <- clinical_IMmotion[order(clinical_IMmotion$ARM),] 25 | sample <- intersect(clinical_IMmotion$RNASEQ_SAMPLE_ID,colnames(matrix_IMmotion)) 26 | clinical_IMmotion <- clinical_IMmotion[clinical_IMmotion$RNASEQ_SAMPLE_ID%in%sample,] 27 | clinical_IMmotion$PFS_CENSOR[clinical_IMmotion$PFS_CENSOR=="TRUE"]=1 28 | clinical_IMmotion$PFS_CENSOR[clinical_IMmotion$PFS_CENSOR=="FALSE"]=0 29 | clinical_IMmotion$PFS_CENSOR <- as.numeric(clinical_IMmotion$PFS_CENSOR) 30 | matrix_IMmotion <- matrix_IMmotion[,sample] 31 | 32 | clinical_IMmotion$PFS_MONTHS <- as.numeric(clinical_IMmotion$PFS_MONTHS) 33 | 34 | #####annotation using ntp algorithm###################### 35 | tmp_org <- read.csv("tmp_org.csv",row.names = 1) 36 | colnames(tmp_org) <- c("probe","class") 37 | tmp_org_use <- tmp_org[tmp_org$probe %in%rownames(matrix_IMmotion),] 38 | 39 | emat <- ematAdjust(matrix_IMmotion, normMethod = 'RLE') 40 | res <- ntp(emat, tmp_org_use, doPlot=TRUE, nPerm=1000, seed = 42,nCores =30) 41 | clinical_IMmotion$prediction <- res[sample,]$prediction 42 | 43 | clinical_IMmotion_sub <- clinical_IMmotion[clinical_IMmotion$ARM!="atezo_bev",] 44 | 45 | fit <- survfit(Surv(clinical_IMmotion_sub$PFS_MONTHS, 46 | clinical_IMmotion_sub$PFS_CENSOR) ~ prediction, data = clinical_IMmotion_sub) 47 | p <- ggsurvplot(fit, 48 | pval = T ,conf.int = F,censor = T, censor.size = 3, 49 | axes.offset = T, 50 | size=1, 51 | surv.median.line = "hv", # Specify median survival 52 | ggtheme = theme_classic(), # Change ggplot2 theme 53 | palette = c("#E64B35FF","#4DBBD5FF","#00A087FF","#3C5488FF" ) 54 | ) 55 | p 56 | 57 | 58 | clinical_IMmotion_sub <- clinical_IMmotion[clinical_IMmotion$ARM=="atezo_bev",] 59 | 60 | fit <- survfit(Surv(clinical_IMmotion_sub$PFS_MONTHS, 61 | clinical_IMmotion_sub$PFS_CENSOR) ~ prediction, data = clinical_IMmotion_sub) 62 | p <- ggsurvplot(fit, 63 | pval = T ,conf.int = F,censor = T, censor.size = 3, 64 | axes.offset = T, 65 | size=1, 66 | surv.median.line = "hv", # Specify median survival 67 | ggtheme = theme_classic(), # Change ggplot2 theme 68 | palette = c("#E64B35FF","#4DBBD5FF","#00A087FF","#3C5488FF" ) 69 | ) 70 | p 71 | 72 | top_anno <- HeatmapAnnotation(df = clinical_IMmotion[,c(9,92)], col = 73 | list(ARM=c("atezo_bev"="#FB8072", "sunitinib"="#80B1D3"), 74 | prediction=c("IM1"="#E64B35FF", "IM2"="#4DBBD5FF", "IM3"="#00A087FF", "IM4"="#3C5488FF" )), 75 | show_legend = T) 76 | 77 | 78 | Heatmap(t(scale(t(matrix_IMmotion[tmp_org_use$probe,sample]))), 79 | col = colorRamp2(seq(-2,2,length.out = 11),col), 80 | cluster_rows = F, 81 | cluster_columns = F, 82 | row_names_gp = gpar(fontsize = 10), 83 | clustering_distance_rows = "pearson", 84 | clustering_method_rows = "ward.D", 85 | clustering_distance_columns = "pearson", 86 | clustering_method_columns = "ward.D", 87 | show_column_names = F, 88 | show_row_names = F, 89 | border = "black", 90 | row_split = tmp_org2$class, 91 | column_split = clinical_IMmotion$prediction, 92 | column_gap = unit(0, "mm"), 93 | row_gap = unit(0, "mm"), 94 | top_annotation = top_anno, # 在热图上边增加注释 95 | #column_title = NULL 96 | ) # 不需要列标题) 97 | 98 | 99 | clinical_IMmotion_sub <- lapply(c("IM1", "IM2", "IM3", "IM4"), function(i) { 100 | subset <- clinical_IMmotion[clinical_IMmotion$prediction == i, ] 101 | subset$ARM[subset$ARM == "atezo_bev"] <- "2_Combo" 102 | subset$ARM[subset$ARM == "sunitinib"] <- "1_Sunitinib" 103 | fit <- coxph(Surv(subset$PFS_MONTHS, subset$PFS_CENSOR) ~ ARM, data = subset) 104 | fit <- summary(fit) 105 | data.frame(fit$coefficients, fit$conf.int[], row.names = i) 106 | }) 107 | 108 | HR_List <- do.call(rbind, clinical_IMmotion_sub) 109 | HR_List$group <- rownames(HR_List) 110 | 111 | tabletext <- data.frame( 112 | predicted_cluster = c("IM1", "IM2", "IM3", "IM4"), 113 | atezo_bev = c("66", "134", "68", "139"), 114 | sunitinib = c("68", "139", "78", "131"), 115 | mean = HR_List$exp.coef., 116 | lower = HR_List$lower..95, 117 | upper = HR_List$upper..95 118 | ) 119 | 120 | tabletext$`HR (95% CI)` <- ifelse(is.na(tabletext$mean), "", 121 | sprintf("%.2f (%.2f to %.2f)", 122 | tabletext$mean, tabletext$lower, tabletext$upper)) 123 | 124 | tabletext$` ` <- paste(rep(" ", 8), collapse = " ") 125 | 126 | library(forestplot) 127 | library(forestploter) 128 | 129 | p <- forest(data = tabletext[,c(1:3,8,7)], 130 | lower = tabletext$lower, 131 | upper = tabletext$upper, 132 | est = tabletext$mean, 133 | ci_column = 4 , 134 | sizes = tabletext$mean, 135 | ref_line = 1, 136 | xlim = c(0,2), 137 | ticks_at = c(0,1,2,3), 138 | 139 | ) 140 | 141 | print(p) 142 | 143 | ##################### three cohorts were processed following the same workflow ################# 144 | -------------------------------------------------------------------------------- /Figure 5/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 5 and Extended Data Figure 8. 2 | -------------------------------------------------------------------------------- /Figure 6/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 6 and Extended Data Figure 7,9,10. predict adjusted IM subgroups in bulk RNA-seq data.R contains code for Fig. 6a-6c & 6g. analysis pipeline of Malignant single nucleic data.R contains code for Fig. 6f, eFig 9c-9e,9j-k. differential analysis of spatial metabolomics.R contains code for Fig 6m. spatial transcriptome analysis.R contains code for Fig 6j-6l & eFig 10a. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 6/analysis pipeline of Malignant single nucleic data.R: -------------------------------------------------------------------------------- 1 | Epi_snRNA <- snRNA[,snRNA$celltype2=="Malignant"] 2 | 3 | Epi_snRNA <- NormalizeData(Epi_snRNA) 4 | 5 | Epi_snRNA <- FindVariableFeatures(Epi_snRNA, nfeatures = 2000) 6 | VariableFeaturePlot(Epi_snRNA) 7 | Epi_snRNA <- ScaleData(Epi_snRNA, verbose = T) 8 | Epi_snRNA <- RunPCA(Epi_snRNA, npcs = 50, verbose = FALSE) 9 | PCAPlot(Epi_snRNA) 10 | ElbowPlot(Epi_snRNA, ndims = 50) 11 | 12 | Epi_snRNA <- RunHarmony(Epi_snRNA, c("sample"),max.iter.harmony = 20) 13 | 14 | 15 | Epi_snRNA <- CellCycleScoring(Epi_snRNA, g2m.features = cc.genes$g2m.genes, 16 | s.features = cc.genes$s.genes) 17 | 18 | 19 | Epi_snRNA <- RunUMAP(Epi_snRNA, reduction = "harmony", dims = 1:40, n.components = 2) 20 | 21 | DimPlot(Epi_snRNA, reduction = "umap", label = F, repel = TRUE, raster= F,group.by = "sample", 22 | cols = celltype 23 | ) ##### UMAP dimension in Extended Data Figure 9C & 9D 24 | celltype <- c(brewer.pal(11,"Set3")[c(1,3:8,10:11)],pal_npg(alpha = 0.7)(9),#color, 25 | brewer.pal(11,"Paired")[11:1],brewer.pal(8,"Set1")[8:1], 26 | brewer.pal(8,"Set2"))[-15] 27 | 28 | Epi_snRNA <- RunUMAP(Epi_snRNA, reduction = "pca", dims = 1:40, n.components = 2) 29 | 30 | DimPlot(Epi_snRNA, reduction = "umap", label = F, repel = TRUE, raster= F,group.by = "sample", 31 | cols = celltype 32 | ) ##### UMAP dimension in Figure 6D 33 | 34 | 35 | Epi_snRNA <- AddModuleScore(Epi_snRNA,DCCD_score) 36 | Epi_snRNA$predicted_class <- "IM4-like" 37 | Epi_snRNA$predicted_class[Epi_snRNA$Cluster1>Epi_snRNA$Cluster2] <- "IM2-like" ##classify malignant cells into two groups 38 | 39 | DimPlot(Epi_snRNA, reduction = "umap", label = F, repel = TRUE, raster= F,group.by = "predicted_class", 40 | cols = celltype 41 | ) 42 | 43 | 44 | ################# Figure 6F #################### 45 | column <- as.data.frame(table(Epi_snRNA$sample, Epi_snRNA$predicted_class)) 46 | 47 | column$group2 <- plyr::mapvalues(x = column$Var1, 48 | from = rownames(sample_info), 49 | to = sample_info$class) 50 | 51 | colnames(column) <- c("Patient","cluster","Freq","group2") 52 | column$group2 <- as.character(column$group2) 53 | 54 | p1 <- ggplot(column,aes(Patient,weight=Freq,fill=cluster))+geom_bar(position="fill")+#coord_flip()+ 55 | theme(panel.grid.major =element_blank(), 56 | panel.grid.minor = element_blank(), 57 | panel.background = element_blank(), 58 | axis.line = element_line(colour = "black")) + 59 | scale_fill_manual(values = c("IM4-like"="#E64B35FF", "IM2-like"="#4DBBD5FF")) 60 | p1 + facet_grid(~group2,scales = "free", space = "free") + 61 | theme(axis.text.x = element_text(angle = 45, hjust = 1), 62 | axis.ticks.length = unit(.2, "cm")) 63 | 64 | 65 | 66 | ################# Extended Data Figure 9E ################ 67 | a <- as.data.frame(table(Epi_snRNA$sample, Epi_snRNA$predicted_class)) 68 | a <- spread(a,key = "Var2", value = "Freq") 69 | a <- data.frame(a[2:ncol(a)], row.names = a$Var1) 70 | a <- a/rowSums(a) 71 | a <- as.data.frame(a) 72 | 73 | a$group <- plyr::mapvalues(x = rownames(a), 74 | from = rownames(sample_info), 75 | to = sample_info$class) 76 | 77 | a$group<- as.character(a$group) 78 | 79 | 80 | class <- c("1"="#8DD3C7", "2"="#BEBADA", "3"="#FB8072", "4"="#80B1D3" ) 81 | 82 | ggplot(a,aes(factor(group,levels =c("1","2","3","4")), 83 | a$IM4.like,color=group))+ 84 | geom_boxplot(outlier.colour = NA,size=1)+geom_jitter(size=1.5,aes(color=group))+theme_classic()+ 85 | #scale_fill_manual(values = alpha(class,0)) + 86 | scale_color_manual(values = class)+ 87 | geom_signif(comparisons = list(c("3","4"),c("2","4"),c("4","1")), 88 | map_signif_level=T,#size = 1, 89 | textsize=5,test=wilcox.test,step_increase=0.1)+ 90 | theme(axis.text.x = element_text(angle = 45, hjust = 1))+ labs(y="Proportion", x="IM group") + 91 | theme( 92 | plot.title = element_text(hjust = 0.5), 93 | axis.line = element_line(colour = "black",size=0.7), 94 | axis.ticks = element_line(size = 0.7, color="black") , 95 | axis.title.y=element_text(size=14),axis.text.y=element_text(size=14), 96 | axis.title.x=element_blank(),axis.text.x=element_text(size=12) 97 | )+ scale_y_continuous(breaks = c(0,0.25,0.5,0.75,1.00)) 98 | 99 | 100 | ############ CNV analysis of snRNA-seq data ##################### 101 | 102 | control <- snRNA_NAT[,snRNA_NAT$celltype2 == "PT"] ##use cell of origination of ccRCC to generate the reference of infercnv 103 | Epi_sub$label <- Epi_sub$sample 104 | control$label <- "control" 105 | 106 | Epi_cnv <- merge(control, Epi_sub) 107 | 108 | matrix <- Epi_cnv@assays$RNA@counts 109 | meta <- Epi_cnv@meta.data 110 | meta2 <- as.data.frame(meta$label) 111 | table(meta$label) 112 | rownames(meta2) <- rownames(meta) 113 | colnames(meta2) <- "label" 114 | class(meta2$label) 115 | 116 | library(infercnv) 117 | 118 | infercnv_obj = CreateInfercnvObject(raw_counts_matrix=matrix, 119 | annotations_file=meta2, 120 | delim="\t", 121 | gene_order_file=gtf_df, 122 | ref_group_names=c("control")) 123 | 124 | dir="./inferCNV" 125 | 126 | gtf1 <- rtracklayer::import('dir/Homo_sapiens.GRCh38.87.chr.gtf') #load the reference genome downloaded from ensemble 127 | gtf_df <- as.data.frame(gtf1) 128 | gtf_df <- gtf_df[,c(1:3,12)] 129 | seq <- as.character(gtf_df$seqnames) 130 | seq <- paste("chr",seq,sep = "") 131 | gtf_df$seqnames <- seq 132 | gtf_df <- na.omit(gtf_df) 133 | gtf_df <- gtf_df[!duplicated(gtf_df[,4]),] 134 | gene <- rownames(Epi_cnv) 135 | gtf_df <- gtf_df[gtf_df$gene_name %in% gene,] 136 | rownames(gtf_df) <- gtf_df$gene_name 137 | gtf_df <- gtf_df[,1:3] 138 | gtf_df <- gtf_df[gtf_df$seqnames != "chrMT",] #only use chr 1-22 139 | 140 | 141 | gtf_df$seqnames <- as.factor(gtf_df$seqnames) 142 | infercnv_obj = infercnv::run(infercnv_obj, 143 | cutoff=0.1, # cutoff=1 works well for Smart-seq2, and cutoff=0.1 works well for 10x Genomics 144 | out_dir= dir, 145 | cluster_by_groups=TRUE, 146 | denoise=TRUE, 147 | num_threads = 20, 148 | HMM=F, 149 | no_plot = T) 150 | 151 | ##### cnv matrix could be obtained from the run.final.infercnv_obj in the output folder 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /Figure 6/differential analysis of spatial metabolomics.R: -------------------------------------------------------------------------------- 1 | ######## differential analysis was performed in pos and neg data separately and then combimed into a single file 2 | library(ggrepel) 3 | 4 | volcano <- read.csv("./Figure 6/diff_Y7.csv",row.names = 1) 5 | 6 | volcano$p <- (-1)*log10(volcano$p_val_adj) 7 | volcano$p[volcano$p == "Inf"] = 303 8 | volcano$color = ifelse(volcano$p_val_adj > 0.001, "stable", 9 | ifelse(volcano$avg_log2FC > 1, "up", 10 | ifelse(volcano$avg_log2FC < -1,"down","stable"))) 11 | volcano$color2 <- "others" 12 | volcano$color2[(grep("Fatty Acyls",volcano$Class))]="Fatty Acyls" 13 | volcano$color2[(grep("Carboxylic acids and derivatives",volcano$Class))]="Carboxylic acids" 14 | volcano$color2[(grep("Glycerolipids",volcano$Class))]="Glycerolipids" 15 | volcano$color2[volcano$color=="stable"] <- "others" 16 | volcano <- arrange(volcano,desc(volcano$color2)) 17 | 18 | ################# Figure 6M ###################### 19 | p <- ggplot( 20 | volcano, aes(x = avg_log2FC, y = p, colour=color2, shape=group)) + 21 | geom_point(alpha=0.9, size=2) + 22 | scale_color_manual(values=c(pal_npg()(4)[c(3,1,4)], "#d2dae2"))+ 23 | geom_vline(xintercept=c(-1,1),lty=4,col="black",lwd=0.8) + 24 | geom_hline(yintercept = -log10(0.05),lty=4,col="black",lwd=0.8) + 25 | labs(x="log2(fold change)", 26 | y="-log10 (p-value)")+ 27 | theme_bw()+ 28 | theme(plot.title = element_text(hjust = 0.5), 29 | legend.position="right", 30 | legend.title = element_blank()) 31 | 32 | volcano$label <- NA 33 | volcano$label[intersect(grep("Fatty Ac",volcano$Class),grep("up",volcano$color))]=volcano$gene[intersect(grep("Fatty Ac",volcano$Class),grep("up",volcano$color))] 34 | volcano$label[intersect(grep("Triradylcglycerols",volcano$Sub.Class),grep("up",volcano$color))]=volcano$gene[intersect(grep("Triradylcglycerols",volcano$Sub.Class),grep("up",volcano$color))] 35 | volcano$label <- as.numeric(volcano$label) 36 | volcano$label <- signif((volcano$label+0.00001),digits = 7) 37 | 38 | p +ylim(0,320)+ geom_label_repel(data = volcano, aes(x = volcano$avg_log2FC, 39 | y = p, 40 | label = label), 41 | #max.overlaps = 100, 42 | size = 3, box.padding = unit(0.5, "lines"), 43 | point.padding = unit(0.8, "lines"), 44 | segment.color = "black", 45 | color = "black", 46 | show.legend = F) 47 | -------------------------------------------------------------------------------- /Figure 6/predict adjusted IM subgroups in bulk RNA-seq data.R: -------------------------------------------------------------------------------- 1 | DCCD_score <- list(IM2_sig=tmp_org$probe[tmp_org$class=="IM2"], 2 | IM4_sig=tmp_org$probe[tmp_org$class=="IM4"]) 3 | 4 | 5 | TCGA_DCCD_score <- gsva(as.matrix(TCGA), DCCD_score, method = "ssgsea", parallel.sz = 0, verbose = T) 6 | 7 | IM1_3_sample <- rownames(clinical_TCGA)[clinical_TCGA$prediction%in%c("IM1","IM3")] 8 | 9 | clinical_TCGA_IM1_3 <- clinical_TCGA[IM1_3_sample,] 10 | clinical_TCGA_IM1_3$IM2_score <- TCGA_DCCD_score["IM2_sig",IM1_3_sample] 11 | clinical_TCGA_IM1_3$IM4_score <- TCGA_DCCD_score["IM4_sig",IM1_3_sample] 12 | 13 | clinical_TCGA_IM1_3$identity_score <- scale(clinical_TCGA_IM1_3$IM4_score)-scale(clinical_TCGA_IM1_3$IM2_score) 14 | clinical_TCGA_IM1_3$group_IM <- "IM4-like" 15 | clinical_TCGA_IM1_3$group_IM[clinical_TCGA_IM1_3$identity_score<0] <- "IM2-like" 16 | 17 | table(clinical_TCGA_IM1_3$group_IM) 18 | 19 | clinical_TCGA_IM1_3 <- clinical_TCGA_IM1_3[order(clinical_TCGA_IM1_3$identity_score,decreasing = T),] 20 | 21 | mat_use <- TCGA[,rownames(clinical_TCGA_IM1_3)]%>%t()%>%scale()%>%t() 22 | 23 | sig <- intersect(c(DCCD_score$IM4_sig,DCCD_score$IM2_sig),rownames(TCGA)) 24 | 25 | Heatmap(mat_use[sig,rownames(clinical_TCGA_IM1_3)], 26 | col = colorRamp2(seq(-2,2,length.out = 11),col), 27 | cluster_rows = F, 28 | cluster_columns = F, 29 | show_column_names = F, 30 | show_row_names = F, 31 | row_split = c(rep("1_IM4_sig",285),rep("2_IM2_sig",177)), 32 | column_split = c(rep("1_IM4-like",77),rep("2_IM2-like",90)), 33 | column_gap = unit(0, "mm"), 34 | row_gap = unit(0, "mm"), 35 | border = "black", 36 | column_title = NULL) 37 | 38 | clinical_TCGA$group_IM2 <- clinical_TCGA$prediction 39 | clinical_TCGA[rownames(clinical_TCGA_IM1_3),]$group_IM2 = clinical_TCGA_IM1_3$group_IM 40 | 41 | 42 | ################## Figure 6C ################# 43 | fit <- survfit(Surv(OS.time/30, OS) ~ group_IM, data = clinical_TCGA) 44 | p <- ggsurvplot(fit, 45 | pval = T ,conf.int = F,censor = T, censor.size = 3, 46 | axes.offset = T, 47 | surv.median.line = "hv", # Specify median survival 48 | ggtheme = theme_classic(base_line_size=1, base_rect_size=1), # Change ggplot2 theme 49 | palette = pal_npg()(4)[c(1,2,4,3)] 50 | ) 51 | p 52 | 53 | ########################### Extended Data Figure 7C ############################### 54 | 55 | fit <- survfit(Surv(PFI.time/30, PFI) ~ group_IM, data = clinical_TCGA) 56 | p <- ggsurvplot(fit, 57 | pval = T ,conf.int = F,censor = T, censor.size = 3, 58 | axes.offset = T, 59 | surv.median.line = "hv", # Specify median survival 60 | ggtheme = theme_classic(base_line_size=1, base_rect_size=1), # Change ggplot2 theme 61 | palette = pal_npg()(4)[c(1,2,4,3)] 62 | ) 63 | p 64 | 65 | ##### adjusting IM subgroup of all the cohorts was performed following the same pipeline 66 | 67 | 68 | #################### Figure 6G ################## 69 | 70 | column <- table(clinical_TCGA$group_IM,clinical_TCGA$X9p)%>%data.frame() 71 | column$group <- "09p" 72 | column2 <- table(clinical_TCGA$group_IM,clinical_TCGA$X12p)%>%data.frame() 73 | column2$group <- "12p" 74 | column3 <- table(clinical_TCGA$group_IM,clinical_TCGA$X20p)%>%data.frame() 75 | column3$group <- "20p" 76 | column4 <- table(clinical_TCGA$group_IM,clinical_TCGA$X14q)%>%data.frame() 77 | column4$group <- "14q" 78 | column <- rbind(column,column2,column3,column4) 79 | 80 | 81 | p1 <- ggplot(column,aes(factor(Var1,levels = c("IM2","IM2-like","IM4-like","IM4") 82 | ), 83 | weight=Freq,fill=Var2))+ 84 | geom_bar(position="fill")+ 85 | theme(panel.grid.major =element_blank(), 86 | panel.grid.minor = element_blank(), 87 | panel.background = element_blank(), 88 | axis.line = element_line(colour = "black")) + 89 | scale_fill_manual(values = 90 | c("grey85","#de2d26","#2171B5") 91 | ) 92 | p1 + facet_grid(~group,scales = "free", space = "free") + 93 | theme(axis.text.x = element_text(angle = 45, hjust = 1), 94 | axis.line = element_line(colour = "black",size=1), 95 | axis.ticks = element_line(size = 1, color="black"), 96 | axis.ticks.length = unit(.2, "cm")) + xlab("Adjusted IM group") + ylab("Proportion") 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Figure 6/spatial transcriptome analysis.R: -------------------------------------------------------------------------------- 1 | ############ ST data was processed per sample, use X98_T as the example ############## 2 | 3 | library(SPATA2) 4 | 5 | X98 <- 6 | initiateSpataObject_10X( 7 | directory_10X = 'dir/Y7/filtered_feature_bc_matrix/', # the directory from which to load the data. It has been deposited at Mendeley and Zenodo 8 | sample_name = "X98" 9 | ) 10 | 11 | plotSurface(object = X98, 12 | color_by = c("SFTPA2"), display_image=T,#alpha_by = "SCGB3A1", 13 | smooth = F, normalize =F,#smooth_span = 0.5, 14 | pt_size = 1.2) + 15 | ggplot2::labs(title = "Denoised") 16 | 17 | ################ Figure 6K-1 ######################## 18 | plotSurface(object = X98, color_by = "seurat_clusters", pt_clrp = "npg") 19 | 20 | 21 | ref_cor <- Read10X("/R_cor/filtered_feature_bc_matrix/") ####use ST data of renal cortex as the control 22 | ref_cor <- as.matrix(as.matrix(ref_cor)) 23 | colnames(ref_cor) <- paste(colnames(ref_cor),"ref",sep = "_") 24 | 25 | meta_ref <- data.frame(rep("ref",ncol(ref_cor)),row.names = colnames(ref_cor)) 26 | colnames(meta_ref) <- "sample" 27 | 28 | gtf1 <- rtracklayer::import('./Homo_sapiens.GRCh38.87.chr.gtf') 29 | gtf_df <- as.data.frame(gtf1) 30 | gtf_df <- gtf_df[,c(10,12,1:3)] 31 | gtf_df <- gtf_df[!duplicated(gtf_df[,2]),] 32 | colnames(gtf_df) <- c("ensembl_gene_id", "hgnc_symbol", "chromosome_name", 33 | "start_position" , "end_position") ###make sure colnames are in this order 34 | gene <- rownames(ref_cor) 35 | gtf_df <- gtf_df[gtf_df$hgnc_symbol %in% gene,] 36 | gtf_df <- gtf_df[gtf_df$chromosome_name != "MT",] 37 | gtf_df$chromosome_name <- as.character(gtf_df$chromosome_name) 38 | 39 | 40 | X98 <- runCnvAnalysis( 41 | object = X98, 42 | directory_cnv_folder = "./X98_T/CNV/", # example directory to 43 | ref_annotation = meta_ref, 44 | ref_mtr = ref_cor, 45 | ref_regions = cnv_ref$regions, 46 | gene_pos_df = gtf_df 47 | ) 48 | 49 | ################# Figure 6K-2 ################## 50 | infercnv_obj <- readRDS("./X98_T/CNV/run.final.infercnv_obj") 51 | tumor_mat <- infercnv_obj@expr.data 52 | tumor_mat <- as.matrix(tumor_mat) 53 | gene_order <- infercnv_obj@gene_order 54 | gene_order <- as.data.frame(gene_order) 55 | gene_order <- gene_order[gene_order[,1]%in%c(1:22),] 56 | gene_order$chr <- as.numeric(as.character(gene_order$chr)) 57 | gene_order <- gene_order[order(gene_order$chr,decreasing = F),] 58 | tumor_mat <- tumor_mat[rownames(gene_order),] 59 | tumor_mat <- t(tumor_mat) 60 | tumor_mat[1:5,1:5] 61 | 62 | library(ComplexHeatmap) 63 | library(circlize) 64 | library(RColorBrewer) 65 | library(viridis) 66 | library(ggsci) 67 | library(ggplot2) 68 | 69 | seurat_clusters <- pal_npg()(8) 70 | names(seurat_clusters) <- c(0,1,2,3,4,5,6,7) 71 | cl_col =list(seurat_clusters=seurat_clusters 72 | ) 73 | 74 | right_anno <- rowAnnotation(df = annotation,col = cl_col,show_legend = T) 75 | col <- c(brewer.pal(11, "RdBu"))[c(11:1)] 76 | 77 | heat <- Heatmap(tumor_mat[X98_barcode,], #X98_barcode is the barcode of the SPATA2 object 78 | col = colorRamp2(seq(0.7,1.3,length.out = 11),col), 79 | cluster_rows = T, 80 | cluster_columns = F, 81 | show_column_names = F, 82 | show_row_names = F, 83 | use_raster=T, 84 | border = "BLACK", 85 | show_row_dend = T, 86 | clustering_method_rows = "ward.D", 87 | row_gap = unit(0.5, "mm"), 88 | column_split = gene_order$chr, 89 | column_gap = unit(0, "mm"), 90 | row_split = annotation$seurat_clusters, 91 | row_gap = unit(0, "mm"), 92 | top_annotation = top_anno, 93 | right_annotation = right_anno, 94 | column_title = NULL) 95 | heat 96 | 97 | ################# Figure 6L ##################### 98 | plotSurface(object = X98, color_by = "Chr9", pt_clrsp = "Blues 3", rev = F, c1 = 1,smooth = T) 99 | 100 | 101 | X98 <- 102 | runAutoencoderDenoising( 103 | object = X98, 104 | activation = "selu", 105 | bottleneck = 56, 106 | epochs = 20, 107 | layers = c(128, 64, 32), 108 | dropout = 0.1 109 | ) 110 | 111 | X98 <- setActiveExpressionMatrix(object = X98, mtr_name = "denoised") 112 | 113 | IM4_feature <- read.table("./IM4_feature.txt",header = T) ######part of the tmp_org file used in bulk RNA-seq analysis 114 | pathway <- IM4_feature 115 | pathway_list <- vector("list",length(pathway)) 116 | 117 | for (i in seq_along(pathway)) { 118 | pathway_list[[i]] <- unique(na.omit(pathway[,i])) 119 | } 120 | 121 | names(pathway_list) <- colnames(pathway) 122 | 123 | 124 | pathway_list <- lapply(pathway, function(x) { 125 | unique(na.omit(x)) 126 | }) 127 | 128 | ################# Figure 6J #################### 129 | plotSurfaceAverage(object = X98, 130 | color_by = c(pathway_list), 131 | smooth = F, 132 | pt_size = 2) + 133 | ggplot2::labs(title = "Denoised") 134 | 135 | ################# Extended Data Figure 10A ############## 136 | X98 <- createTrajectories(object = X98) 137 | 138 | plotTrajectory(object = X98, 139 | trajectory_name = "DCCD", 140 | color_by = "seurat_clusters", 141 | pt_clrp = "npg", 142 | pt_alpha = 0.25, # reduce alpha to highlight the trajectory's course 143 | display_image = FALSE) + 144 | legendTop() 145 | 146 | ################# Extended Data Figure 10B ############## 147 | TF <- read.csv("./TF_final.csv") ####the final version of TF list 148 | 149 | hm_colors <- viridis::inferno(n = 256) 150 | 151 | tra_spata <- SPATA2::plotTrajectoryHeatmap(object = X98, 152 | trajectory_name = "DCCD", 153 | variables = TF$symbol, 154 | arrange_rows = "maxima", 155 | colors = hm_colors, 156 | cluster_rows = T, 157 | show_rownames = T, 158 | split_columns = F, # splits the heatmap to highlight the trajectory parts 159 | smooth_span = 0.5) 160 | 161 | 162 | -------------------------------------------------------------------------------- /Figure 7/README.md: -------------------------------------------------------------------------------- 1 | Scripts for analysis shown in Figure 7 and Extended Data Figure 10. Related source data is available in the Source Data folder or at Zenodo (https://zenodo.org/record/8063124). 2 | -------------------------------------------------------------------------------- /Figure 7/Source Data /TF_final.csv: -------------------------------------------------------------------------------- 1 | ,mean_control,mean_T,log2FC,p_value,adj_p,symbol 2 | ZBTB7C,1.960231682,4.165983438,2.205751756,5.58E-05,0.000508645,ZBTB7C 3 | LEF1,2.814410921,4.7348881,1.920477179,8.25E-07,2.91E-05,LEF1 4 | CEBPB,3.213596399,4.949358033,1.735761634,1.07E-06,3.30E-05,CEBPB 5 | TFAP2A,0.969880885,2.682752392,1.712871507,1.95E-06,4.85E-05,TFAP2A 6 | RUNX2,3.866760333,5.363805527,1.497045194,4.56E-07,2.07E-05,RUNX2 7 | HMGA1,3.714317302,5.040077055,1.325759753,7.12E-06,0.000117022,HMGA1 8 | FOSL1,1.443856732,2.763130051,1.319273319,1.71E-05,0.000214033,FOSL1 9 | TBX15,2.183770062,3.487186905,1.303416843,2.98E-05,0.000322604,TBX15 10 | HIVEP3,4.780571618,6.072755687,1.29218407,4.86E-07,2.14E-05,HIVEP3 11 | MLXIP,6.407570933,7.695677735,1.288106802,3.71E-08,7.52E-06,MLXIP 12 | ARNTL2,2.412619898,3.64669797,1.234078072,8.10E-07,2.88E-05,ARNTL2 13 | GATA6,1.557347175,2.774765017,1.217417842,6.07E-06,0.000105233,GATA6 14 | EGR2,2.839211313,4.036407544,1.197196231,0.000697639,0.003499861,EGR2 15 | STAT2,6.999307676,8.075058758,1.075751083,6.70E-08,8.89E-06,STAT2 16 | TEAD4,3.402196348,4.39905345,0.996857102,5.06E-07,2.18E-05,TEAD4 17 | ZBTB47,3.650641995,4.634860738,0.984218743,1.91E-05,0.000231142,ZBTB47 18 | ZNF385A,3.769772833,4.746853688,0.977080854,1.97E-06,4.89E-05,ZNF385A 19 | HOXD10,3.591495487,4.543873063,0.952377576,0.004139486,0.014487125,HOXD10 20 | HOXD11,1.656371182,2.587955488,0.931584306,0.002614219,0.010038536,HOXD11 21 | ETV6,5.980959104,6.899097709,0.918138605,1.44E-06,3.98E-05,ETV6 22 | ONECUT2,0.406027391,1.269142698,0.863115307,0.001474742,0.006387002,ONECUT2 23 | ETV1,3.399135594,4.255806033,0.856670439,0.005752318,0.018880313,ETV1 24 | NFE2L3,4.14966719,5.004987477,0.855320287,0.004173062,0.014584934,NFE2L3 25 | MYBL1,3.589344169,4.43885357,0.8495094,0.001199401,0.00541841,MYBL1 26 | ELF4,5.0675773,5.894143355,0.826566055,1.94E-07,1.27E-05,ELF4 27 | E2F7,2.14125036,2.958907501,0.817657141,0.000269052,0.001671752,E2F7 28 | DNTTIP1,3.558834656,4.334592117,0.775757461,9.70E-07,3.17E-05,DNTTIP1 29 | EHF,0.380321036,1.146297052,0.765976016,0.001177815,0.005340495,EHF 30 | ARID5A,4.4711601,5.235922785,0.764762685,0.000424501,0.002382149,ARID5A 31 | BACH1,6.229895993,6.986315887,0.756419894,4.32E-05,0.000421638,BACH1 32 | GZF1,3.893338924,4.643108118,0.749769195,1.76E-05,0.000218628,GZF1 33 | HIF1A,7.269299421,7.982148075,0.712848655,3.19E-05,0.000337006,HIF1A 34 | SIX5,3.100943815,3.811024776,0.710080962,0.00027869,0.001716725,SIX5 35 | GLI3,4.434989045,5.137282277,0.702293232,0.000444815,0.002469323,GLI3 36 | PROX1,1.782178912,2.479875782,0.69769687,0.003924115,0.013842332,PROX1 37 | FOXP4,4.21818283,4.91421495,0.69603212,0.007605424,0.023608424,FOXP4 38 | ZNF598,3.743158545,4.422797204,0.679638659,0.0001279,0.000954091,ZNF598 39 | PBX3,3.640295387,4.304567883,0.664272495,0.002966192,0.011083439,PBX3 40 | ZNF746,4.562414339,5.219504225,0.657089886,6.05E-05,0.000540889,ZNF746 41 | ZNF217,6.786558826,7.42923032,0.642671494,5.27E-06,9.52E-05,ZNF217 42 | TFE3,5.66027248,6.273790623,0.613518142,9.00E-05,0.000728917,TFE3 43 | STAT5A,4.846836947,5.457777798,0.610940851,4.46E-05,0.000432523,STAT5A 44 | ZFPM1,2.050598373,2.657459,0.606860626,0.000150852,0.001077875,ZFPM1 45 | CEBPD,5.205098923,5.801706995,0.596608072,0.015925791,0.04291108,CEBPD 46 | ZFP14,4.717666577,4.091076148,-0.626590429,3.60E-05,0.000370392,ZFP14 47 | NFATC3,6.533416595,5.854826605,-0.67858999,1.38E-05,0.000182318,NFATC3 48 | EPAS1,10.07202023,9.34726725,-0.724752985,0.007977304,0.024482747,EPAS1 49 | NFYC,6.006500973,5.277152542,-0.729348431,2.99E-06,6.47E-05,NFYC 50 | ZNF429,4.227844185,3.490261452,-0.737582733,7.75E-05,0.000652655,ZNF429 51 | ZBTB20,9.02104474,8.251427597,-0.769617143,0.000605268,0.003136298,ZBTB20 52 | TFDP2,6.198939551,5.42799028,-0.770949271,0.000103999,0.000812972,TFDP2 53 | MAF,8.496044457,7.646012771,-0.850031685,3.53E-05,0.00036421,MAF 54 | ZBTB44,7.327663371,6.456004923,-0.871658448,3.91E-05,0.000391272,ZBTB44 55 | ZNF24,6.908955603,6.023757434,-0.885198169,1.55E-05,0.000199344,ZNF24 56 | HIF3A,3.062825177,2.134157856,-0.928667321,0.017219993,0.045755137,HIF3A 57 | ZNF844,4.656037697,3.674503134,-0.981534562,5.44E-05,0.000499423,ZNF844 58 | NFIB,8.819863202,7.832033016,-0.987830185,1.28E-06,3.69E-05,NFIB 59 | SOX9,5.669199824,4.66263641,-1.006563413,0.003128411,0.011532024,SOX9 60 | HSF4,7.091523496,6.084104346,-1.00741915,0.000686732,0.003453572,HSF4 61 | RORA,7.714696379,6.683938163,-1.030758217,3.24E-07,1.66E-05,RORA 62 | PPARA,6.815543858,5.750689843,-1.064854015,5.26E-07,2.23E-05,PPARA 63 | EMX1,3.609113655,2.515288866,-1.09382479,0.001882078,0.00775388,EMX1 64 | PBX1,7.124770763,5.91067351,-1.214097252,0.001132075,0.005177865,PBX1 65 | ZNF433,3.016559991,1.764858334,-1.251701657,2.64E-06,6.01E-05,ZNF433 66 | TFEC,6.514479968,5.258478718,-1.256001251,2.01E-05,0.000239737,TFEC 67 | HNF4G,5.387089969,4.097233806,-1.289856163,0.000286436,0.001751677,HNF4G 68 | SOX6,6.242849948,4.889070203,-1.353779746,0.00017412,0.00120078,SOX6 69 | ZNF189,6.319506036,4.94865784,-1.370848196,5.87E-06,0.000103073,ZNF189 70 | NFIA,8.312120407,6.940997963,-1.371122444,1.75E-07,1.20E-05,NFIA 71 | GLIS1,4.6791304,3.307625413,-1.371504987,1.86E-05,0.000227893,GLIS1 72 | HNF1B,7.844890905,6.42808529,-1.416805615,8.99E-07,3.05E-05,HNF1B 73 | RORC,6.126707907,4.684006198,-1.44270171,1.07E-05,0.000151444,RORC 74 | ZNF704,7.80440551,6.272164514,-1.532240996,1.36E-07,1.07E-05,ZNF704 75 | HNF4A,6.621788932,5.079223639,-1.542565293,0.003250991,0.011896631,HNF4A 76 | MLXIPL,4.999030698,3.445113477,-1.553917221,0.002896666,0.010873898,MLXIPL 77 | AR,6.407713516,4.730935956,-1.67677756,7.33E-06,0.000119408,AR 78 | KLF15,3.341134907,1.600577289,-1.740557618,0.000122695,0.000923786,KLF15 79 | ESRRG,4.200522422,2.442064543,-1.758457879,0.000554192,0.002936155,ESRRG 80 | PAX2,7.047186215,5.285828763,-1.761357452,3.20E-05,0.000337017,PAX2 81 | HNF1A,5.396807495,3.438554563,-1.958252932,2.98E-07,1.58E-05,HNF1A 82 | HLF,5.741575603,3.628940903,-2.1126347,1.83E-07,1.24E-05,HLF 83 | ZNF711,4.797310768,2.388449141,-2.408861627,1.41E-07,1.10E-05,ZNF711 84 | EMX2,5.447542179,2.854829826,-2.592712353,4.94E-07,2.14E-05,EMX2 85 | -------------------------------------------------------------------------------- /Figure 7/scMEGA pipeline for constructing TF networks.R: -------------------------------------------------------------------------------- 1 | ###############scMEGA pipeline################ 2 | suppressMessages(library(ArchR)) 3 | suppressMessages(library(Seurat)) 4 | suppressMessages(library(Signac)) 5 | suppressMessages(library(scMEGA)) 6 | suppressMessages(library(harmony)) 7 | suppressMessages(library(Nebulosa)) 8 | suppressMessages(library(BSgenome.Hsapiens.UCSC.hg38)) 9 | suppressMessages(library(ggplot2)) 10 | suppressMessages(library(dplyr)) 11 | suppressMessages(library(BSgenome.Hsapiens.UCSC.hg38)) 12 | suppressMessages(library(JASPAR2020)) 13 | suppressMessages(library(TFBSTools)) 14 | suppressMessages(library(igraph)) 15 | suppressMessages(library(ggraph)) 16 | 17 | inputdata.10x <- Read10X_h5("./filtered_feature_bc_matrix.h5")###the combined expression file of cellranger-arc 18 | 19 | # extract RNA and ATAC data 20 | rna_counts <- inputdata.10x$`Gene Expression` 21 | atac_counts <- inputdata.10x$Peaks 22 | 23 | # filter peaks by chromosome 24 | atac_counts <- atac_counts[grep("chr", rownames(atac_counts)), ] 25 | 26 | obj.rna <- CreateSeuratObject(counts = rna_counts) 27 | obj.rna[["percent.mt"]] <- PercentageFeatureSet(obj.rna, pattern = "^MT-") 28 | 29 | barcode <- rownames(meta_epi) 30 | 31 | obj.rna <- obj.rna[,barcode] 32 | 33 | # create seurat object 34 | Epi_aggr <- CreateSeuratObject( 35 | counts = obj.rna@assays$RNA@counts, 36 | assay = "RNA", 37 | meta.data = meta_epi 38 | ) 39 | 40 | Epi_aggr[["ATAC"]] <- CreateChromatinAssay( 41 | counts = obj.atac@assays$ATAC@counts, 42 | sep = c(":", "-"), 43 | min.cells = 1, 44 | genome = 'hg38', 45 | fragments = './atac_fragments.tsv.gz' 46 | ) 47 | 48 | 49 | # extract gene annotations from EnsDb 50 | annotations <- suppressWarnings(GetGRangesFromEnsDb(ensdb = EnsDb.Hsapiens.v86, verbose = FALSE)) 51 | 52 | # change to UCSC style since the data was mapped to hg38 53 | seqlevelsStyle(annotations) <- 'UCSC' 54 | 55 | # add the gene information to the object 56 | Annotation(Epi_aggr) <- annotations 57 | 58 | 59 | Epi_aggr@active.assay <- "RNA" 60 | 61 | 62 | Epi_aggr <- NormalizeData(Epi_aggr) 63 | Epi_aggr <- FindVariableFeatures(Epi_aggr) 64 | Epi_aggr <- ScaleData(Epi_aggr) 65 | Epi_aggr <- RunPCA(Epi_aggr) 66 | 67 | Epi_aggr <- RunHarmony( 68 | Epi_aggr, 69 | group.by.vars = c("sample"), 70 | reduction = "pca", 71 | max.iter.harmony = 30, 72 | dims.use = 1:30, 73 | project.dim = FALSE, 74 | plot_convergence = FALSE 75 | ) 76 | 77 | epi_sub <- subset(Epi_tra,cells=colnames(Epi_aggr)) 78 | Epi_aggr@reductions$harmony <- epi_sub@reductions$harmony 79 | 80 | Epi_aggr <- RunDiffusionMap(Epi_aggr, reduction = "harmony",dims = 1:15) 81 | 82 | Epi_aggr <- AddTrajectory(object = Epi_aggr, 83 | trajectory = c("IM2_like", "IM4_like"), 84 | group.by = "predicted_class", 85 | reduction = "dm", 86 | dims = 1:2, 87 | use.all = FALSE) 88 | p <- TrajectoryPlot(object = Epi_aggr, 89 | reduction = "dm", 90 | continuousSet = "blueYellow", 91 | size = 1, 92 | addArrow = FALSE) 93 | 94 | p 95 | 96 | 97 | ############Extended Data Figure 10F#################### 98 | res_TF <- SelectTFs(object = Epi_aggr, return.heatmap = TRUE) 99 | df.cor <- res_TF$tfs 100 | ht_TF <- res_TF$heatmap 101 | draw(ht_TF) 102 | 103 | 104 | 105 | res <- SelectGenes(object = Epi_aggr, 106 | labelTop1 = 0, 107 | labelTop2 = 0) 108 | df.p2g <- res$p2g 109 | 110 | tf.gene.cor <- GetTFGeneCorrelation(object = Epi_aggr, 111 | tf.use = df.cor$tfs, 112 | gene.use = unique(df.p2g$gene), 113 | tf.assay = "chromvar", 114 | gene.assay = "RNA", 115 | trajectory.name = "Trajectory") 116 | 117 | 118 | motif.matching <- Epi_aggr@assays$ATAC@motifs@data 119 | colnames(motif.matching) <- Epi_aggr@assays$ATAC@motifs@motif.names 120 | motif.matching <- motif.matching[unique(df.p2g$peak), unique(tf.gene.cor$tf)] 121 | 122 | df.grn <- GetGRN(motif.matching = motif.matching, 123 | df.cor = tf.gene.cor, 124 | df.p2g = df.p2g) 125 | 126 | # define colors for nodes representing TFs (i.e., regulators) 127 | df.cor <- df.cor[order(df.cor$time_point), ] 128 | tfs.timepoint <- df.cor$time_point 129 | names(tfs.timepoint) <- df.cor$tfs 130 | 131 | # plot the graph, here we can highlight some genes 132 | df.grn2 <- df.grn %>% 133 | subset(correlation > 0.5) %>% 134 | select(c(tf, gene, correlation)) %>% 135 | rename(weights = correlation) 136 | 137 | ############ Figure 7O ############# 138 | 139 | p <- GRNPlot(df.grn2, 140 | tfs.use = c("HNF1B","HNF1A","HNF4G","HNF4A","RORC","TFEC","EMX2","EMX1","AR", 141 | "ZBTB7C","BACH1" ,"CEBPB", 142 | "FOSL2" ,"FOSL1", 143 | "NFKB2","NFKB1","RELA", 144 | "EHF","HOXD10","HOXD11","E2F7" 145 | ), #####previously defined IM4 or IM2 related TFs 146 | tfs.timepoint = tfs.timepoint, 147 | show.tf.labels = TRUE, 148 | genes.highlight = IM4_feature$IM2_up, 149 | seed = 42, 150 | plot.importance = T, 151 | min.importance = 2, 152 | remove.isolated = F) 153 | 154 | options(repr.plot.height = 40, repr.plot.width = 40) 155 | 156 | ############ Figure 7P ############# 157 | Epi_aggr <- AddTargetAssay(object = Epi_aggr, df.grn = df.grn2) 158 | p1 <- PseudotimePlot(object = Epi_aggr, tf.use = "HNF1A")+scale_color_npg() 159 | p2 <- PseudotimePlot(object = Epi_aggr, tf.use = "CEBPB")+scale_color_npg() 160 | 161 | p1 + p2 -------------------------------------------------------------------------------- /Figure 7/snATAC analysis.R: -------------------------------------------------------------------------------- 1 | ########### following the process of Figure 2 2 | 3 | meta_epi <- Epi_snRNA@meta.data 4 | rownames(meta_epi) <- paste("aggr#",rownames(meta_epi),sep = "") 5 | meta_epi <- meta_epi[rownames(meta_epi)%in%Epi$cellNames,] 6 | length(Epi$cellNames) 7 | Epi <- projHeme2[rownames(meta_epi), ] 8 | 9 | Epi <- addCellColData(ArchRProj = Epi, data = meta_epi$predicted_class, 10 | cells = rownames(meta_epi), name = "predicted_class",force = TRUE) 11 | 12 | 13 | Epi <- addUMAP( 14 | ArchRProj = Epi, reducedDims = "IterativeLSI", name = "UMAP", force = TRUE, 15 | nNeighbors = 30, minDist = 0.5, metric = "cosine" 16 | ) 17 | 18 | Epi <- addImputeWeights(Epi) 19 | 20 | 21 | pathToMacs2 <- ("dir/macs2") #path to MACS2 22 | 23 | Epi <- addReproduciblePeakSet( 24 | ArchRProj = Epi, 25 | groupBy = "sample", 26 | pathToMacs2 = pathToMacs2 27 | ) 28 | 29 | Epi <- addPeakMatrix(Epi) 30 | 31 | Epi <- addPeak2GeneLinks( 32 | ArchRProj = Epi, 33 | reducedDims = "IterativeLSI", 34 | useMatrix = "GeneExpressionMatrix" 35 | ) 36 | 37 | ############ Extended Data Figure 10C ################ 38 | p <- plotPeak2GeneHeatmap(ArchRProj = Epi, groupBy = "sample") 39 | p 40 | plotPDF(plotList = list(p), 41 | name = "P2L_heat.pdf", 42 | ArchRProj = Epi, 43 | addDOC = FALSE, width = 9, height = 6) 44 | 45 | 46 | ############Figure 7L############# 47 | Epi <- addMotifAnnotations(ArchRProj = Epi, motifSet = "cisbp", name = "Motif") 48 | 49 | motifPositions <- getPositions(Epi) 50 | motifs <- c("AR") 51 | markerMotifs <- unlist(lapply(motifs, function(x) grep(x, names(motifPositions), value = TRUE))) 52 | markerMotifs <- markerMotifs[markerMotifs %ni% "SREBF1_22"] 53 | markerMotifs 54 | 55 | seFoot <- getFootprints( 56 | ArchRProj = Epi, 57 | positions = motifPositions["AR_689"], 58 | groupBy = "sample" 59 | ) 60 | 61 | plotFootprints( 62 | seFoot = seFoot, 63 | ArchRProj = Epi, 64 | normMethod = "Subtract", 65 | plotName = "AR_motif", 66 | addDOC = FALSE, 67 | plot = T, 68 | smoothWindow = 5 69 | ) 70 | 71 | #############Figure 7N############# 72 | p <- plotBrowserTrack( 73 | ArchRProj = Epi, 74 | groupBy = "sample", 75 | geneSymbol = "CEBPB", 76 | upstream = 100000, 77 | downstream = 50000, 78 | loops = getPeak2GeneLinks(Epi) 79 | ) 80 | grid::grid.newpage() 81 | grid::grid.draw(p[[1]]) 82 | 83 | 84 | plotPDF(plotList = p, 85 | name = "Plot-Tracks-CEBPB.pdf", 86 | ArchRProj = Epi, 87 | addDOC = FALSE, width = 9, height = 6) 88 | 89 | 90 | ############Figure 7H############# 91 | 92 | Epi <- addReproduciblePeakSet( 93 | ArchRProj = Epi, 94 | groupBy = "predicted_class", 95 | pathToMacs2 = pathToMacs2 96 | ) 97 | 98 | Epi <- addPeakMatrix(Epi) 99 | 100 | Epi <- addPeak2GeneLinks( 101 | ArchRProj = Epi, 102 | reducedDims = "IterativeLSI", 103 | useMatrix = "GeneExpressionMatrix" 104 | ) 105 | 106 | Epi <- addMotifAnnotations(ArchRProj = Epi, motifSet = "cisbp", name = "Motif") 107 | 108 | Epi <- addBgdPeaks(Epi,force = TRUE) 109 | 110 | Epi <- addDeviationsMatrix( 111 | ArchRProj = Epi, 112 | peakAnnotation = "Motif", 113 | force = TRUE 114 | ) 115 | 116 | plotVarDev <- getVarDeviations(Epi, name = "MotifMatrix", plot = TRUE,n = 15) 117 | 118 | plotVarDev 119 | 120 | 121 | #############Figure 7I############# 122 | motifPositions <- getPositions(Epi) 123 | motifs <- c("HNF1A","HNF4A","FOSL1","JUNB") 124 | markerMotifs <- unlist(lapply(motifs, function(x) grep(x, names(motifPositions), value = TRUE))) 125 | markerMotifs <- markerMotifs[markerMotifs %ni% "SREBF1_22"] 126 | markerMotifs 127 | 128 | seFoot <- getFootprints( 129 | ArchRProj = Epi, 130 | positions = motifPositions[markerMotifs], 131 | groupBy = "predicted_class" 132 | ) 133 | 134 | col <- c("IM2_like"="#4DBBD5FF","IM4_like"="#E64B35FF") 135 | 136 | plotFootprints( 137 | seFoot = seFoot, 138 | ArchRProj = Epi, 139 | pal = col, 140 | normMethod = "Subtract", 141 | plotName = "HNF_AP1", 142 | addDOC = FALSE, 143 | plot = T, 144 | #height = 6.5, 145 | smoothWindow = 5 146 | ) -------------------------------------------------------------------------------- /Figure 7/trajectory analysis of TF motifs.R: -------------------------------------------------------------------------------- 1 | Epi_trajectory <- Epi_snRNA[,Epi_snRNA$nUMI>median(Epi_snRNA$nUMI)]#only use top 50% to minimize the influence of sequencing depth 2 | 3 | library(monocle3) 4 | featureData <- as.data.frame(Epi_trajectory@assays$RNA@counts@Dimnames[[1]]) 5 | colnames(featureData) <- "gene_short_name" 6 | 7 | rownames(featureData) <- featureData[,1] 8 | cds <- new_cell_data_set((Epi_trajectory@assays$RNA@data), 9 | cell_metadata = Epi_trajectory@meta.data, 10 | gene_metadata = featureData) 11 | cds 12 | 13 | 14 | #cds <- preprocess_cds(cds, num_dim = 50) 15 | #cds <- align_cds(cds, alignment_group = "sample") 16 | 17 | cds@int_colData@listData[["reducedDims"]]@listData[["UMAP"]] <- as.matrix(Epi_trajectory@reductions[["umap"]]@cell.embeddings) 18 | 19 | cds@int_colData@listData[["reducedDims"]]@listData[["PCA"]] <- as.matrix(Epi_trajectory@reductions[["pca"]]@cell.embeddings) 20 | cds@int_colData@listData[["reducedDims"]]@listData[["Aligned"]] <- as.matrix(Epi_trajectory@reductions[["harmony"]]@cell.embeddings) 21 | 22 | library(destiny) 23 | 24 | dm <- DiffusionMap(Epi_trajectory@reductions$harmony@cell.embeddings[,1:15], 25 | k = 3,n_pcs = NA, verbose = TRUE, n_eigs=2)#obtain diffusion map dimension 26 | 27 | cds@int_colData@listData[["reducedDims"]]@listData[["UMAP"]][,1] <- dm@eigenvectors$DC1 28 | cds@int_colData@listData[["reducedDims"]]@listData[["UMAP"]][,2] <- dm@eigenvectors$DC2 29 | 30 | plot_cells(cds, label_groups_by_cluster=FALSE, color_cells_by = "predicted_class") 31 | 32 | cds <- cluster_cells(cds) 33 | plot_cells(cds, color_cells_by = c("partition")) 34 | 35 | cds <- learn_graph(cds,close_loop=F) 36 | plot_cells(cds,show_trajectory_graph=T, 37 | group_label_size = 4, 38 | color_cells_by = "sample", 39 | cell_size = 0.7, 40 | label_cell_groups=FALSE, 41 | label_groups_by_cluster=FALSE, 42 | label_leaves=FALSE, 43 | label_branch_points=FALSE) + scale_color_manual(values = celltype) 44 | cds <- order_cells(cds) 45 | 46 | ################# Figure 7A ################## 47 | plot_cells(cds,show_trajectory_graph=F, 48 | color_cells_by = "pseudotime", 49 | label_cell_groups=FALSE, 50 | label_leaves=FALSE, 51 | cell_size = 0.7, 52 | label_branch_points=FALSE, 53 | graph_label_size=1.5) 54 | 55 | Epi_trajectory$monocle3_pseudotime <- cds@principal_graph_aux@listData[["UMAP"]][["pseudotime"]] 56 | meta <- Epi_trajectory@meta.data 57 | 58 | ################# Figure 7B ################## 59 | ggplot(meta, aes(monocle3,Cluster1)) + #Cluster1 represents IM2 score from AddModuleScore 60 | geom_point(aes(color = predicted_class, alpha=0.9),size=0.05,meta) + 61 | geom_smooth(color="black",se = T) + scale_fill_npg()+ 62 | theme_classic() + 63 | scale_color_manual( 64 | values = c("#4DBBD5","#E64B35") 65 | ) 66 | 67 | 68 | ##################### draw pseudoheatmap with monocle 2 #################### 69 | library(monocle) 70 | 71 | seq <- seq(from=1,to=ncol(Epi_trajectory),by=7) 72 | metadata <- Epi_trajectory@meta.data[seq,] 73 | featureData <- as.data.frame(Epi_trajectory@assays$RNA@counts@Dimnames[[1]]) 74 | rownames(featureData) <- featureData[,1] 75 | pd <- new("AnnotatedDataFrame", data = metadata) 76 | fd <- new("AnnotatedDataFrame", data = featureData) 77 | 78 | monocle <- new("CellDataSet", exprs=as.matrix(Epi_trajectory@assays$RNA@data[,seq]), phenoData = pd, 79 | expressionFamily = negbinomial(),lowerDetectionLimit=0.1) 80 | monocle 81 | 82 | monocle <- estimateSizeFactors(monocle) 83 | monocle <- estimateDispersions(monocle) 84 | 85 | monocle@phenoData@data[["Pseudotime"]]=monocle@phenoData@data$monocle3_pseudotime 86 | 87 | newdata <- data.frame(Pseudotime = seq(min(monocle2$pseudotime), 88 | max(monocle2$pseudotime), length.out = 1000)) 89 | 90 | TF_final <- read.csv("Figure 6/TF_final.csv") 91 | cds_Epi_subset <- monocle[c(unique(TF_final$symbol)),] 92 | genSmoothCurves_mat<-genSmoothCurves(cds_Epi_subset, 93 | new_data = newdata, 94 | trend_formula = "~sm.ns(pseudotime, df = 3)", 95 | cores = 1) 96 | 97 | order <- order(monocle2$pseudotime,decreasing = F) 98 | 99 | mark_gene <- c("ZBTB7C","CEBPB","HOXD10","HIF1A","TFE3","PPARA","TFEC","HNF1B", 100 | "HNF4A","HNF1A","AR","ZNF711","EMX2","NEF2L2","FOSL1","JUNB","FOSL2") 101 | mark_gene <- TF_final$symbol[TF_final$symbol%in%mark_gene] 102 | gene_pos <- which(TF_final$symbol %in% mark_gene) 103 | 104 | mark_gene <- rownames(genSmoothCurves_mat)[rownames(genSmoothCurves_mat)%in%mark_gene] 105 | gene_pos <- which(rownames(genSmoothCurves_mat) %in% mark_gene) 106 | row_anno <- rowAnnotation(mark_gene = anno_mark(at = gene_pos, 107 | labels = mark_gene)) 108 | 109 | cols <- brewer.pal(11,"RdBu")[11:1] 110 | 111 | ####################### Figure 7C ############################ 112 | heat <- Heatmap(t(scale(t(genSmoothCurves_mat[,order]))), 113 | col = colorRamp2(seq(-2,2,length.out = 11),cols), 114 | cluster_rows = T, 115 | cluster_columns = F, 116 | show_column_names = F, 117 | show_row_names = T, 118 | use_raster=F, 119 | border = NA, 120 | show_row_dend = T, 121 | na_col = "grey85", 122 | clustering_method_rows = "ward.D", 123 | column_gap = unit(1, "mm"), 124 | row_gap = unit(0, "mm"), 125 | row_dend_width = unit(20, "mm"), 126 | right_annotation = row_anno, 127 | column_title = NULL) 128 | heat 129 | dev.off() 130 | 131 | #### Figure 7G was drawn using the same pipeline 132 | 133 | 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ccRCC_multiomics 2 | 3 | ccRCC is a complex disease with remarkable immune and metabolic heterogeneity. Here, we present a TJ-RCC cohort, performing genomic, transcriptomic, proteomic, metabonomic and spatial multi-omic profiling on 100 ccRCC cases. Using the scRNA-seq-derived signature, we identify 4 subtypes. Multilevel profiling distinguishes a unique ccRCC subtype, De-clear cell differentiated (DCCD) -ccRCC, with distinctive metabolic features. DCCD cancer cells are characterized by fewer lipid droplets, extremely inhibited metabolic activity, enhanced nutrients uptake capability and a high proliferation rate, leading to poor prognosis. Using single-cell and spatial trajectory analysis, we demonstrate that DCCD is a common mode of ccRCC progression. Even among stage I patients, DCCD indicates worse outcomes and higher recurrence rate, indicating it cannot be cured by nephrectomy alone. This study provides a treatment strategy based on immune subtypes, which could enable precise clinical management of ccRCC. 4 | 5 | The source code has been meticulously organized to mirror the sequence of its appearance within the article. We have segmented the code pertinent to various omics studies and appropriately allocated them across corresponding directories. Additionally, the source data associated with each section of the code have been conveniently bundled within their respective file folders. Sequencing datasets generated in this work are available at Zenodo (https://zenodo.org/record/8063124) and Mendeley database under (DOI: 10.17632/x4krt22tf4.1) and (DOI: 10.17632/rhh5rpvxhd.1). 6 | --------------------------------------------------------------------------------