多组学的研究在不断进入各个疾病领域,那么如何整合这些多组学的特征成为多组学因子综合分析的挑战,今天给大家介绍一个可以类似于PCA分析对多维组学数据进行降维分析的工具包MOFA2。首先看下包的安装:
BiocManager::install("MOFA2")
接下来我们看下导入此包的数据的条件:
1)样本数不得少于15
2)矩阵数据对应的算法选择:连续正态分布(用高斯似然建模),频数数(用泊松似然建模)和二分类数据(用伯努利似然建模)。
1. 数据的导入
###简单的矩阵列表
data <- make_example_data(
n_views = 2,
n_samples = 200,
n_features = 1000,
n_factors = 10
)[[1]]
###数据框的形式
filepath <- system.file("extdata", "test_data.RData", package = "MOFA2")
load(filepath)
head(dt)
2. 创建MOFA数据集
####创建新的集合
MOFAobject <- create_mofa(data)
plot_data_overview(MOFAobject)
###添加分组数据
N = ncol(data[[1]])
groups = c(rep("A",N/2), rep("B",N/2))
MOFAobject <- create_mofa(data, groups=groups)
plot_data_overview(MOFAobject)
###数据归一化的处理
data_opts <- get_default_data_options(MOFAobject)
###编辑优化参数
data_opts$scale_views <- TRUE
head(data_opts)
###数据模型参数构建
model_opts <- get_default_model_options(MOFAobject)## model_opts$likelihoods[["view_1"]] <- "bernoulli"
model_opts$num_factors <- 10#编辑参数
head(model_opts)
###训练模型参数
train_opts <- get_default_training_options(MOFAobject)
head(train_opts)
###查看额外包的环境配置
library(reticulate)
#py_install("mofapy2")
reticulate::py_config()
###模型的构建
MOFAobject <- prepare_mofa(
object = MOFAobject,
data_options = data_opts,
model_options = model_opts,
training_options = train_opts
)
outfile = file.path(tempdir(),"model.hdf5")
MOFAobject.trained <- run_mofa(MOFAobject, outfile,use_basilisk =TRUE)
2. 数据的操作及下游分析
###模型中的变量
slotNames(MOFAobject.trained)
###可视化factor结果
plot_factor_cor(MOFAobject.trained)
###查看每个factor在不同的组,数据中差异性对比。颜色越深代表此数据对factor贡献大
plot_variance_explained(MOFAobject.trained, max_r2=15)
###对数据的解释程度
plot_variance_explained(MOFAobject.trained, plot_total = T)[[2]]
从图中我们可以看到这些factor对数据的解释水平都超过了75%,应该很好的一个模型了。
###元数据中属性和因子之间的相关性分析,此处数据结构就是行为样本编号,列为属性值(如性别,年龄等),此处不做演示,函数如下
samples_metadata(MOFAobject.trained) <- metadata
##绘制属性和因子分析结果图
correlate_factors_with_covariates(MOFAobject.trained,
covariates = c("Gender","died","age"),
plot="log_pval"
)
###绘制因子散点图
plot_factor(MOFAobject.trained,
factors = 1,
color_by = "Factor1"
)
每个Factor沿着以零为中心的一维轴对单元格进行分布。在推断的变异轴上,不同颜色的样本表现出相反的表型,绝对值越大,说明效应越强。注意MOFA因子的解释类似于主成分分析中的主成分解释。
####阐述单个因子对应的每个样本的贡献权重
plot_weights(MOFAobject.trained,
view = "view_1",
factor = 1,
nfeatures = 10, # Top number of features to highlight
scale = T # Scale weights from -1 to 1
)
从图中可以看到排在前10的样本,同时我们也可以看到在0附近的代表没有任何贡献。当然,就像图中,很多样本发生重叠的时候,还有另外一个展示形式:
plot_top_weights(MOFAobject.trained,
view = "view_1",
factor = 1,
nfeatures = 10, # Top number of features to highlight
scale = T # Scale weights from -1 to 1
)
从上图中我们可以看出,feature_970_view1对因子1的贡献最大,并且是正值,那么我们也可以看下这个属性和factor1具体的关系:
plot_factor(MOFAobject.trained,
factors = 1,
color_by = "feature_970_view1",
dodge = TRUE
)
###绘制输入数据的特征热图
plot_data_heatmap(MOFAobject.trained,,
view = "view_1",
factor = 1,
features = 25,
cluster_rows = FALSE, cluster_cols = FALSE,
show_rownames = TRUE, show_colnames = FALSE,
scale = "row"
)
当然,此包功能不限于此,如果是真实的基因数据还可以进行后期的通路/功能富集分析,生存预后等基于因子差异的其它分析。