EMDomics装饰图案

Sadhika Malladi和Daniel Schmolze

2022-04-26


欢迎

欢迎来到EMDomics包!本小插图将通过创建和分析玩具数据集来解释包的功能。

地球移动器的距离

EMDomics分析组间样本的基因组数据差异。通常情况下,数据将来自阵列或基于序列的实验的基因表达水平,但其他情况是可能的。在一个真正的两班实验中,参与者可能是被测试者vs.控制者,敏感者vs.抵抗者等等。在多类别实验(即超过两组患者)中,分组可能与患者(在单细胞测量的情况下)或疾病亚型相关。通常情况下,您将分析多个基因之间的差异,但我们将从单个基因开始,以了解地球移动器距离(EMD)算法是如何工作的。还要注意,这个包包含了Komolgorov-Smirnov (K-S)和Cramer von Mises (CVM)分布比较测试的功能。要访问这些测试,请使用calculate_kscalculate_cvm.输入和输出语法与calculate_emd,在访问输出值时,将“emd”替换为“ks”或“cvm”。

因为这个包EMDomics我们将通过EMD计算功能,但是K-S和CVM可以通过替换函数名轻松访问。

我们将为100个样本创建一个表达式数据向量。我们把前50人分到A组,后20人分到B组,最后30人分到c组。我们将创建一个组标签向量,描述每个样本属于哪个组。注意标签向量的名称必须与数据中的样本标识符相对应:

exp_data < -rnormOne hundred.的名字(exp_data) < -粘贴“样本”1One hundred.groupA。标签< -代表“一个”50groupB。标签< -代表“B”20.groupC。标签< -代表“C”30.标签< -c(groupA。标签,groupB。标签,groupC.labels)的名字(标签)< -的名字(exp_data)

我们将快速查看使用的三个发行版ggplot

图书馆(ggplot2)df < -as.data.frame(exp_data)df集团(150) < -“一个”df集团(5170) < -“B”df集团(71One hundred.) < -“C”ggplot(df,aes(exp_data填补=集团))+geom_densityα=0.5

我们不应该期望这三组看起来有太大不同,因为我们只是从正态分布中抽样。直观地说,将任何一种发行版转换为另一种发行版所需的“功”应该很低。我们可以使用该函数计算该单基因的EMD评分calculate_emd_gene

图书馆(EMDomics)calculate_emd_gene(exp_data,标签,的名字(exp_data))
## [1] 1.73

现在我们将修改表达式数据A组看看EMD分数如何变化。中每个数据点随机加或减2A组

exp_data2 < -exp_datamod_vec < -样本c2-2),50取代=真正的exp_data2 [150) < -exp_data2 [150+mod_vec

让我们再次可视化分布并计算EMD得分:

df < -as.data.frame(exp_data2)df集团(150) < -“一个”df集团(5170) < -“B”df集团(71One hundred.) < -“C”ggplot(df,aes(exp_data2填补=集团))+geom_densityα=0.5

calculate_emd_gene(exp_data2,标签,的名字(exp_data2))
## [1] 6.653334

EMD分数较大,反映了将一个分布转换为另一个分布所需的工作量增加。请注意,由于我们定义了三个类别,我们无法仅从EMD评分中判断出哪两组(或潜在的所有三组)表现出基因行为的差异。多类分析中的复合EMD得分是所有成对EMD得分的平均值。两两的EMD分数是通过比较两个类的所有可能组合来计算的。关于多类分析的更多信息在下一节中。

请注意,在两类分析中,较大的EMD得分直接表明两个类的测量分布差异较大。

分析的意义

随着分布变得越来越不相似,EMD分数也会增加,但我们没有估算特定EMD分数显著性的框架。EMDomics使用基于排列的方法来计算与p值类似解释的q值。为了访问包的全部功能,我们将使用函数calculate_emd

我们将首先为100个样本(肿瘤、患者等)和100个基因创建一个基因表达数据矩阵。我们现在只从正态分布中抽样。前50个样本将是我们的“A组”,后20个样本将是“B组”,最后30个样本将是“c组”。就像之前一样,我们将这些样本标签存储在一个命名向量中,将组与样本标识符关联起来:

数据< -矩阵rnorm10000),nrow =One hundred.ncol =One hundred.rownames(数据)< - - - - - -粘贴“基因”1One hundred.9月=""colnames(数据)< - - - - - -粘贴“样本”1One hundred.9月=""groupA。标签< -代表“一个”50groupB。标签< -代表“B”20.groupC。标签< -代表“C”30.标签< -c(groupA。标签,groupB。标签,groupC.labels)的名字(标签)< -colnames(数据)

现在我们可以调用calculate_emd.为了这个小插图的目的,我们只使用10种排列,但在实际实验中,建议使用至少100种排列。对于本例,我们将关闭并行处理,但通常应该启用它。

结果< -calculate_emd(数据、标签nperm =10平行=

大多数时候,你会对emd作为返回对象的成员返回的矩阵:

emd < -结果emd(emd)
## emd q-value ## gene1 1.300000 1.0000000 ## gene2 1.550000 1.0000000 ## gene3 2.433333 0.1612903 ## gene4 1.180000 1.0000000 ## gene5 3.033333 0.0000000 ## gene6 1.930000 0.6896552

这个矩阵列出了数据集中每个基因的emd得分和q值。因为我们没有分析很多基因,数据是随机生成的,结果中可能有一些重要的q值只是偶然的。我们可以点餐emdq值矩阵:

emd2 < -emd ((订单(emd,“核反应能量”))))(emd2)
## emd q-value ## gene5 3.033333 0 ## gene13 2.683333 0 ## gene18 2.900000 0 ## gene21 2.783333 0 ## gene22 3.400000 0 ## gene25 2.916667 0

注意显著的q值与相对较大的EMD评分的相关性。

在多类别分析中,仅仅知道一个基因在定义的类别中表现不同可能是不够的。我们可能感兴趣的是找出哪两个类在基因行为上表现出更大的差异,或者这三个类是否都有某种不同。类中定义了每个类之间的区别pairwise.emd.table.注意,EMD是没有方向性的,所以在成对的EMD分数计算中使用了所有可能的组合,而不是排列。每一列表示成对比较(例如a组vs B组),每一行表示一个基因,细胞内容是EMD评分,量化将一个组的分布转换为另一个组所需的工作。

emd。成对< -结果pairwise.emd.table(emd.pairwise)
A vs B A vs C B vs C ## gene1 1.02 1.1933333 1.300000 gene2 1.55 0.9133334 1.483333 ## gene3 2.32 1.0733334 2.433333 ## gene4 1.18 1.0933334 1.033333 ## gene5 1.74 2.3000000 3.033333 ## gene6 1.93 0.6133333 1.616667

可视化

EMDomics包括一些可视化函数。这个函数plot_density将显示给定基因的每个组的密度分布,以及EMD评分。我们可以比较EMD得分最大的基因和EMD得分最小的基因,例如:

emd3 < -emd ((订单(emd,“emd”))))smallest_gene < -rownames(emd3) [1biggest_gene < -rownames(emd3) [nrow(emd3)]plot_emd_density(结果smallest_gene)

plot_emd_density(结果biggest_gene)

注意,EMD分数是每个成对的EMD分数的平均值。这意味着在多类分析中,最小和最大的EMD分数可能具有模糊的含义。要了解每个类与其他类的比较情况,请使用pairwise.emd.table提供基因行为的两两比较。这些成对的EMD分数将有助于更深入地了解不同阶层的基因是如何相似或不同的。

在两类分析中,得分最小的基因代表两类中表现出最相似行为的基因,得分最大的基因代表两类中表现出最不同行为的基因。

我们可以用该函数绘制所有计算出的EMD分数的直方图plot_emdperms

plot_emdperms(结果)

这个图可以帮助直观地理解EMD评分的相对重要性。例如,几乎所有随机排列的EMD分数都小于上面绘制的最大计算的EMD分数。

类似地,函数plot_emdnull绘制每个基因的空分布(排列后的EMD得分的中位数)与计算出的EMD得分(x=y用红色重叠):

plot_emdnull(结果)

结束

这就结束了EMDomics装饰图案。欲了解更多信息,请参阅参考手册。

会话信息

## 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]EMDomics_2.26.0 ggplot2_3.3.5 ## ##通过命名空间加载(且未附加):## [4] pillar_1.7.0 jquerylib_0.1.4 tools_4.2.0 ## [7] emdist_0.3-2 digest_0.6.29 preprocessCore_1.58.0 ## [10] jsonlite_1.8.0 evaluate_0.15 lifecycle_1.0.1 ## [13] tibble_3.1.6 gtable_0.3.0 pkgconfig_2.0.3 ## [19] rlang_1.0.2 DBI_1.1.2 cli_3.3.0 ## [19] parallel_4.2.0 yaml_2.3.5 xfun_0.30 ## [25] fastmap_1.1.0 withr_2.5.0 string_1 .4.0 ## [28] sass_0.4.1 vctrs_0.4.1 grid_4.2.0 ## [31] tidyselect_1.1.2 ##[34] matrixStats_0.62.0 scales_1.2.0 htmltools_0.5.2 ## [43] ellipsis_0.3.2 CDFt_1.2 assertthat_0.2.1 ## [46] colorspace_2.0-3 labeling_0.4.2 utf8_1.2.2 ## [49] stringi_1.7.6 munsell_0.5.0 crayon_1.5.1