EMDomics小品

Sadhika Malladi和Daniel Schmolze

2024-04-30


欢迎光临

欢迎使用EMDomics公司包裹!这个小插曲将通过创建和分析玩具数据集来解释软件包的功能。

推土机距离

EMDomics公司分析样本组之间基因组数据的差异。通常,数据将是基于阵列或序列的实验中的基因表达水平,但也有可能出现其他情况。在真正的两类实验中,组可能是测试组与对照组、敏感组与耐药组等。在多类实验中(即两组以上的患者),组可能与患者(在单细胞测量的情况下)或疾病亚型相关。通常,您将分析多个基因之间的差异,但我们将从单个基因开始,了解地球移动器距离(EMD)算法的工作原理。还请注意,此软件包包括用于Komolgorov-Smirnov(K-S)和Cramer von Mises(CVM)分布比较测试的功能。要访问这些测试,请使用calculate_ks(_K)calculate_cvm(计算cvm)。输入和输出语法与calculate_emd(计算_ emd),当访问输出值时,“emd”被替换为“ks”或“cvm”。

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

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

扩展数据(_D)<- rnorm公司(100)
姓名(扩展数据)<- 粘贴(“样本”,1:100)

A组标签<- 代表(“A”,50)
B组标签<- 代表(“B”,20)
组C.标签<- 代表(“C”,30)

标签<- c(c)(A组标签、B组标签、C组标签)
姓名(标签)<- 姓名(扩展数据)

我们将使用ggplot图:

图书馆(ggplot2)

数据流<- as.data.frame格式(扩展数据)
数据流$组[1:50] <-“A”
数据流$组[51:70] <-“B”
数据流$组[71:100] <-“C”

ggplot图(df,原子能机构(扩展数据,填充=组))+ 地理密度(阿尔法=0.5)

我们不应该期望这三个组看起来差异太大,因为我们只是从正态分布中抽样。直觉上,将任何一个分发转换为另一个分发所需的“工作量”应该很低。我们可以使用函数计算这个单一基因的EMD得分计算emd基因:

图书馆(EMDomics)
计算emd基因(扩展数据、标签、,姓名(扩展数据)
## [1] 2.883333

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

扩展数据2<- 扩展数据(_D)
修改(_V)<- 样品(c(c)(2,-2),50,更换=真的)
扩展数据2[1:50] <- 扩展数据2[1:50]+ 修改(_V)

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

数据流<- as.data.frame格式(扩展数据2)
数据流$组[1:50]<-“A”
数据流$组[51:70] <-“B”
数据流$组[71:100] <-“C”

ggplot图(df,原子发射光谱(扩展数据2,填充=组))+ 地理密度(阿尔法=0.5)

计算emd基因(exp_data2,标签,姓名(扩展数据2)
## [1] 6.18

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

注意,在两类分析中,EMD得分越高,直接表明两类测量分布之间的差异越大。

分析重要性

EMD分数随着分布的不同而增加,但我们没有评估特定EMD分数重要性的框架。EMDomics公司使用基于置换的方法计算q值,该q值类似于p值。要访问包的全部功能,我们将使用函数calculate_emd(计算_ emd).

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

数据<- 矩阵(rnorm公司(10000),nrow公司=100,ncol公司=100)
行名称(数据)<- 粘贴(“基因”,1:100,9月="")
列名(数据)<- 粘贴(“样本”,1:100,9月="")

A组标签<- 代表(“A”,50)
B组标签<- 代表(“B”,20)
组C.标签<- 代表(“C”,30)

标签<- c(c)(A组标签、B组标签、C组标签)
姓名(标签)<- 列名(数据)

现在我们可以打电话了calculate_emd(计算_ emd)。在本小品中,我们只使用10个排列,但在实际实验中,建议至少使用100个排列。对于这个示例,我们将关闭并行处理,但通常应该启用它。

结果<- 计算_emd(数据、标签、,nperm(名词术语)=10,平行=错误的)

大多数时候,你会对电动机械手作为返回对象成员返回的矩阵:

电动机械手<- 结果$电动机械手
(紧急制动)
##emd q值##基因1 2.833333 0.0000000##基因2 1.170000 1.0000000##基因3 1.770000 1.0000000##基因4 3.45333 0.0000000##基因5 1360000 1.0000000##基因6 1.990000 0.7954545

该矩阵列出了数据集中每个基因的emd得分和q值。因为我们没有分析很多基因,而且数据是随机生成的,所以结果中可能有一些重要的q值,这只是偶然的。我们可以订购电磁流量计q值矩阵:

emd2型<- 电动机械手[(秩序(emd[,“q值”])),]
(emd2)
##emd q值##基因1 2.833333 0##基因4 3.453333 0##基因7 3.280000 0##基因14 2.960000 0##基因18 3.230000 0##基因23 3.010000 0

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

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

emd.成对<- 结果$成对.emd.table
(emd.成对)
##A对B A对C B对C##基因1 1.80 1.4533334 2.833333##基因2 1.17 1.0666667 1.083333##基因3 1.77 1.4066668 1.416667##基因2.59 3.453334 1.550000##基因5 1.36 0.7933333 1.200000##基因6 1.99 1.3933334 1.750000

可视化

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

emd3型<- 电磁流量计[(秩序(emd[,“emd”])),]
最小基因<- 行名称(emd3)[1]
最大基因<- 行名称(emd3)[nrow公司(emd3)]

绘制emd密度(结果,smallest_gene)

绘制emd密度(结果,最大基因)

注意,EMD得分是两两EMD得分的平均值。这意味着在多类别分析中,最小和最大EMD分数可能具有模糊含义。为了了解每个类与其他类的比较成对的.md.table提供基因行为的成对比较。这些成对的EMD评分将有助于更深入地了解基因在不同类别之间的相似或不同之处。

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

我们可以用函数绘制所有计算出的EMD得分的直方图绘图_ emdperms:

绘图_ emdperms(个结果)

此图有助于直观地了解EMD评分的相对重要性。例如,几乎所有随机排列的EMD得分都小于上面绘制的最大计算EMD得分。

同样,函数绘图_ emdnull绘制每个基因的零分布(排列EMD得分的中位数)与计算的EMD得分(x=y线以红色叠加):

绘图_ emdnull(个结果)

总结

这就结束了EMDomics公司小插曲。有关更多信息,请参阅参考手册。

会话信息

##R版本4.4.0测试版(2024-04-15 r86425)##平台:x86_64-pc-linux-gnu##运行于:Ubuntu 22.04.4 LTS## ##矩阵产品:默认##BLAS:/home/biocbuild/bbs-3.19-bioc/R/lib/libRblas.so##LAPACK:/usr/lib/x86_64-linux-gnu/LAPACK/liblapack.so.3.10.0## ##区域设置:##[1]LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C##[3]LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8##[5]LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-9##[7]LC_PAPER=en_US.UTF-8 LC_NAME=C##[9]LC_ADDRESS=C LC_TELEPHONE=C##[11]LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C## ##时区:美国/纽约##tzcode源代码:系统(glibc)####附加的基本包:##[1]stats graphics grDevices utils datasets方法库## ##其他附加包:##[1]电子邮箱_2.34.0 ggplot2_3.5.1## ##通过命名空间加载(未附加):##[1]预处理Core_1.66.0 gtable_0.3.5 jsonlite_1.8.8##[4]dplyr_1.1.4编译器.4.40高r_0.10##[7]tidyselect_1.2.1 CDFt_1.2并行_4.4.0##[10]jquerylib_0.1.4比例_1.3.0 emdist_0.3-3##[13]BiocParallel_1.38.0 yaml_2.3.8 fastmap_1.1.1##[16]R6_2.5.1标记_0.4.3一般_0.1.3##[19]针织品_1.46藏布_3.2.1蒙赛尔-0.5.1##[22]bslib_0.7.0支柱_1.9.0支柱_1.1.3##[25]utf8_1.2.4缓存_1.0.8 xfun_0.43##[28]sass_0.4.9 cli_3.6.2和r_3.0.0##[31]magrittr_2.0.3摘要_0.6.35网格_4.4.0##[34]生命周期_1.0.4 vctrs_0.6.5评估_0.23##[37]胶水_1.7.0 farver_2.1.1代码工具_0.2-20##[40]风扇_1.0.6颜色空间_2.1-0 rmarkdown_2.26##[43]矩阵统计_ 1.3.0工具_ 4.4.0 pkgconfig_2.0.3##[46]html工具-0.5.8.1