欢迎来到EMDomics包!本小插图将通过创建和分析玩具数据集来解释包的功能。
EMDomics分析组间样本的基因组数据差异。通常情况下,数据将来自阵列或基于序列的实验的基因表达水平,但其他情况是可能的。在一个真正的两班实验中,参与者可能是被测试者vs.控制者,敏感者vs.抵抗者等等。在多类别实验(即超过两组患者)中,分组可能与患者(在单细胞测量的情况下)或疾病亚型相关。通常情况下,您将分析多个基因之间的差异,但我们将从单个基因开始,以了解地球移动器距离(EMD)算法是如何工作的。还要注意,这个包包含了Komolgorov-Smirnov (K-S)和Cramer von Mises (CVM)分布比较测试的功能。要访问这些测试,请使用calculate_ks
或calculate_cvm
.输入和输出语法与calculate_emd
,在访问输出值时,将“emd”替换为“ks”或“cvm”。
因为这个包EMDomics我们将通过EMD计算功能,但是K-S和CVM可以通过替换函数名轻松访问。
我们将为100个样本创建一个表达式数据向量。我们把前50人分到A组,后20人分到B组,最后30人分到c组。我们将创建一个组标签向量,描述每个样本属于哪个组。注意标签向量的名称必须与数据中的样本标识符相对应:
rnorm(One hundred.) exp_data < -的名字(exp_data) < -粘贴(“样本”,1:One hundred.)代表(“一个”,50) groupA。标签< -代表(“B”,20.) groupB。标签< -代表(“C”,30.) groupC。标签< -c(groupA。标签,groupB。标签,groupC.labels) 标签< -的名字(标签)< -的名字(exp_data)
我们将快速查看使用的三个发行版ggplot
:
图书馆(ggplot2)as.data.frame(exp_data) df < -$集团(1:50) < -“一个” df$集团(51:70) < -“B” df$集团(71:One hundred.) < -“C” dfggplot(df,aes(exp_data填补=集团))+geom_density(α=0.5)
我们不应该期望这三组看起来有太大不同,因为我们只是从正态分布中抽样。直观地说,将任何一种发行版转换为另一种发行版所需的“功”应该很低。我们可以使用该函数计算该单基因的EMD评分calculate_emd_gene
:
图书馆(EMDomics)calculate_emd_gene(exp_data,标签,的名字(exp_data))
## [1] 2.016667
现在我们将修改表达式数据A组
看看EMD分数如何变化。中每个数据点随机加或减2A组
:
exp_data2 < -exp_data样本(c(2,-2),50,取代=真正的) mod_vec < -1:50) < -exp_data2 [1:50]+mod_vec exp_data2 [
让我们再次可视化分布并计算EMD得分:
as.data.frame(exp_data2) df < -$集团(1:50) < -“一个” df$集团(51:70) < -“B” df$集团(71:One hundred.) < -“C” dfggplot(df,aes(exp_data2填补=集团))+geom_density(α=0.5)
calculate_emd_gene(exp_data2,标签,的名字(exp_data2))
## [1] 7.286667
EMD分数较大,反映了将一个分布转换为另一个分布所需的工作量增加。请注意,由于我们定义了三个类别,我们无法仅从EMD评分中判断出哪两组(或潜在的所有三组)表现出基因行为的差异。多类分析中的复合EMD得分是所有成对EMD得分的平均值。两两的EMD分数是通过比较两个类的所有可能组合来计算的。关于多类分析的更多信息在下一节中。
请注意,在两类分析中,较大的EMD得分直接表明两个类的测量分布差异较大。
随着分布变得越来越不相似,EMD分数也会增加,但我们没有估算特定EMD分数显著性的框架。EMDomics使用基于排列的方法来计算与p值类似解释的q值。为了访问包的全部功能,我们将使用函数calculate_emd
.
我们将首先为100个样本(肿瘤、患者等)和100个基因创建一个基因表达数据矩阵。我们现在只从正态分布中抽样。前50个样本将是我们的“A组”,后20个样本将是“B组”,最后30个样本将是“c组”。就像之前一样,我们将这些样本标签存储在一个命名向量中,将组与样本标识符关联起来:
矩阵(rnorm(10000),nrow =One hundred.,ncol =One hundred.) 数据< -rownames(数据)< - - - - - -粘贴(“基因”,1:One hundred.,9月="")colnames(数据)< - - - - - -粘贴(“样本”,1:One hundred.,9月="")代表(“一个”,50) groupA。标签< -代表(“B”,20.) groupB。标签< -代表(“C”,30.) groupC。标签< -c(groupA。标签,groupB。标签,groupC.labels) 标签< -的名字(标签)< -colnames(数据)
现在我们可以调用calculate_emd
.为了这个小插图的目的,我们只使用10种排列,但在实际实验中,建议使用至少100种排列。对于本例,我们将关闭并行处理,但通常应该启用它。
calculate_emd(数据、标签nperm =10,平行=假) 结果< -
大多数时候,你会对emd
作为返回对象的成员返回的矩阵:
$emd emd < -结果头(emd)
## emd q-value ## gene1 1.140000 1.00 # gene2 2.946667 0.00 # gene3 1.730000 1.00 # gene4 1.500000 1.00 # gene5 2.400000 0.12 # gene6 1.526667 1.00
这个矩阵列出了数据集中每个基因的emd得分和q值。因为我们没有分析很多基因,数据是随机生成的,结果中可能有一些重要的q值只是偶然的。我们可以点餐emd
q值矩阵:
订单(emd,“核反应能量”)))) emd2 < -emd ((头(emd2)
## emd q-value ## gene2 2.946667 0 ## gene9 3.133333 0 ## gene16 3.416667 0 ## gene31 2.82 20000 0 ## gene33 4.51 10000 0 ## gene35 2.833333 0
注意显著的q值与相对较大的EMD评分的相关性。
在多类别分析中,仅仅知道一个基因在定义的类别中表现不同可能是不够的。我们可能感兴趣的是找出哪两个类在基因行为上表现出更大的差异,或者这三个类是否都有某种不同。类中定义了每个类之间的区别pairwise.emd.table
.注意,EMD是没有方向性的,所以在成对的EMD分数计算中使用了所有可能的组合,而不是排列。每一列表示成对比较(例如a组vs B组),每一行表示一个基因,细胞内容是EMD评分,量化将一个组的分布转换为另一个组所需的工作。
$pairwise.emd.table emd。成对< -结果头(emd.pairwise)
## A vs B A vs C B vs C ## gene1 1.14 0.7533333 1.0999999 # gene2 1.31 2.9466667 2.9166667 ## gene3 1.73 1.3533334 0.8833333 ## gene4 1.16 1.000000 1.2666667 ## gene6 0.80 1.5266666 1.3333334
EMDomics包括一些可视化函数。这个函数plot_density
将显示给定基因的每个组的密度分布,以及EMD评分。我们可以比较EMD得分最大的基因和EMD得分最小的基因,例如:
订单(emd,“emd”)))) emd3 < -emd ((rownames(emd3) [1] smallest_gene < -rownames(emd3) [nrow(emd3)] biggest_gene < -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正在开发中(不稳定)(2022-10-25 r83175) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-bioc/R/lib/libRblas。so ## LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK /liblapack.so.3.10.0 ## ## 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.29.0 ggplot2_3.3.6 ## ##通过命名空间加载(且未附加):## [1] preprocessCore_1.61.0 gtable_0.3.1 jsonlite_1.8.3 ## [7] CDFt_1.2 tidyselect_1.2.0 stringi_1. 4.1 ## [10] parallel_4.3.0 assertthat_0.2.1 jquerylib_0.1.4 ## [13] scales_1.2.1 emdist_0.3-2 BiocParallel_1.33.0 ## [19] yaml_2.3.6 fastmap_1.1.0 R6_2.5.1 ## [19] labeling_0.4.2 generics_0.1.3 knitr_1.40 ## [25] bslib_0.4.0 pillar_1.8.1 rlang_1.0.6 ## [28] utf8_1.2.2 cachem_1.0.6 stringi_1.7.8 ## [31]## [37] grid_4.3.0 lifecycle_1. 5.0 ## [40] evaluate_0.17 glue_1.6.2 farver_2.1.1 ## [43] codetools_0.2-18 fansi_1.0.3 colorspace_2.0-3 ## [46] rmarkdown_2.17 matrixStats_0.62.0 tools_4.3.0 ## [49] pkgconfig_2.0.3 htmltools_0.5.3