數(shù)據(jù)分析:完整的成體系的生存分析的結(jié)果匯總

詳細(xì)情況請(qǐng)前往

數(shù)據(jù)分析:完整的成體系的生存分析的結(jié)果匯總

科研繪圖系列:組合多個(gè)文章圖

介紹

本章節(jié)全面匯總了生存分析的相關(guān)各類分析方法,形成了一個(gè)系統(tǒng)化的生存分析教程。通過(guò)這個(gè)教程,讀者可以深入了解生存分析所涵蓋的多種分析技術(shù)。組合下列結(jié)果的可視化可見: 科研繪圖系列:組合多個(gè)文章圖

數(shù)據(jù)下載

本教程所需要的所有數(shù)據(jù)下載鏈接見:

image.png

多變量生存分析

多變量生存分析模塊是一個(gè)統(tǒng)計(jì)分析工具,它提供了兩個(gè)主要步驟來(lái)識(shí)別和評(píng)估影響生存時(shí)間的變量:

  1. 單變量生存分析篩選:首先,該模塊基于單變量生存分析來(lái)篩選與生存時(shí)間相關(guān)的特征。這一步驟涉及對(duì)每個(gè)變量單獨(dú)進(jìn)行生存分析,以確定它們與生存時(shí)間的關(guān)聯(lián)程度。通過(guò)這種方式,可以識(shí)別出在單變量分析中顯著相關(guān)的變量,為后續(xù)的多變量分析打下基礎(chǔ)。
  2. 多變量生存分析:其次,將單變量分析中顯著相關(guān)的特征組合在一起,進(jìn)行多變量生存分析。這一步驟旨在評(píng)估多個(gè)變量同時(shí)對(duì)生存時(shí)間的影響,以及它們之間的相互作用。多變量生存分析可以提供更全面的風(fēng)險(xiǎn)評(píng)估,因?yàn)樗紤]了多個(gè)變量的聯(lián)合效應(yīng),從而允許更精確地預(yù)測(cè)生存時(shí)間和識(shí)別重要的預(yù)后因素。
library(tidyverse)
library(survminer)
library(survival)
library(reshape2)
library(cowplot)
library(caret)
library(pROC)


# Load data
############
load("./data/MHC_immunotherapy.RData")
ICB_data <- ICB_study[ICB_study$study == "Liu_2019", ]

# Remove NA
############
ICB_data <- na.omit(ICB_data)

# Binarize
#############
ICB_data$highTMB <- ICB_data$TMB > quantile(ICB_data$TMB, 0.5, na.rm = T)
ICB_data$strongMHC1 <- ICB_data$MGBS1 > quantile(ICB_data$MGBS1, 0.5, na.rm = T)
ICB_data$strongMHC2 <- ICB_data$MGBS2 > quantile(ICB_data$MGBS2, 0.5, na.rm = T)
ICB_data$strongMHCnorm <- ICB_data$MGBSnorm > quantile(ICB_data$MGBSnorm, 0.5, na.rm = T)
ICB_data$highPD1 <- ICB_data$PD1_noBatch > quantile(ICB_data$PD1_noBatch, 0.5, na.rm = T)
ICB_data$highCYT <- ICB_data$CYT_noBatch > quantile(ICB_data$CYT_noBatch, 0.5, na.rm = T)
ICB_data$highMHC1 <- ICB_data$MHC1_noBatch > quantile(ICB_data$MHC1_noBatch, 0.5, na.rm = T)
ICB_data$highMHC2 <- ICB_data$MHC2_noBatch > quantile(ICB_data$MHC2_noBatch, 0.5, na.rm = T)
ICB_data$highPurity <- ICB_data$purity > quantile(ICB_data$purity, 0.5, na.rm = T)
ICB_data$highPloidy <- ICB_data$ploidy > quantile(ICB_data$ploidy, 0.5, na.rm = T)
ICB_data$highHeterogeneity <- ICB_data$heterogeneity > quantile(ICB_data$heterogeneity, 0.5, na.rm = T)
ICB_data$highLDH <- ICB_data$LDH == 1

# Save
######
dir.create("./results/data/", recursive = T)
save.image(file = "./results/data/manuscript_multivariate.RData")
saveRDS(list(Cox_model_ls = Cox_model_ls, LR_model_ls = LR_model_ls), file = "./results/data/manuscript_multivariate.rds")

相關(guān)分析

library(corrplot)
library(RColorBrewer)
library(cowplot)

load("./data/MHC_immunotherapy.RData")
ICB_data <- ICB_study[ICB_study$study == "Liu_2019", ]

head(ICB_data)

# Create correlation plot
###########################
vars <- c("TMB", "neoAgB1", "neoAgB2", "neoAgBnorm", "pMHC1", "pMHC2", 
          "pMHCnorm", "MGBS1", "MGBS2", "MGBSnorm", "MHC1_noBatch", 
          "MHC2_noBatch", "heterogeneity", "ploidy", "purity", 
          "MHC1_zyg", "MHC2_zyg", "PD1_noBatch", "B2M_noBatch", "CYT_noBatch")

cor_df <- ICB_data[, vars]
colnames(cor_df) <- c("TMB", "abs. MHC-I neoAgB", "abs. MHC-II neoAgB", 
                      "abs. diff. neoAgB", "norm. MHC-I neoAgB", "norm. MHC-II neoAgB", 
                      "norm. diff. neoAgB", "MGBS-I", "MGBS-II", "MGBS-d", "MHC-I expr.", 
                      "MHC-II expr.", "heterogeneity", "ploidy", "purity", "MHC-I zygosity", 
                      "MHC-II zygosity", "PD-L1 (CD274) expr.", "B2M expr.", "CYT")

# Save
#########
save.image(file = "./results/data/manuscript_correlation_analysis.RData")
saveRDS(p, file = "./results/data/manuscript_correlation_analysis.rds")

比例分析

library(survminer)
library(survival)
library(reshape2)

# Load data
############
load("./data/MHC_immunotherapy.RData")

ICB_data <- ICB_study[ICB_study$study == "Liu_2019", ]

# MHC binders
#############
ICB_data$highTMB <- ICB_data$TMB > quantile(ICB_data$TMB, 0.5, na.rm = T)
ICB_data$strongMHC1 <- ICB_data$MGBS1 > quantile(ICB_data$MGBS1, 0.5, na.rm = T)
ICB_data$strongMHC2 <- ICB_data$MGBS2 > quantile(ICB_data$MGBS2, 0.5, na.rm = T)
ICB_data$strongMHCnorm <- ICB_data$MGBSnorm > quantile(ICB_data$MGBSnorm, 0.5, na.rm = T)

# Save
######
save.image(file = "./results/data/manuscript_RECIST.RData")
saveRDS(p_BR_ls, file = "./results/data/manuscript_RECIST.rds")

生存分析

生存分析是一種統(tǒng)計(jì)方法,用于描述、測(cè)量和分析事件的特征,尋找其發(fā)生的原因,并對(duì)生存以及事件發(fā)生的時(shí)間進(jìn)行預(yù)測(cè)。生存分析的目的在于研究哪些因素影響了事件的發(fā)生速度及生存時(shí)間的長(zhǎng)短,它探索的因變量是一個(gè)包含了刪失或者截除數(shù)據(jù)的事件時(shí)間變量。生存分析涉及的事件可以是患者的存活時(shí)間、疾病的復(fù)發(fā)、企業(yè)的存活時(shí)間等。

生存分析的目的包括但不限于以下幾點(diǎn):

  1. 描述生存時(shí)間:描述生存時(shí)間的分布情況,包括生存時(shí)間的中位數(shù)、平均值等統(tǒng)計(jì)量。
  2. 識(shí)別風(fēng)險(xiǎn)因素:識(shí)別和評(píng)估影響生存時(shí)間的各種風(fēng)險(xiǎn)因素。
  3. 預(yù)測(cè)生存概率:預(yù)測(cè)個(gè)體在特定時(shí)間點(diǎn)之前生存或事件發(fā)生的概率。
  4. 比較生存情況:比較不同群體或不同條件下的生存情況,例如比較不同治療方案的效果。
  5. 評(píng)估干預(yù)效果:評(píng)估醫(yī)療干預(yù)、政策或其他措施對(duì)生存時(shí)間的影響。

生存分析統(tǒng)計(jì)方法涉及統(tǒng)計(jì)描述、差異性分析和回歸分析三大類。其中,統(tǒng)計(jì)描述主要有Kaplan-Meier估計(jì)法和Life table估計(jì)法;差異性分析主要有對(duì)數(shù)秩檢驗(yàn)和Wilcoxon test;而回歸分析主要有Cox比例和非比例風(fēng)險(xiǎn)回歸模型、參數(shù)回歸模型。

library(survminer)
library(survival)
library(reshape2)
library(tidyverse)

# Load data
############
load("./data/MHC_immunotherapy.RData")


# Save
#########
save.image(file = "./results/data/manuscript_validation.RData")
saveRDS(list(p_val_ls = p_val_ls, HR_df_all = HR_df_all), file = "./results/data/manuscript_validation.rds")

生存分析2

生存分析是一種統(tǒng)計(jì)方法,用于描述、測(cè)量和分析事件的特征,尋找其發(fā)生的原因,并對(duì)生存以及事件發(fā)生的時(shí)間進(jìn)行預(yù)測(cè)。生存分析的目的在于研究哪些因素影響了事件的發(fā)生速度及生存時(shí)間的長(zhǎng)短,它探索的因變量是一個(gè)包含了刪失或者截除數(shù)據(jù)的事件時(shí)間變量。生存分析涉及的事件可以是患者的存活時(shí)間、疾病的復(fù)發(fā)、企業(yè)的存活時(shí)間等。

生存分析的目的包括但不限于以下幾點(diǎn):

  1. 描述生存時(shí)間:描述生存時(shí)間的分布情況,包括生存時(shí)間的中位數(shù)、平均值等統(tǒng)計(jì)量。
  2. 識(shí)別風(fēng)險(xiǎn)因素:識(shí)別和評(píng)估影響生存時(shí)間的各種風(fēng)險(xiǎn)因素。
  3. 預(yù)測(cè)生存概率:預(yù)測(cè)個(gè)體在特定時(shí)間點(diǎn)之前生存或事件發(fā)生的概率。
  4. 比較生存情況:比較不同群體或不同條件下的生存情況,例如比較不同治療方案的效果。
  5. 評(píng)估干預(yù)效果:評(píng)估醫(yī)療干預(yù)、政策或其他措施對(duì)生存時(shí)間的影響。

生存分析統(tǒng)計(jì)方法涉及統(tǒng)計(jì)描述、差異性分析和回歸分析三大類。其中,統(tǒng)計(jì)描述主要有Kaplan-Meier估計(jì)法和Life table估計(jì)法;差異性分析主要有對(duì)數(shù)秩檢驗(yàn)和Wilcoxon test;而回歸分析主要有Cox比例和非比例風(fēng)險(xiǎn)回歸模型、參數(shù)回歸模型。

library(tidyverse)
library(scales)
library(survival)

# Load expression data and metadata
## Load ICB metadata in an encapsulated object "all_data"
all_data <- new.env()
load("./data/MHC_immunotherapy.RData", all_data)

metadata <- all_data$ICB_study



# Save
#########
save.image(file = "./results/data/manuscript_validation_compare_variables.RData")
saveRDS(p_ls, file = "./results/data/manuscript_validation_compare_variables.rds")

logreg分析 & ROC分析

logreg分析和ROC分析是兩種不同的統(tǒng)計(jì)方法,它們?cè)跈C(jī)器學(xué)習(xí)和數(shù)據(jù)分析中有著各自的應(yīng)用和目的。

logreg分析(Logistic Regression Analysis)

logreg分析,即邏輯回歸分析,是一種用于二分類問題的統(tǒng)計(jì)方法。它通過(guò)估計(jì)特定變量(或變量組合)對(duì)結(jié)果發(fā)生概率的影響來(lái)工作。邏輯回歸使用最大似然估計(jì)(MLE)方法來(lái)估計(jì)模型參數(shù),即找到能夠使得觀測(cè)數(shù)據(jù)出現(xiàn)概率(似然函數(shù))最大的參數(shù)值。

ROC分析(Receiver Operating Characteristic Analysis)

ROC分析是一種用于評(píng)估分類模型性能的方法,特別適用于比較不同分類器的性能。ROC分析通過(guò)繪制真正例率(True Positive Rate, TPR)和假正例率(False Positive Rate, FPR)的對(duì)比圖來(lái)展示分類器的性能。TPR是正確分類為正例的比例,而FPR是錯(cuò)誤分類為正例的比例。ROC曲線下的面積(AUC)是衡量分類器性能的一個(gè)重要指標(biāo),AUC值越高,表明分類器的區(qū)分能力越強(qiáng)

library(tidyverse)
library(survminer)
library(survival)
library(reshape2)
library(cowplot)
library(caret)
library(pROC)

# Load data
load("./data/MHC_immunotherapy.RData")
p_ls <- list()

# Get model from Liu - preIpi
ICB_data <- ICB_study[!is.na(ICB_study$study) & ICB_study$study == "Liu_2019", ]
ICB_data <- ICB_data[ICB_data$preIpi == T, ]

ICB_data$MGBS2_z <- (mean(ICB_data$MGBS2, na.rm = T) - ICB_data$MGBS2) / sd(ICB_data$MGBS2, na.rm = T) # Z-score normalization
ICB_data$MHC2_z <- (mean(ICB_data$MHC2, na.rm = T) - ICB_data$MHC2) / sd(ICB_data$MHC2, na.rm = T) # Z-score normalization
model <- glm(R ~ MHC2_z + MGBS2_z, data = ICB_data, family = binomial)
p_ls$model <- model
# summary(model)

# Save
#########
save.image(file = "./results/data/manuscript_validation_multivariate.RData")
saveRDS(p_ls, file = "./results/data/manuscript_validation_multivariate.rds")

生存分析3

生存分析是一種統(tǒng)計(jì)方法,用于描述、測(cè)量和分析事件的特征,尋找其發(fā)生的原因,并對(duì)生存以及事件發(fā)生的時(shí)間進(jìn)行預(yù)測(cè)。生存分析的目的在于研究哪些因素影響了事件的發(fā)生速度及生存時(shí)間的長(zhǎng)短,它探索的因變量是一個(gè)包含了刪失或者截除數(shù)據(jù)的事件時(shí)間變量。生存分析涉及的事件可以是患者的存活時(shí)間、疾病的復(fù)發(fā)、企業(yè)的存活時(shí)間等。

生存分析的目的包括但不限于以下幾點(diǎn):

  1. 描述生存時(shí)間:描述生存時(shí)間的分布情況,包括生存時(shí)間的中位數(shù)、平均值等統(tǒng)計(jì)量。
  2. 識(shí)別風(fēng)險(xiǎn)因素:識(shí)別和評(píng)估影響生存時(shí)間的各種風(fēng)險(xiǎn)因素。
  3. 預(yù)測(cè)生存概率:預(yù)測(cè)個(gè)體在特定時(shí)間點(diǎn)之前生存或事件發(fā)生的概率。
  4. 比較生存情況:比較不同群體或不同條件下的生存情況,例如比較不同治療方案的效果。
  5. 評(píng)估干預(yù)效果:評(píng)估醫(yī)療干預(yù)、政策或其他措施對(duì)生存時(shí)間的影響。

生存分析統(tǒng)計(jì)方法涉及統(tǒng)計(jì)描述、差異性分析和回歸分析三大類。其中,統(tǒng)計(jì)描述主要有Kaplan-Meier估計(jì)法和Life table估計(jì)法;差異性分析主要有對(duì)數(shù)秩檢驗(yàn)和Wilcoxon test;而回歸分析主要有Cox比例和非比例風(fēng)險(xiǎn)回歸模型、參數(shù)回歸模型。

library(survminer)
library(survival)
library(reshape2)
library(tidyverse)

# Load data
############
load("./data/MHC_immunotherapy.RData")
ICB_data <- ICB_study[ICB_study$study == "Liu_2019", ]
ICB_data$highTMB <- ICB_data$TMB > quantile(ICB_data$TMB, 0.5, na.rm = T)

# Save
#########
save.image(file = "./results/data/manuscript_surv_neoAgB.RData")
saveRDS(list(p_TMB = p_TMB, p_pMHC1 = p_pMHC1, p_pMHC2 = p_pMHC2, 
             p_pMHCnorm = p_pMHCnorm, p_neoAgB1 = p_neoAgB1, 
             p_neoAgB2 = p_neoAgB2, p_neoAgBnorm = p_neoAgBnorm, 
             fp_pMHC = fp_pMHC, fp_neoAgB = fp_neoAgB), 
        file = "./results/data/manuscript_surv_neoAgB.rds")

生存分析4

生存分析是一種統(tǒng)計(jì)方法,用于描述、測(cè)量和分析事件的特征,尋找其發(fā)生的原因,并對(duì)生存以及事件發(fā)生的時(shí)間進(jìn)行預(yù)測(cè)。生存分析的目的在于研究哪些因素影響了事件的發(fā)生速度及生存時(shí)間的長(zhǎng)短,它探索的因變量是一個(gè)包含了刪失或者截除數(shù)據(jù)的事件時(shí)間變量。生存分析涉及的事件可以是患者的存活時(shí)間、疾病的復(fù)發(fā)、企業(yè)的存活時(shí)間等。

生存分析的目的包括但不限于以下幾點(diǎn):

  1. 描述生存時(shí)間:描述生存時(shí)間的分布情況,包括生存時(shí)間的中位數(shù)、平均值等統(tǒng)計(jì)量。
  2. 識(shí)別風(fēng)險(xiǎn)因素:識(shí)別和評(píng)估影響生存時(shí)間的各種風(fēng)險(xiǎn)因素。
  3. 預(yù)測(cè)生存概率:預(yù)測(cè)個(gè)體在特定時(shí)間點(diǎn)之前生存或事件發(fā)生的概率。
  4. 比較生存情況:比較不同群體或不同條件下的生存情況,例如比較不同治療方案的效果。
  5. 評(píng)估干預(yù)效果:評(píng)估醫(yī)療干預(yù)、政策或其他措施對(duì)生存時(shí)間的影響。

生存分析統(tǒng)計(jì)方法涉及統(tǒng)計(jì)描述、差異性分析和回歸分析三大類。其中,統(tǒng)計(jì)描述主要有Kaplan-Meier估計(jì)法和Life table估計(jì)法;差異性分析主要有對(duì)數(shù)秩檢驗(yàn)和Wilcoxon test;而回歸分析主要有Cox比例和非比例風(fēng)險(xiǎn)回歸模型、參數(shù)回歸模型。

library(survminer)
library(survival)
library(reshape2)
library(tidyverse)

# Load data
############
load("./data/MHC_immunotherapy.RData")
ICB_data <- ICB_study[ICB_study$study == "Liu_2019", ]
ICB_data$highTMB <- ICB_data$TMB > quantile(ICB_data$TMB, 0.5, na.rm = T)

# Save
#########
save.image(file = "./results/data/manuscript_surv.RData")
saveRDS(p_surv_ls, file = "./results/data/manuscript_surv.rds")

差異分析

limma差異分析是一種用于基因表達(dá)數(shù)據(jù)的統(tǒng)計(jì)分析方法,它主要用于識(shí)別差異表達(dá)的基因。以下是對(duì)limma差異分析的詳細(xì)解釋:

  1. limma包簡(jiǎn)介: limma(Linear Models for Microarray Data)是一個(gè)R/Bioconductor軟件包,它提供了一套集成的解決方案,用于分析基因表達(dá)實(shí)驗(yàn)數(shù)據(jù)。limma包含了豐富的功能,用于處理復(fù)雜的實(shí)驗(yàn)設(shè)計(jì),并通過(guò)信息借用來(lái)克服樣本量小的問題。
  2. 主要特點(diǎn)
  • 線性模型:limma使用線性模型來(lái)分析基因表達(dá)數(shù)據(jù),這包括簡(jiǎn)單復(fù)制設(shè)計(jì)、多組實(shí)驗(yàn)、直接設(shè)計(jì)、因子設(shè)計(jì)和時(shí)間序列實(shí)驗(yàn)等。
  • 經(jīng)驗(yàn)貝葉斯統(tǒng)計(jì):limma解釋了經(jīng)驗(yàn)貝葉斯測(cè)試統(tǒng)計(jì)量,這些統(tǒng)計(jì)量用于在基因表達(dá)分析中獲得后驗(yàn)方差估計(jì)器。
  • 質(zhì)量權(quán)重:limma允許使用質(zhì)量權(quán)重、自適應(yīng)背景校正和控制點(diǎn)與線性模型結(jié)合使用,以提高小樣本實(shí)驗(yàn)中基因和基因集水平的推斷能力。
  1. 應(yīng)用范圍
  • 最初,limma主要用于微陣列數(shù)據(jù)的分析,但隨著技術(shù)的發(fā)展,limma的能力已經(jīng)顯著擴(kuò)展,現(xiàn)在可以執(zhí)行RNA sequencing(RNA-seq)數(shù)據(jù)的差異表達(dá)和差異剪接分析。
  • 這使得之前僅限于微陣列數(shù)據(jù)的下游分析工具現(xiàn)在也可以用于RNA-seq數(shù)據(jù)。
  • 分析流程
  • limma分析的主要步驟包括數(shù)據(jù)預(yù)處理、線性模型擬合、經(jīng)驗(yàn)貝葉斯方法應(yīng)用以及結(jié)果的診斷和解釋。
  • limma提供了一系列的函數(shù),用于存儲(chǔ)數(shù)據(jù)或結(jié)果的不同類別,以及在線文檔頁(yè)面,用于每個(gè)單獨(dú)的函數(shù)和每個(gè)主要步驟。
  • 與其他方法的比較
  • 在RNA-seq數(shù)據(jù)的差異分析中,limma、EdgeR和DESeq2是三種有效的工具。雖然它們的分析協(xié)議在某些步驟上有所不同(例如,limma使用線性模型進(jìn)行統(tǒng)計(jì)分析,而EdgeR和DESeq2使用負(fù)二項(xiàng)分布),但它們的結(jié)果部分重疊,每種方法都有其自身的優(yōu)勢(shì)。
library(tidyverse)
library(edgeR)
library(limma)
library(fgsea)

load("./data/MHC_immunotherapy.RData")

# Added: mapping table as ENSG -> HGNC must occur here (created by create_ENSG_HGNC_map_table.R)
ENSG_HGNC_map_table <- ENSG_HGNC_map_table %>%
  select(gene_id = ensembl_gene_id, gene = external_gene_name, gene_biotype)

# Save
dir.create("./results/temp/", recursive = TRUE)
saveRDS(DGE_ls, "./results/temp/DGE_ls.rds")

功能分析

功能富集分析GSEA(Gene Set Enrichment Analysis)是一種用于解釋基因表達(dá)數(shù)據(jù)的計(jì)算方法,它能夠確定特定基因集是否在某種生物學(xué)狀態(tài)下顯著富集。GSEA的核心思想是,相比單個(gè)基因的分析,一群基因(基因集)的協(xié)同變化可能更具有生物學(xué)意義。

GSEA分析的主要步驟包括:

  1. 計(jì)算富集分?jǐn)?shù):評(píng)估每個(gè)基因集在排名列表中的表現(xiàn),富集分?jǐn)?shù)(Enrichment Score, ES)是一個(gè)介于0到1之間的值,用來(lái)衡量基因集的富集程度。
  2. 估計(jì)富集分?jǐn)?shù)顯著性水平:通過(guò)計(jì)算基因集的p值來(lái)評(píng)估其統(tǒng)計(jì)顯著性,這通常涉及到使用排列測(cè)試來(lái)確定基因集富集分?jǐn)?shù)的隨機(jī)分布。
  3. 矯正多重假設(shè)驗(yàn)證:由于GSEA會(huì)同時(shí)測(cè)試多個(gè)基因集,因此需要對(duì)p值進(jìn)行校正以控制假陽(yáng)性率,常用的方法包括Bonferroni校正和FDR(False Discovery Rate)校正。

GSEA分析的目的在于:

  • 識(shí)別生物過(guò)程中的關(guān)鍵基因集:GSEA能夠識(shí)別在特定條件下顯著富集的基因集,這些基因集可能涉及特定的生物學(xué)過(guò)程或疾病相關(guān)的通路。
  • 揭示基因表達(dá)的總體趨勢(shì):GSEA不僅關(guān)注差異表達(dá)的基因,而是利用所有基因的表達(dá)數(shù)據(jù),揭示整個(gè)基因集的表達(dá)趨勢(shì),從而判斷特定通路是被激活還是抑制。
  • 提高數(shù)據(jù)分析的可解釋性:通過(guò)將基因集與已知的生物學(xué)知識(shí)相聯(lián)系,GSEA提高了基因表達(dá)數(shù)據(jù)的解釋性,使得研究者能夠更好地理解數(shù)據(jù)背后的生物學(xué)意義。
library(tidyverse)
library(ggrepel)
library(fgsea)
library(cowplot)

load("./data/MHC_immunotherapy.RData")
DGE_ls <- readRDS("./results/temp/DGE_ls.rds")

# Save
#########
p_DGE_ls <- list(p_fGSEA = fGSEA_plot, p_RS_ls = p_RS_ls, p_GSEA_preIpi = p_GSEA_preIpi)
save.image(file = "./results/data/manuscript_DGE_analysis.RData")
saveRDS(p_DGE_ls, file = "./results/data/manuscript_DGE_analysis.rds")

介紹

組合多個(gè)文章圖,圖所需要的結(jié)果文件見:數(shù)據(jù)分析:完整的成體系的生存分析的結(jié)果匯總

數(shù)據(jù)下載

數(shù)據(jù)下載鏈接見:

圖所需要的結(jié)果文件見:數(shù)據(jù)分析:完整的成體系的生存分析的結(jié)果匯總

圖1

p_ls <- readRDS("./results/data/manuscript_surv.rds")
p_BR_ls <- readRDS("./results/data/manuscript_RECIST.rds")

# Create fig
p1 <- p_ls$p_TMB +
  ggtitle("Tumor Mutation Burden")
p2 <- p_ls$p_strongMHC1 +
  ggtitle("MGBS-I")
p3 <- p_ls$p_strongMHC2 +
  ggtitle("MGBS-II")
p4 <- p_ls$p_strongMHCnorm +
  ggtitle("MGBS-d")


dir.create("./results/figs/", recursive = T)
ggplot2::ggsave(paste0("./results/figs/manuscript_fig1.pdf"), p, width = 178, height = 265 / 1.5, units = "mm")
image.png

圖2

p_ls <- readRDS("./results/data/manuscript_surv.rds")

p1 <- plot_grid(
  NA, p_ls$p_ipi_vs_noIpi,
  ncol = 2
)


ggplot2::ggsave(paste0("./results/figs/manuscript_fig2.pdf"), p, width = 178, height = 0.5 * 265, units = "mm")

image.png

圖3

p_ls <- readRDS("./results/data/manuscript_multivariate.rds")

# ROC & surv
p_ROC_surv <- plot_grid(
  p_ls$LR_model_ls$"TRUE"$p_ROC, p_ls$LR_model_ls$"TRUE"$p_surv, NA,
  ncol = 1,
  labels = c("a", "c"),
  label_size = 8
)

ggplot2::ggsave("./results/figs/manuscript_fig3.pdf", p, width = 178, height = 265 / 2, units = "mm")

image.png

圖4

p_ls <- readRDS("./results/data/manuscript_DGE_analysis.rds")


ggplot2::ggsave("./results/figs/manuscript_fig4.pdf", p, width = 3 / 4 * 178, height = 265 / 3, units = "mm")

image.png

附圖2

p_ls <- readRDS("./results/data/manuscript_surv.rds")

p <- plot_grid(
  p_ls$p_th_ls$TMBclass$`0.75` + ggtitle("Tumor Mutation Burden") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$TMBclass$`0.9` + ggtitle("Tumor Mutation Burden") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$TMBclass$`0.95` + ggtitle("Tumor Mutation Burden") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC1class$`0.75` + ggtitle("MGBS-I") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC1class$`0.9` + ggtitle("MGBS-I") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC1class$`0.95` + ggtitle("MGBS-I") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC2class$`0.75` + ggtitle("MGBS-II") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC2class$`0.9` + ggtitle("MGBS-II") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHC2class$`0.95` + ggtitle("MGBS-II") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHCnormclass$`0.75` + ggtitle("MGBS-d") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHCnormclass$`0.9` + ggtitle("MGBS-d") + theme(legend.background = element_blank()),
  p_ls$p_th_ls$MHCnormclass$`0.95` + ggtitle("MGBS-d") + theme(legend.background = element_blank()),
  ncol = 3
)

ggplot2::ggsave(paste0("./results/figs/manuscript_figS2_surv_th.pdf"), p, width = 178, height = 265, units = "mm")

image.png

附圖3

p <- readRDS("./results/data/manuscript_correlation_analysis.rds")


# Create figure
ggplot2::ggsave(paste0("./results/figs/manuscript_figS3_correlation.pdf"), p, width = 178, height = 265, units = "mm")

image.png

附圖4

p_ls <- readRDS("./results/data/manuscript_validation.rds")

# Forest plot
# Adjust sizes facet
gt <- ggplot_gtable(ggplot_build(p_ls$p_val_ls$fp))
# gtable_show_layout(gt)
gt$heights[10] <- 1 / 2 * gt$heights[10]
# fp<- grid.draw(gt)

# Forest plot preIpi
fp_preIpi <- p_ls$p_val_ls$fp_preIpi

# Create figure
ggplot2::ggsave(paste0("./results/figs/manuscript_figS4_validation.pdf"), p, width = 178, height = 265, units = "mm")

image.png

附圖5

p_ls <- readRDS("./results/data/manuscript_surv_neoAgB.rds")

p <- plot_grid(
  p_ls$fp_neoAgB + ggtitle("Absolute Neoantigen Burden") + theme(title = element_text(size = 8)), p_ls$fp_pMHC + ggtitle("Normalized Neoantigen Burden") + theme(title = element_text(size = 8)),
  p_ls$p_neoAgB1 + ggtitle("MHC-I NeoAgB"), p_ls$p_pMHC1 + ggtitle("norm. MHC-I NeoAgB"),
  p_ls$p_neoAgB2 + ggtitle("MHC-II NeoAgB"), p_ls$p_pMHC2 + ggtitle("norm. MHC-II NeoAgB"),
  p_ls$p_neoAgBnorm + ggtitle("diff. NeoAgB"), p_ls$p_pMHCnorm + ggtitle("norm. diff. NeoAgB"),
  ncol = 2
)

# Create figures
ggplot2::ggsave(paste0("./results/figs/manuscript_figS5_neoAgB.pdf"), p_neoAgB, width = 178, height = 265, units = "mm")

image.png

附圖6-7

p_ls <- readRDS("./results/data/manuscript_multivariate.rds")

# 1. COX
t_preIpi <- p_ls$Cox_model_ls$"TRUE"$t_uni
t_ipiNaive <- p_ls$Cox_model_ls$"FALSE"$t_uni

p1 <- plot_grid(
  t_ipiNaive, t_preIpi,
  ncol = 2
)

p_cox <- plot_grid(
  p1, p_ls$Cox_model_ls$fp_multi + scale_y_continuous(limits = c(0.15, 12), trans = "log10"), NA,
  ncol = 1,
  rel_heights = c(1, 1 / 2, 1)
)


# Create figures
ggplot2::ggsave(paste0("./results/figs/manuscript_figS6_LogReg.pdf"), p_logReg, width = 178, height = 265, units = "mm")
ggplot2::ggsave(paste0("./results/figs/manuscript_figS7_Cox.pdf"), p_cox, width = 178, height = 265, units = "mm")

image.png

附圖8

p_ls <- readRDS("./results/data/manuscript_validation_multivariate.rds")
p_compare_ls <- readRDS("./results/data/manuscript_validation_compare_variables.rds")


# Create figure
ggplot2::ggsave(paste0("./results/figs/manuscript_figS8_validation_multivariate.pdf"), p, width = 178, height = 265, units = "mm")

image.png

附圖9

p_ls <- readRDS("./results/data/manuscript_DGE_analysis.rds")


ggplot2::ggsave(paste0("./results/figs/manuscript_figS9_GSEA.pdf"), p, width = 178, height = 265, units = "mm")

image.png

系統(tǒng)信息

  • 數(shù)據(jù)分析
R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.2

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Shanghai
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] lubridate_1.9.3 forcats_1.0.0   stringr_1.5.1   dplyr_1.1.4     purrr_1.0.2     readr_2.1.5    
 [7] tidyr_1.3.1     tibble_3.2.1    tidyverse_2.0.0 gridExtra_2.3   ggplot2_3.5.1   cowplot_1.1.3  

loaded via a namespace (and not attached):
 [1] vctrs_0.6.5       cli_3.6.3         rlang_1.1.4       stringi_1.8.3     generics_0.1.3   
 [6] glue_1.7.0        colorspace_2.1-0  hms_1.1.3         scales_1.3.0      fansi_1.0.6      
[11] munsell_0.5.0     tzdb_0.4.0        lifecycle_1.0.4   compiler_4.3.3    timechange_0.3.0 
[16] pkgconfig_2.0.3   rstudioapi_0.16.0 R6_2.5.1          tidyselect_1.2.1  utf8_1.2.4       
[21] pillar_1.9.0      magrittr_2.0.3    tools_4.3.3       withr_3.0.0       gtable_0.3.4
  • 畫圖
R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.2

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Shanghai
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ggrepel_0.9.5   fgsea_1.28.0    edgeR_4.0.16    limma_3.58.1    scales_1.3.0    pROC_1.18.5    
 [7] caret_6.0-94    lattice_0.22-6  reshape2_1.4.4  survival_3.7-0  survminer_0.4.9 ggpubr_0.6.0   
[13] lubridate_1.9.3 forcats_1.0.0   stringr_1.5.1   dplyr_1.1.4     purrr_1.0.2     readr_2.1.5    
[19] tidyr_1.3.1     tibble_3.2.1    tidyverse_2.0.0 gridExtra_2.3   ggplot2_3.5.1   cowplot_1.1.3  

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1     timeDate_4032.109    digest_0.6.35        rpart_4.1.23        
 [5] timechange_0.3.0     lifecycle_1.0.4      statmod_1.5.0        magrittr_2.0.3      
 [9] compiler_4.3.3       rlang_1.1.4          tools_4.3.3          utf8_1.2.4          
[13] data.table_1.15.2    knitr_1.45           ggsignif_0.6.4       plyr_1.8.9          
[17] BiocParallel_1.36.0  abind_1.4-5          withr_3.0.0          nnet_7.3-19         
[21] stats4_4.3.3         fansi_1.0.6          xtable_1.8-4         colorspace_2.1-0    
[25] future_1.33.1        globals_0.16.3       iterators_1.0.14     MASS_7.3-60.0.1     
[29] cli_3.6.3            generics_0.1.3       rstudioapi_0.16.0    future.apply_1.11.1 
[33] km.ci_0.5-6          tzdb_0.4.0           splines_4.3.3        parallel_4.3.3      
[37] survMisc_0.5.6       vctrs_0.6.5          hardhat_1.3.1        Matrix_1.6-5        
[41] carData_3.0-5        car_3.1-2            hms_1.1.3            rstatix_0.7.2       
[45] listenv_0.9.1        locfit_1.5-9.9       foreach_1.5.2        gower_1.0.1         
[49] recipes_1.0.10       glue_1.7.0           parallelly_1.37.1    codetools_0.2-19    
[53] stringi_1.8.3        gtable_0.3.4         munsell_0.5.0        pillar_1.9.0        
[57] ipred_0.9-14         lava_1.8.0           R6_2.5.1             KMsurv_0.1-5        
[61] backports_1.4.1      broom_1.0.5          class_7.3-22         fastmatch_1.1-4     
[65] Rcpp_1.0.12          nlme_3.1-164         prodlim_2023.08.28   xfun_0.43           
[69] zoo_1.8-12           pkgconfig_2.0.3      ModelMetrics_1.2.2.2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容