分析空间转录组数据的时候,简单地学习了一下MISTy
模型框架:一个灵活扩展,可解释的机器学习框架,可用于从任何空间组学数据中提取关系,可同时评估数十到数千个marker
。MISTy
构建多个视图,关注不同的空间或功能背景,以剖析不同的效应。专业的解释有时候还是有点晦涩难懂,所有的字都认识,但组合起来就不是很理解其中要表达的意思了,不得不承认某些专业知识的匮乏。
上面的流程图,解释了MISTy
主要做的事情以及返回的结果。模型从不同的空间视角建模marker
之间的关系:根据数据中marker
的表达值,或者衍生的类型及功能特征,从内视图(intraview)、本地视图(juxtaview)、组织视图(paraview)、其他视图等视角审视marker
间的联系。模型输出了三个方面的结果:提取了不同视图对marker
表达的贡献;在每个视图下,评估marker
之间的相互作用,来解释他们的贡献;在每个视图下,交互的marker
可以被定性为关联群体。需要指出的是这里所说的marker
并不是特指marker
基因。
mistyR
作为MISTy
模型框架的R语言实现,用起来很方便,软件的官方文档也有详细的实践代码,网上也能搜到不少相关的帖子,这里就不再重复代码过程了,重点关注一下输出的结果。
str(misty.results)
List of 6
$ improvements : tibble [560 × 4] (S3: tbl_df/tbl/data.frame)
..$ target : chr [1:560] "ECM" "ECM" "ECM" "ECM" ...
..$ sample : chr [1:560] "results/synthetic1" "results/synthetic1" "results/synthetic1" "results/synthetic1" ...
..$ measure: chr [1:560] "intra.RMSE" "intra.R2" "multi.RMSE" "multi.R2" ...
..$ value : num [1:560] 0.13174 88.40671 0.12293 89.89153 0.00721 ...
$ contributions : tibble [420 × 4] (S3: tbl_df/tbl/data.frame)
..$ target: chr [1:420] "protE" "protE" "protE" "protE" ...
..$ sample: chr [1:420] "results/synthetic1" "results/synthetic1" "results/synthetic1" "results/synthetic1" ...
..$ view : chr [1:420] "intercept" "intra" "para.10" "p.intercept" ...
..$ value : num [1:420] -0.132 1.067 0.175 NA 0 ...
$ importances : tibble [980 × 5] (S3: tbl_df/tbl/data.frame)
..$ sample : chr [1:980] "/results/synthetic1" "results/synthetic1" "results/synthetic1" "results/synthetic1" ...
..$ view : chr [1:980] "intra" "intra" "intra" "intra" ...
..$ Predictor : chr [1:980] "ECM" "ECM" "ECM" "ECM" ...
..$ Target : chr [1:980] "ECM" "prodA" "prodB" "prodC" ...
..$ Importance: num [1:980] NA -0.63 0.524 -0.802 -0.724 ...
$ improvements.stats : tibble [42 × 5] (S3: tbl_df/tbl/data.frame)
..$ target : chr [1:42] "ECM" "ECM" "ECM" "ECM" ...
..$ measure: chr [1:42] "gain.R2" "gain.RMSE" "intra.R2" "intra.RMSE" ...
..$ mean : num [1:42] 1.544 7.029 88.579 0.126 90.123 ...
..$ sd : num [1:42] 0.16531 0.95144 0.78475 0.00671 0.8115 ...
..$ cv : num [1:42] 0.10705 0.13536 0.00886 0.05334 0.009 ...
$ contributions.stats : tibble [14 × 6] (S3: tbl_df/tbl/data.frame)
..$ target : chr [1:14] "ECM" "ECM" "prodA" "prodA" ...
..$ view : chr [1:14] "intra" "para.10" "intra" "para.10" ...
..$ mean : num [1:14] 1.1313 0.3242 1.0211 -0.0367 1.5066 ...
..$ fraction: num [1:14] 0.7773 0.2227 0.9653 0.0347 0.9854 ...
..$ p.mean : num [1:14] 0 0 0 0.000159 0 ...
..$ p.sd : num [1:14] 0 0 0 0.000268 0 ...
$ importances.aggregated: tibble [98 × 5] (S3: tbl_df/tbl/data.frame)
..$ view : chr [1:98] "intra" "intra" "intra" "intra" ...
..$ Predictor : chr [1:98] "ECM" "ECM" "ECM" "ECM" ...
..$ Target : chr [1:98] "ECM" "prodA" "prodB" "prodC" ...
..$ Importance: num [1:98] NA -0.629 0.64 -0.838 -0.658 ...
..$ nsamples : int [1:98] 10 10 10 10 10 10 10 10 10 10 ...
mistyR
分析流程返回的结果是一个list
,其中包含6个数据框,分别是三个名为improvements
、contributions
、importances
的原始结果表,以及三个名为improvements.stats
、contributions.stats
、importances.aggregated
的统计汇总表。
MISTy
给出了三个一般性问题的答案,每个问题都可以通过相应形式的图表来回答。下面一起来具体看看。
- How much can the broader spatial context explain the expression of markers (in contrast to the intraview)?
这张图回答了上面的问题:当考虑除内在视图之外的其他视图时,模型对解释marker X
的表达有多大的提升作用。MISTy
框架对模型的评估使用了两个指标:R2
和RMSE
,绘图结果存储在improvements
表里,其中gain.R2
、gain.RMSE
的计算方式如下:
gain.R2 = multi.R2 - intra.R2
gain.RMSE = 100 * (intra.RMSE - multi.RMSE) / intra.RMSE
improvements.stats
结果:在每种视图下,对improvements
表里的R2
、RMSE
的统计汇总,计算每种marker
在样本间的平均值,标准差,cv=sd/mean
。
- How much do different view components contribute to explaining the expression?
上图回答了问题:不同视图对预测marker
表达的贡献情况。绘图结果来自表contributions.stats
,该表是对contributions
表的统计汇总,在每种视图下,分别计算每种视图对每个Target
的平均贡献,平均pvalue
,pvalue
的标准差以及基于视图平均贡献的百分比。
- What are the specific relations that can explain the contributions?
上图回答了问题:在预测特定marker
的表达时,其他marker
的重要性,体现了marker
之间的交互依赖作用。绘图结果来自importances.aggregated
表,该表是对importances
表的统计汇总,在每种视图下,汇总样本数并计算Predictor
、Target
各组合在样本间的平均Importance
。
网友评论