前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言中多组学的因子分析

R语言中多组学的因子分析

作者头像
一粒沙
发布2022-03-14 14:50:31
9990
发布2022-03-14 14:50:31
举报
文章被收录于专栏:R语言交流中心R语言交流中心

多组学的研究在不断进入各个疾病领域,那么如何整合这些多组学的特征成为多组学因子综合分析的挑战,今天给大家介绍一个可以类似于PCA分析对多维组学数据进行降维分析的工具包MOFA2。首先看下包的安装:

代码语言:javascript
复制
BiocManager::install("MOFA2")

接下来我们看下导入此包的数据的条件:

1)样本数不得少于15

2)矩阵数据对应的算法选择:连续正态分布(用高斯似然建模),频数数(用泊松似然建模)和二分类数据(用伯努利似然建模)。

1. 数据的导入

代码语言:javascript
复制
###简单的矩阵列表
data <- make_example_data(
  n_views = 2,
  n_samples = 200,
  n_features = 1000,
  n_factors = 10
)[[1]]
代码语言:javascript
复制
###数据框的形式
filepath <- system.file("extdata", "test_data.RData", package = "MOFA2")
load(filepath)
head(dt)

2. 创建MOFA数据集

代码语言:javascript
复制
####创建新的集合
MOFAobject <- create_mofa(data)
plot_data_overview(MOFAobject)
代码语言:javascript
复制
###添加分组数据
N = ncol(data[[1]])
groups = c(rep("A",N/2), rep("B",N/2))
MOFAobject <- create_mofa(data, groups=groups)
plot_data_overview(MOFAobject)
代码语言:javascript
复制
###数据归一化的处理
data_opts <- get_default_data_options(MOFAobject)
###编辑优化参数
data_opts$scale_views <- TRUE
head(data_opts)
代码语言:javascript
复制
###数据模型参数构建
model_opts <- get_default_model_options(MOFAobject)## model_opts$likelihoods[["view_1"]] <- "bernoulli"
model_opts$num_factors <- 10#编辑参数
head(model_opts)
代码语言:javascript
复制
###训练模型参数
train_opts <- get_default_training_options(MOFAobject)
head(train_opts)
代码语言:javascript
复制
###查看额外包的环境配置
library(reticulate)
#py_install("mofapy2")
reticulate::py_config()
代码语言:javascript
复制
###模型的构建
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. 数据的操作及下游分析

代码语言:javascript
复制
###模型中的变量
slotNames(MOFAobject.trained)
代码语言:javascript
复制
###可视化factor结果
plot_factor_cor(MOFAobject.trained)
代码语言:javascript
复制
###查看每个factor在不同的组,数据中差异性对比。颜色越深代表此数据对factor贡献大
plot_variance_explained(MOFAobject.trained, max_r2=15)
代码语言:javascript
复制
###对数据的解释程度
plot_variance_explained(MOFAobject.trained, plot_total = T)[[2]]

从图中我们可以看到这些factor对数据的解释水平都超过了75%,应该很好的一个模型了。

###元数据中属性和因子之间的相关性分析,此处数据结构就是行为样本编号,列为属性值(如性别,年龄等),此处不做演示,函数如下

代码语言:javascript
复制
samples_metadata(MOFAobject.trained) <- metadata
##绘制属性和因子分析结果图
correlate_factors_with_covariates(MOFAobject.trained,
  covariates = c("Gender","died","age"),
  plot="log_pval"
)
代码语言:javascript
复制
###绘制因子散点图
plot_factor(MOFAobject.trained,
             factors = 1,
             color_by = "Factor1"
 )

每个Factor沿着以零为中心的一维轴对单元格进行分布。在推断的变异轴上,不同颜色的样本表现出相反的表型,绝对值越大,说明效应越强。注意MOFA因子的解释类似于主成分分析中的主成分解释。

代码语言:javascript
复制
####阐述单个因子对应的每个样本的贡献权重
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附近的代表没有任何贡献。当然,就像图中,很多样本发生重叠的时候,还有另外一个展示形式:

代码语言:javascript
复制
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具体的关系:

代码语言:javascript
复制
plot_factor(MOFAobject.trained,
            factors = 1,
            color_by = "feature_970_view1",
            dodge = TRUE
)
代码语言:javascript
复制
###绘制输入数据的特征热图
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"
)

当然,此包功能不限于此,如果是真实的基因数据还可以进行后期的通路/功能富集分析,生存预后等基于因子差异的其它分析。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档