censcyt
当协变量(如生存时间)受到正确审查时,提供了在细胞术中进行差异丰度分析的功能。censcyt 1.6.0
的censcyt
包提供了功能的差异丰度分析,当一个协变量是受权利审查。扩展了的差异发现功能diffcyt包(Weber et al. 2019)通过包括细胞群体丰度和一个删减变量之间的关联测试,如生存时间。一般工作流程与困难的包装小插图在继续之前最好先熟悉一下。
作为一个简短的总结,diffcyt
工作流程包括原始细胞分析数据的预处理,通过自动聚类和差异丰度分析(或差异状态分析)分配细胞类型(Weber et al. 2019).如果与细胞术样本相关的时间到事件变量(例如生存时间)是可用的,人们可能会对细胞种群丰度和这个时间到事件变量之间的关系感兴趣。在实践中,时间到偶数变量的一个常见问题是,并非所有事件都被观察到。相反,可能只有一个最小的时间是已知的,换句话说,这些值是(正确的)审查。如果使用标准分析(如testDA_GLMM
或testDA_edgeR
从diffcyt
)在参数估计中引入偏差。最简单的解决方法是排除所有不完整的样本,这被称为完整案例分析或按列表删除。但在某些情况下,例如高审查率或非随机审查,这种方法表现不佳,因为它会大大降低统计能力或引入偏差。
通常,当一个变量被删除时,可以使用经典的生存分析方法(例如Cox比例风险模型)进行关联测试。但是在差异丰度分析的背景下diffcyt
删减变量不是响应,而是协变量(与经典的生存分析相反)。使用的方法censcyt
克服这一障碍的方法是多重归责鲁宾(1988)这允许以增加运行时间为代价使用标准的差分分析方法。多重归责包括三个步骤归责,分析而且池这些都是在censcyt
.
在第一步(归责)通过从预测分布中随机抽取值来替换缺失(或删减)值,从而生成多个完整的数据集(见表1).然后在第二步(分析),在每个估算数据集上拟合一个GLMM,其中细胞种群计数被建模为响应,而截尾(或更确切地说是估算的)变量(例如生存时间)作为协变量。在最后一步(池)第二步的结果结合使用鲁宾斯规则鲁宾(1988)这就考虑到了来自归因的额外不确定性。
在函数中主要可用三种插补方法testDA_censoredGLMM
均列于表1.
方法 | 描述 | 的缩写 |
---|---|---|
完整的案例分析 | 不完整的样本被移除。 | cc |
风险集归责(Taylor et al. 2002) | 截尾值由其风险集中的随机值替换。 | rs |
kaplan meier归责(Taylor et al. 2002) | 截尾值被随机抽取的生存函数所取代,该生存函数与相应截尾值的风险集相匹配。 | 公里 |
平均剩余寿命归责(条件多重归责,Atem (2017)) | 不完整数据的引导和通过添加平均剩余寿命(给定审查时间的事件的预期时间)替换审查值。 | 推广 |
如果最大的值被删减,生存函数就不会达到它的理论最小值0,这就会留下一些未定义的替换。在Kaplan-Meier imputation中实现了多个处理此问题的选项(表2).
描述 | 的缩写 |
---|---|
设置观察到的最大值。(默认) | 公里 |
将生存函数的尾部建模为指数分布。(Moeschberger and Klein 1985) | km_exp |
将生存函数的尾部建模为威布尔分布。(Moeschberger and Klein 1985) | km_wei |
根据顺序统计量将所有大于最大观测值的截尾值替换为期望值。(Moeschberger and Klein 1985) | km_os |
首先,加载必要的包。重要的是要注意加载censcyt
也会载入diffcyt
.
suppressPackageStartupMessages({library(censcyt) library(ggplot2) library(summarizeexperiment) library(tidyr)})
DA分析的主要输入包括细胞群体丰度的聚类乘以样本矩阵。如何获得这些计数在diffcyt装饰图案这里就不再进一步讨论了。相反,为了说明目的,我们模拟了一个数据集。在这种情况下,删减协变量是根据指数分布建模的。为了获得截尾,还模拟了一个附加变量截尾时间,实际测量值为这两个变量中的最小值。
set.seed(1234) nr_samples <- 50 nr_clusters <- 6 #协变量从指数分布中模拟:X_true <- rexp(nr_samples) #检查时间也从指数分布中采样:C <- rexp(nr_samples) #实际观测值是两者中的最小值:X_obs <- pmin(X_true,C) #此外,我们有事件指示器:Event_ind <- ifelse(X_true>C,0,1) #比例检查:(length(Event_ind)-sum(Event_ind))/length(Event_ind)
## [1] 0.52
接下来,细胞计数根据狄利克雷多项分布建模,其中一些集群与协变量有关联。这个函数simulate_multicluster
可用于此。
#每个样本容量的单元数<- round(runif(nr_samples,1e3,1e4)) #狄利克雷多项分布的alpha参数。alphas <- runif(nr_clusters,1,10) #主要模拟函数simulation_output <- simulate_multicluster(alphas = alphas, sizes = sizes, covariate = X_obs, nr_diff = 2, return_summarized_experiment = TRUE, slope = list(0.9)) #作为一个summarizeexperiment对象d_counts <- simulation_output$counts
为了了解这个模拟数据的样子,我们可以绘制每个样本的相对细胞群体丰度与每个细胞群体的删减协变量。
is_diff_cluster <- ifelse(is.na(simulation_output$row_data$paired),FALSE,TRUE) #第一次转换为比例:比例<- as.data.frame(t(apply(assay(d_counts),2,function(x)x/sum(x)))) names(比例)<- paste0("Nr:",names(比例)," - ",ifelse(is_diff_cluster,"DA","non DA")) # then to long format for counts_long <- pivot_long (proportion, cols= seq_len(nr_clusters), names_to = "cluster_id", values_to = "proportion") # add observed(部分检查)变量counts_long$X_obs <- rep(X_obs,each=nr_clusters) # add event indicator counts_long$Event_ind <- factor(rep(Event_ind,each=nr_clusters), levels = c(0,1),labels=c(" deleted ","observed")) ggplot(counts_long) + geom_point(aes(x=X_obs,y=proportion,color=Event_ind)) + facet_wrap(~cluster_id)
图1:相对细胞群丰度与存活时间(X_obs)
Event_ind表示X_obs是否被截尾或观察。
下一步是设置元数据,即测试中使用的协变量。这和在diffcyt
但另外,必须给出截尾协变量的事件指示符,因为截尾变量由两个值表示,测量值本身和测量值(观察值(1)或截尾(0))时的指示符。
#所有的变量和样本id实验者信息<- data.frame(sample_id = seq_len(nr_samples), X_obs = X_obs, Event_ind = Event_ind)
的createFormula
函数与中使用的函数类似diffcyt
但是除此之外event_indicator
必须通过在中给出各自的列名来指定experiment_info
.如果在参数中给出多个协变量cols_fixed
然后event_indicator
与第一个给定的元素有关cols_fixed
.
da_formula <- createFormula(experiment_info = experiment_info, cols_fixed = "X_obs", cols_random = "sample_id", event_indicator = "Event_ind") #也创建对比矩阵测试对比<- matrix(c(0,1))
主要部分是使用函数进行差分测试testDA_censoredGLMM
.它包含了与未审查版本相同的论点testDA_GLMM
(从diffcyt
),并附带两个特定于多重imputation的附加参数。第一个附加参数是mi_reps
(多次输入重复),即执行多个输入步骤的次数。不幸的是,目前还没有明确的规则来确定需要多少次估算,只能凭经验来判断(Buuren 2018).一般来说,如果审查率高,在需要高统计能力的应用中,需要更多的imputation(Buuren 2018).一个“规则”是的二次规则Hippel (2018)哪一个可以显示如果详细的
设置为真正的
.第二个论点是imputation_method
用于指定imputation方法。见表1和表2.
# test with 50 repeat with method risk set imputation (rs) da_out <- testDA_censoredGLMM(d_counts = d_counts, formula = da_formula, contrast = contrast, mi_rep = 30, imputation_method = "km", verbose = TRUE, BPPARAM=BiocParallel::MulticoreParam(workers = 1))
50个值中的26个被审查
##建议的imputation数量:68
看看我们可以用的结果diffcyt
的topTable
功能:
topTable (da_out)
6行3列的数据帧## cluster_id p_val p_adj ## <字符> <数字> <数字> ## 33 0.000898221 0.00538933 ## 6 6 0.005527278 0.01658183 ## 1 1 0.807657070 0.95288779 ## 22 0.952887790 0.95288779 ## 4 4 0.813003970 0.95288779 ## 55 0.703777553 0.95288779
is.na(simulation_output$row_data$paired))
## [1] 3 6
与其使用上面所示的单个函数,还可以使用包装器函数censcyt
哪个类似于diffcyt
包装。首先,模拟一些表达式数据,即一个比上面例子中更真实的起始位置。
#函数来创建表达式的数据(样本)fcs_sim < -函数(n = 2000,意味着= 0,sd = 1, ncol = 10,咖啡= 5){d <——矩阵(sinh (rnorm (n * ncol,意思是,sd)) *咖啡,ncol = ncol) #每一个标记在一个人口严重表示,即这应该结果#“ncol”集群(我在seq_len (ncol)) {d (seq (n / ncol *(张)+ 1,n / ncol * (i)),我]< - sinh (rnorm (n / ncol,意味着+ 2,sd)) *咖啡}colnames (d) < - paste0(“标记”,sprintf(“% 2 d”,1:ncol)) d} #用DA信号创建多个表达式数据样本comb_sim <- function(X, nr_samples = 10, mean = 0, sd = 1, ncol = 10, cof = 5){#创建随机数据(没有差分信号)d_input <- lapply(seq_len(nr_samples), function(i) fcs_sim(mean = mean, sd = sd, ncol = ncol,咖啡(咖啡)#加微分丰富(DA)信号(我在seq_len (nr_samples)){#集群中的细胞数量1 n_da < -轮((plogis (X_true[我]))* 300)#将随机表达式d_input[[我]][seq_len (n_da)] < -矩阵(sinh (rnorm (n_da * ncol,意思是,sd)) *咖啡,ncol = ncol) #增加集群1 d_input表达式[[我]][seq_len (n_da), 1] < - sinh (rnorm (n_da,意味着+ 2,sd)) *咖啡}d_input} #设置参数和装病者d_input < - comb_sim (X_true nr_samples = 50)
的对象experiment_info
,da_formula
而且对比
与上面指定的相同,但必须提供有关测量标记的额外信息。
markker_info <- data.frame(channel_name = paste0("channel", sprintf("%03d", seq_len(10))), markker_name = paste0("marker", sprintf("%02d", seq_len(10))), marker_class = factor(c(rep("type", 10)), levels = c("type", "state", "none")), stringsAsFactors = FALSE)
最后,可以运行包装器函数。论点mi_reps
是指定重复次数在多重imputation和imputation_method
允许设置imputation方法。为了加快计算速度,aBiocParallelParam
对象(如。MulticoreParam
,从包装BiocParallel)可以用于论证BPPARAM
使部分计算并行化。
#运行包装器函数out_DA <- censcyt(d_input, experiment_info, marker_info, formula = da_formula, contrast = contrast, meta_clustering = TRUE, meta_k = 10, seed_clustering = 123, verbose = FALSE, mi_reps = 10, imputation_method = "km", BPPARAM=BiocParallel::MulticoreParam(workers = 1))
## FlowSOM集群在5.9秒内完成
topTable(out_DA, format_vals = TRUE)
## 10行3列的数据帧## cluster_id p_val p_adj ## <字符> <数字> <数字> ## 8 8 0.00142 0.0142 ## 3 3 0.02110 0.1060 ## 7 7 0.31900 0.7970 ## 10 10 0.31900 0.7970 ## 11 0.90300 0.9030 ## 2 2 0.58500 0.9030 ## 4 4 0.76200 0.9030 ## 5 5 0.83400 0.9030 ## 9 9 0.85400 0.9030 ##
(out_DA, analysis_type = "DA", sample_order = order(X_true))
## R版本4.2.1(2022-06-23)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.5 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods ##[8]基础## ##其他附加包:[1] tidyr_1.2.1 SummarizedExperiment_1.28.0 ## [5] GenomeInfoDb_1.34.0 IRanges_2.32.0 ## [7] S4Vectors_0.36.0 BiocGenerics_0.44.0 ## [9] MatrixGenerics_1.10.0 matrixStats_0.62.0 ## [11] ggplot2_3.3.6 censcyt_1.6.0 ## [13] diffcyt_1.18.0 BiocStyle_2.26.0 ## ##通过命名空间加载(并且没有附加):# # # # [1] backports_1.4.1 circlize_0.4.15 [3] plyr_1.8.7 igraph_1.3.5 # # [5] ConsensusClusterPlus_1.62.0 splines_4.2.1 # # [7] flowCore_2.10.0 BiocParallel_1.32.0 # # [9] listenv_0.8.0 TH.data_1.1-1 # # [11] digest_0.6.30 foreach_1.5.2 # # [13] htmltools_0.5.3 magick_2.7.3 # # [15] fansi_1.0.3 magrittr_2.0.3 # # [17] cluster_2.1.4 doParallel_1.0.17 # # [19] limma_3.54.0 ComplexHeatmap_2.14.0 # # [21] globals_0.16.1 sandwich_3.0-2 # # [23] cytolib_2.10.0 colorspace_2.0-3 # # [25] xfun_0.34 dplyr_1.0.10 # #[27] crayon_1.5.2 rcurl_1.98 - 1.9 # # [29] jsonlite_1.8.3 lme4_1.1-31 # # [31] survival_3.4-0 zoo_1.8-11 # # [33] iterators_1.0.14 glue_1.6.2 # # [35] dirmult_0.1.3-5 polyclip_1.10-4 # # [37] gtable_0.3.1 zlibbioc_1.44.0 # # [39] XVector_0.38.0 GetoptLong_1.0.5 # # [41] DelayedArray_0.24.0 car_3.1-1 # # [43] shape_1.4.6 abind_1.4-5 # # [45] scales_1.2.1 mvtnorm_1.1-3 # # [47] DBI_1.1.3 edgeR_3.40.0 # # [49] rstatix_0.7.0 Rcpp_1.0.9 # # [51] clue_0.3 - 62 FlowSOM_2.6.0 # # [53] RColorBrewer_1.1-3 ellipsis_0.3.2## [55] mice_3.14.0 pkgconfig_2.0.3 ## [57] xml_1 .99-0.12 farver_2.1.1 ## [59] sass_0.4.2 locfit_1. 1.6 -9.6 ## [61] utf8_1.2.2 tidyselect_1.2.0 ## [63] labeling_0.4.2 rlang_1.0.6 ## [65] reshape2_1.4.4 munsell_0.5.0 ## [67] tools_4.2.1 cachem_1.0.6 ## [69] cli_3.4.1 generics_0.1.3 ## [71] broom_1.0.1 evaluate_0.17 ## [73] string_1 .4.1 fastmap_1.1.0 ## [75] yaml_2.3.6 knitr_1.40 ## [77] purrr_0.3.5 future_1.28.0 ## [81] png_0.1-7 ggsignif_0.6.4 ## [83]tibble_3.1.8 tweenr_2.0.2 ## [85] bslib_0.4.0 stringi_1.7.8 ## [87] highr_0.9 forcats_0.5.2 ## [89] lattice_0.20-45 Matrix_1.5-1 ## [91] nloptr_2.0.3 vctrs_0.5.0 ## [93] pillar_1.8.1 lifecycle_1.0.3 ## [95] furrr_0.3.1 BiocManager_1.30.19 ## [97] jquerylib_0.1.4 GlobalOptions_0.1.2 ## [99] bitops_1.0-7 colorRamps_2.3.1 ## [101] R6_2.5.1 bookdown_0.29 ## [103] RProtoBufLib_2.10.0 parallely_1.32.1 ## [105] codetools_0.2-18 boot_1.3-28 assertthat_0.2.1 ## [109] rjson_0.2.21 withr_2.5.0 ## [111] multcomp_1.4-20 GenomeInfoDbData_1.2.9 ## [113] broom.mixed_0.2.9.4 parallel_4.2.1 ## [115] grid_4.2.1 minqa_1.2.5 ## [117] rmarkdown_2.17 carData_3.0-5 ## [119] Cairo_1.6-0 Rtsne_0.16 ## [121] ggpubr_0.4.0 ggnewscale_0.4.8 ## [123] ggforce_0.4.1
阿特姆,Folefac D. 2017。带有随机审查预测器的线性回归模型:估计程序。生物统计学和生物特征学开放获取杂志1(2)。https://doi.org/10.19080/bboaj.2017.01.555556.
布伦,史戴菲·范。2018.缺失数据的灵活归因,第二版.https://doi.org/10.1201/9780429492259.
保罗·t·冯·希佩尔2018.“你需要多少个imputation ?”二次法则的两阶段计算社会学方法与研究.https://doi.org/10.1177/0049124117747303.
莫什伯格M. L.和约翰P.克莱因1985。存在极右审查时几种估计生存函数方法的比较生物识别技术41(1): 253。https://doi.org/10.2307/2530660.
唐纳德·b·鲁宾,1988。多重归责概述美国统计协会调查研究方法分会论文集.
泰勒,杰里米·m·g,克里斯汀·l·库珀,约翰·t·韦,阿鲁纳·v·萨尔马,特里维洛尔·e·拉格纳坦,史蒂夫·g·海林加,2002。“在一项非裔美国男性泌尿系统症状调查中,使用多重归因来纠正无反应偏倚。”美国流行病学杂志.https://doi.org/10.1093/aje/kwf110.
韦伯,卢卡斯·M,马尔戈扎塔·诺维卡,夏洛特·森森,马克·d·罗宾逊,2019。“困难:通过高分辨率聚类在高维细胞术中发现差异。”通信生物学.https://doi.org/10.1038/s42003-019-0415-5.