图书馆(MOFA2)图书馆(tidyverse)图书馆(pheatmap)
为了演示MOFA2中的MEFISTO方法,我们模拟了一个小型示例数据集,其中包含4个不同的视图和一个协变量,用它来定义时间轴make_example_data
.模拟基于4个因素,其中两个因素沿协变量平滑变化(具有不同的长度尺度),另外两个因素独立于协变量。
set.seed(2020) #设置样本数量和时间点N <- 200 time <- seq(0,1,长度。out = N) #生成样例数据dd <- make_example_data(sample_cov = time, n_samples = N, n_factors = 4, n_features = 200, n_views = 4, lscales = c(0.5, 0.2, 0,0)) #输入数据data <- dd$data # covariate matrix with samples in columns time <- dd$sample_cov rownames(time) <- "time"
让我们来看看我们想要恢复的模拟的潜在时间过程:
df <- data.frame(dd$Z, t(time)) df <- gather(df, key = "factor", value = "value", starts_with("simulated_factor")) ggplot(df, aes(x = time, y = value)) + geom_point() + facet_grid(~factor))
使用MEFISTO框架与使用MOFA2非常相似。然而,除了组学数据之外,我们现在还额外指定了每个样本的时间点。如果您不熟悉MOFA2框架,看一看可能会有帮助MOFA2教程第一。
为了创建MOFA对象,我们需要指定训练数据和用于模式检测和平滑因子推断的协变量。在这里,sample_cov
是一个矩阵,其中列为样本,一行包含时间点。样本顺序必须与数据列中的顺序一致。或者,可以提供包含一个的数据帧样本
与数据中的示例名称匹配的示例名称的列。
首先,我们首先创建一个标准的MOFA模型。
Sm <- create_mofa(data = dd$data)
##从矩阵列表中创建MOFA对象(特征为行,样本为列)…
现在,我们可以添加额外的时间协变量,我们想用它来训练。
Sm <- set_covariables (Sm, covariables = time
##未经训练的MEFISTO模型,具有以下特征:##视图数量:4 ##视图名称:view_1 view_2 view_3 view_4 ##特征数量(每个视图):200 200 200 200 ##组数量:1 ##组名称:group1 ##样本数量(每个组):200 ##每个样本的共变量数量:1 ## #
现在,我们成功地创建了一个包含4个视图、1个组和1个协变量的MOFA对象,为每个样本提供了时间点。
在训练之前,我们可以为模型、训练和数据预处理指定各种选项。如果没有指定选项,模型将使用默认选项。另请参阅get_default_data_options
,get_default_model_options
而且get_default_training_options
查看默认值并在需要的地方更改它们。为了说明,我们只使用少量的迭代。
重要的是,为了激活功能分解(MEFISTO)的协变量的使用,我们现在需要指定标准MOFA选项mefisto_options
.为此,您可以使用默认选项(get_default_mefisto_options
),除非您想使用高级选项,如跨组对齐。
Data_opts <- get_default_data_options(sm) model_opts <- get_default_model_options(sm) model_opts$num_factors <- 4 train_opts <- get_default_training_options(sm) train_opts$maxiter <- 100 mefisto_opts <- get_default_mefisto_options(sm) sm <- prepare_mofa(sm, model_options = model_opts, mefisto_options = mefisto_opts, training_options = train_opts, data_options = Data_opts)
现在,MOFA对象已经准备好进行训练。使用run_mofa
我们可以拟合模型,该模型保存在指定为的文件中输出文件
.如果没有指定,输出将保存在一个临时位置。
Outfile = file.path(tempdir(),"model.hdf5") sm <- run_mofa(sm, Outfile)
使用plot_variance_explained
我们可以探究哪个因素在哪个视图中是活跃的。plot_factor_cor
告诉我们这些因素是否相关。
plot_variance_explained (sm)
R <- plot_factor_cor(sm)
MOFA模型已经学习了每个因素的尺度参数,这些参数为我们提供了每个因素沿协变量(这里是时间)的平滑度指示,在0到1之间。0的刻度表示该因子捕获了与时间无关的变化,接近1的值告诉我们,该因子随时间变化非常平稳。
get_scales (sm)
因子1因子2因子3因子4 0.00000000 0.01198385 0.99892405 0.99496226
在这个例子中,我们找到了两个非光滑因子和两个光滑因子。使用plot_factors_vs_cov
我们可以沿着时间线绘制因子,在那里我们可以区分平滑和非平滑随时间的变化。
Plot_factors_vs_cov (sm, color_by = "time")
对于更多定制的图,我们可以提取包含每个样本的因子和协变量值的底层数据。
df <- plot_factors_vs_cov(sm, color_by = "time", legend = FALSE, return_data = TRUE) head(df)
样本协变量值。协变量因子值。因子组color_by ## 1 sample_1 time 0.00000000 Factor1 -4.98804804 group1 0.00000000 ## 2 sample_1 time 0.00000000 Factor2 0.50849870 group1 0.00000000 ## 3 sample_1 time 0.00000000 Factor4 -1.62411065 group1 0.00000000 ## 4 sample_1 time 0.00000000 Factor3 -2.65808006 group1 0.00000000 ## 5 sample_10 time 0.04522613 Factor4 -1.73719393 group1 0.04522613 ## 6 sample_10 time 0.04522613 Factor2 0.02898659 group1 0.04522613 ## shape_by ## 11 ## 2 1 ## 3 1 ## 41 ## 5 1 ## 6
我们可以将上面的图与上面模拟的因素进行比较,发现模型在时间上重新捕获了两种光滑模式和两种非光滑模式。请注意,因子对符号是不变的,例如因子4是模拟因子的负数,但我们可以简单地将因子及其权重乘以-1,以获得精确的模拟因子。
与标准MOFA一样,我们现在可以通过探索权重或执行特征集丰富分析来更深入地了解这些因素的含义。
Plot_weights (sm, factors = 4, view = 1)
Plot_top_weights (sm, factors = 3, view = 2)
此外,我们可以看看每个因子在一段时间内的最高特征值,看看它们的模式是否与相应因子(这里是因子3)的模式一致。
Plot_data_vs_cov (sm, factor=3, features = 2, color_by = "time", dot_size = 1)
此外,我们可以将一个因子内插或外推到新的值。在这里,我们只显示了预测的平均值,为了获得不确定性,您需要在训练之前指定新的值get_default_mefisto_options new_value美元(sm)
.
sm <- interpolate_factors(sm, new_values = seq(0,1.1,0.01)) plot_interpolation_vs_covariate(sm, covariate = "time", factors = "Factor3")
sessionInfo ()
## R版本4.2.0 RC (2022-04-19 r82224) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.4 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.15-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.15-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]stats graphics grDevices utils datasets methods基础## ##其他附加包:## [1]pheatmap_1.0.12 forcats_0.5.1 string_1 .4.0 dplyr_1.0.8 ## [5] purrr_0.3.4 readr_2.1.2 tidyr_1.2.0 tibble_1 .1.6 ## [9] ggplot2_3.3.5 tidyverse_1.3.1 MOFA2_1.6.0 BiocStyle_2.24.0 ## ##通过命名空间加载(并且未附加):[1] fs_1.5.2 matrixstats_0.0.2.0 lubridate_1.8.0 ## [28] bookdown_0.26 sass_0.4.1 ## [7] rprojroot_2.0.3 tools_4.2.0 backports_1.4.1 ## [10] bslib_0.3.1 utf8_1.2.2 R6_2.5.1 ## [13] hdf5filters_1.8.0 ## [19] BiocGenerics_0.42.0 colorspace_2.0-3 rhdf5filters_1.8.0 ## [19] withr_2.5.0 tidyselect_1.1.2 compiler_4.2.0 ## [25] rvest_1.0.2 cli_3.3.0 basil磁盘.utils_1.8.0 ## [25] xml2_1.3.3 DelayedArray_0.22.0 labeling_0.4.2 ## [28] bookdown_0.26 sass_0.4.1[37] htmltools_0.5.2 MatrixGenerics_1.8.0 pkgconfig_2.0.3 ## [40] dbplyr_2.1.1 fastmap_1.1.0 rlang_1.0.2 ## [43] readxl_1.4.0 rstudioapi_0.13 farver_2.1.0 ## [46] jquerylib_0.1.4 generics_0.1.2 jsonlite_1.8.0 ## [49] magrittr_2.0.3 Matrix_1.4-1 Rcpp_1.0.8.3 ## [52] munsell_0.5.0 S4Vectors_0.34.0 Rhdf5lib_1.18.0 ## [55] fansi_1.0.3 reticulate_1.24 lifecycle_1.0.1 ## [58][61] rtsne_7.6 yaml_2.3.5 rhdf5_2.40.0 ## [64] Rtsne_0.16 plyr_1.8.7 grid_4.2.0 ## [67] dir.expiry_1.4.0 lattice_0.20-45 haven_2.5.0 ## [70] cowplot_1.1.1 hms_1.1.1 magick_2.7.3 ## [73] knitr_1.38 pillar_1.7.0 reshape2_1.4.4 ## [76] stats4_4.2.0 reprex_2.0.1 glue_1.6.2 ## [82] png_0.1-7 vctrs_0.4.1 tzdb_0.3.0 ## [85] cellranger_1.1.0 gtable_0.3.0 assertthat_0.2.1 ## [88] xfun_0.30 broom_0.8.0IRanges_2.30.0 ## [91] corrplot_0.92 ellipsis_0.3.2 here_1.0.1