这篇短文包含了一个关于如何使用r训练一个MOFA模型的详细教程在这里.更多关于MOFA应用于各种多组学数据集的例子可以找到在这里

1加载库

库(data.table)库(MOFA2)

2外交部处理我的数据的方法正确吗?

MOFA(以及一般的因子分析模型)有助于揭示包含多个异质性来源的复杂数据集的变化。这需要一个样本量较大(至少15个样本量).此外,MOFA还需要得到多模态测量值同样的样本.如果您的样本缺少一些数据模态,这是没问题的,但必须有相当程度的匹配测量。

3.数据预处理

3.1正常化

对数据进行适当的标准化是至关重要的。模型可以处理三种类型的数据:连续(用高斯似然建模),小计数(用泊松似然建模)和二进制测量(用伯努利似然建模)。非高斯似然给出非最优结果,我们建议用户应用数据转换来获得连续测量。例如,对于基于计数的数据,如RNA-seq或ATAC-seq,我们建议大小因子归一化+方差稳定(即对数转换)。

3.2特征选择

强烈建议您选择每个试验的高可变特征(hvg)在拟合模型之前。这确保了更快的训练和更健壮的推理过程。此外,对于维度差异很大的数据形式,我们建议在更大的视图中进行更强的特征选择,以减少数据形式之间的特征不平衡。

4创建MOFA对象

要创建一个MOFA对象,你需要指定三个维度:样本、特征和视图。还可以为每个示例指定一个组(默认情况下没有组结构)。MOFA对象可以从广泛的输入格式创建,包括:

  • 矩阵列表:建议在数据比较简单的情况下使用。
  • 一个很长的数据帧:建议用于具有多个视图和/或组的复杂数据集。
  • MultiAssayExperiment:用于连接Bioconductor对象。
  • 修拉:针对单细胞基因组学用户。看到这个描述

4.1矩阵列表

矩阵列表,其中每个条目对应一个视图。样本存储在列中,特征存储在行中。

让我们先模拟一些数据

Data <- make_example_data(n_views = 2, n_samples = 200, n_features = 1000, n_factors = 10)[[1]] lapply(Data,dim)
view_1美元# # # # # # # # 200 [1]1000 view_2 # # 200年[1]1000

创建MOFA对象:

MOFAobject <- create_mofa(data)

绘制数据概览

plot_data_overview (MOFAobject)

如果使用多组功能,则可以使用参数作为每个样本的组ID的向量。请记住,多组功能是一个相当高级的选项,我们不鼓励初学者使用。有关多组推断如何工作的详细信息,请阅读FAQ部分而且检查这个小插图

N = ncol(data[[1]]) groups= c(rep("A",N/2), rep("B",N/2)) MOFAobject <- create_mofa(data, groups=groups)

绘制数据概览

plot_data_overview (MOFAobject)

4.2长data.frame

一个带列的长数据框架样本功能视图集团(可选),价值可能是具有多个组学和潜在的多组数据的复杂数据集的最佳格式。同样,不需要添加与缺失数据对应的行:

Filepath <- system. sh。文件(“extdata”、“test_data。RData", package = "MOFA2") load(filepath) head(dt)
##采样特征视图值## 1:sample_0_group_1 feature_0_view_0 view_0 2.08 ## 2: sample_1_group_1 feature_0_view_0 view_0 0.01 ## 3: sample_2_group_1 feature_0_view_0 view_0 -0.11 ## 4: sample_3_group_1 feature_0_view_0 view_0 -0.82 ## 5: sample_4_group_1 feature_0_view_0 view_0 -1.13 ## 6: sample_5_group_1 feature_0_view_0 view_0 -0.25

创建MOFA对象

MOFAobject <- create_mofa(dt)
##从data.frame创建MOFA对象…
打印(MOFAobject)
##未经训练的MOFA模型,具有以下特征:##视图数量:2 ##视图名称:view_0 view_1 ##特征数量(每个视图):1000 1000 ##组数量:1 ##组名称:single_group ##样本数量(每组):100 ##

地块数据概述

plot_data_overview (MOFAobject)

5定义选项

5.1定义数据选项

  • scale_groups:如果组有不同的范围/方差,将每个组缩放到单位方差是一个很好的做法。默认是
  • scale_views:如果视图有不同的范围/方差,将每个视图缩放为单位方差是一个很好的实践。默认是
data_opts <- get_default_data_options(MOFAobject) head(data_opts)
scale_views美元# # # # scale_groups美元[1]假# # # # # # [1]center_groups美元假# # # # # # [1]use_float32美元真正的# # # # # #美元[1]假# # # # # #观点[1]“view_0”“view_1”# # # #元组# #[1]“single_group”

5.2定义模型选项

  • num_factors:因子数
  • 可能:每个视图的可能性(选项为“高斯”、“泊松”、“伯努利”)。默认为“高斯”。
  • spikeslab_factors:在因素中使用钉板稀疏性优先?默认是
  • spikeslab_weights:在权重中使用钉板稀疏性?默认是真正的
  • ard_factors:在因素中使用ARD优先?默认是真正的如果使用多个组。
  • ard_weights:在权重中使用ARD优先?默认是真正的如果使用多个视图。

如果您熟悉底层数学模型,则只更改默认模型选项。

model_opts <- get_default_model_options(MOFAobject)
## $可能性## view_0 view_1 ##“gaussian”“gaussian”## ## $num_factors ## [1] 10 ## ## $spikeslab_factors ## [1] FALSE ## ## $spikeslab_weights ## [1] TRUE ## ## $ard_factors ## [1] FALSE ## ## $ard_weights ## [1] TRUE

5.3定义培训选项

  • 麦克斯特:迭代次数。缺省值为1000。
  • convergence_mode:“fast”(默认值),“medium”,“slow”。对于探索,快速模式就足够了。对于最终的模型,可以考虑使用“中等”甚至“慢”,但希望结果不会有太大变化。
  • gpu_mode使用GPU模式?(需要cupy安装和一个功能的GPU)。
  • 详细的: verbose模式?
train_opts <- get_default_training_options(MOFAobject) head(train_opts)
# # $麦克斯特# # # # # # 1000 [1]convergence_mode # # [1] drop_factor_threshold美元“快速”的# # # # # # [1]1 # # # # $ verbose # # startELBO美元[1]假# # # # # # [1]freqELBO美元1 # # # # # # 5 [1]

6建立和培训MOFA对象

准备MOFA对象

MOFAobject <- prepare_mofa(object = MOFAobject, data_options = data_opts, model_options = model_opts, training_options = train_opts)

训练MOFA模型。记住,在这一步MOFA2R包与mofapy2使用Python包网状.这是外交部运行过程中出现的大部分问题的根源。看到我们的FAQ部分如果你有问题。输出保存在指定为的文件中输出文件.如果没有指定,输出将保存在一个临时位置。

outfile = file.path(tempdir(),"model.hdf5")训练<- run_mofa(MOFAobject, outfile)
##警告:输出文件/tmp/RtmpQqPucF/model. txtHdf5已经存在,将被替换
##使用reticulate连接到mofapy2 python包(use_basilisk = FALSE)…##请确保在使用reticulate::use_python加载R时手动指定正确的python二进制(…, force=TRUE)或使用reticulate::use_condaenv(…,force=TRUE) ## If you prefer to let us automatically install a conda environment with 'mofapy2' installed using the 'basilisk' package, please use the argument 'use_basilisk = TRUE'
##在run_mofa(MOFAobject, outfile)中警告:最新的mofapy2版本是0.6.4,##您使用的是0.5.6。请使用“pip install mofapy2”进行升级
## run_mofa(MOFAobject, outfile)中的警告:使用reticulate连接到最新的mofapy2 ## python包(use_basilisk = FALSE)
##在run_mofa(MOFAobject, outfile)中警告:最新的mofapy2版本是0.6.4,##您使用的是0.5.6。请使用“pip install mofapy2”进行升级
## run_mofa(MOFAobject, outfile)中的警告:在##指定的python二进制文件中未检测到mofapy2_0.6.4,请参阅reticulate::py_config()。设置use_basilisk = ## TRUE…
##使用basilisk连接到mofapy2包##设置'use_basilisk'为FALSE,如果您喜欢使用'reticulate'手动设置python二进制。

如果一切都成功,您应该观察到类似于下面的输出:

###################################### ## 训练模型与种子1  ## ###################################### 迭代1:时间= 0.03,ELBO = -52650.68, deltaELBO = 837116.802(94.082647669%)、因素= 10(…)迭代9:时间= 0.04,ELBO = -50114.43, deltaELBO = 23.907(0.002686924%)、因素= 10  ####################### ## 培训完成  ## ####################### 保存模型在/ var /文件夹/…/ model.hdf5…/ tmp / RtmpQqPucF / model.hdf5。

7下游分析

这就完成了关于如何从r中训练MOFA对象的教程本教程

会话信息

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 base ## ##其他附加包:## [1]data.table_1.14.2 pheatmap_1.0.12 forcats_0.5.1 string_1 .4.0 ## [5] dplyr_1.0.8 purrr_0.3.4 readr_2.1.2 tidyr_1.2.0 ## [9] tibble_1 .1.6 ggplot2_3.3.5 tidyverse_1.3.1 MOFA2_1.6.0 ## [13] BiocStyle_2.24.0 ## ##通过命名空间加载(且未附加):## [1] Rtsne_0.16 colorspace_2.0-3 rprojroot_2.0.3 fs_1.5.2 ## [7] rstudioapi_0.13 ggpubr_0.4.0 farver_2.1.0 ## [10] ggrepel_0.9.1 RSpectra_0.16-1 fansi_1.0.3 ## [13] mvtnorm_1.1-3 lubridate_1.8.0 xml2_1.3.3 ## [19] jsonlite_1.8.0 broom_0.8.0 dbplyr_2.1.1 ## [22] png_0.1-7 uwot_0.1.11 HDF5Array_1.24.0 ## [25] BiocManager_1.30.17 compiler_4.2.0 httr_1.4.2 ## [28] basilisk_1.8.0 backports_1.4.1 assertthat_0.2.1[43] rcppylib_0.1.4 vctrs_0.4.1 rhdf5filters_1.8.0 ## [46] nlme3.1 -157 xfun_0.30 rvest_1.0.2 ## [49] lifecycle_1.0.1 rstatix_0.7.0 scales_1.2.0 ## [55] parallel_4.2.0 rhdf5_2.40.0 RColorBrewer_1.1-3 ## [58] yaml_2.3.5 reticulate_1.24sass_0.4.1 ## [61] reshape_0.8.9 stringi_1.7.6 highr_0.9 ## [64] S4Vectors_0.34.0 corrplot_0.92 BiocGenerics_0.42.0 ## [67] filelock_1.0.2 rlang_1.0.2 pkgconfig_2.0.3 ## [70] matrixStats_0.62.0 evaluate_0.15 lattice_0.20-45 ## [73] Rhdf5lib_1.18.0 labeling_0.4.2 cowplot_1.1.1 ## [76] tidyselect_1.1.2 RcppAnnoy_0.0.19 here_1.0.1 ## [79] GGally_2.1.2 plyr_1.8.7 magrittr_2.0.3 ## [82] bookdown_0.26 R6_2.5.1 IRanges_2.30.0 ## [85] magick_2.7.3 generics_0.1.2 DelayedArray_0.22.0 ## [88] DBI_1.1.2Pillar_1.7.0 haven_2.5.0 ## [91] withr_2.5.0 mgcv_1. 8.0 -40 abind_1.4-5 ## [94] dir.expiry_1.4.0 modelr_0.1.8 crayon_1.5.1 ## [97] car_3.0-12 utf8_1.2.2 tzdb_0.3.0 ## [100] rmarkdown_2.14 grid_4.2.0 readxl_1.4.0 ## [103] reprex_2.0.1 digest_0.6.29 stats4_4.2.0 ## [106] munsell_0.5.0 bslib_0.3.1