0

我想问一下如何使用 R 中的加权 UniFrac 或 Bray-Curtis 方法计算组之间的距离。我已经使用 UniFrac 方法得到了每个样本之间的距离。

library("phyloseq")
require(GUniFrac)
require(vegan)
require(ade4)

otu.tab <- t(otu_table(phy))
treefile <- phy_tree(phy)

# calculate the UniFracs
unifracs <- GUniFrac(otu.tab, treefile, alpha = c(0, 0.5, 1))$unifracs

# create
d5 <- unifracs[, , "d_0.5"]   # GUniFrac with alpha 0.5 

距离结果表为:

> d5
           SamA_1    SamA_2    SamB_1    SamB_2    SamC_1    SamC_2        
SamA_1  0.0000000 0.3939102 0.3972185 0.3846277 0.4052247 0.4187168  
SamA_2  0.3939102 0.0000000 0.2986860 0.3003682 0.3384096 0.3475723  
SamB_1  0.3972185 0.2986860 0.0000000 0.3549342 0.2997557 0.3457747  
SamB_2  0.3846277 0.3003682 0.3549342 0.0000000 0.3378881 0.3529470  
SamC_1  0.4052247 0.3384096 0.2997557 0.3378881 0.0000000 0.3828705 
SamC_2  0.4187168 0.3475723 0.3457747 0.3529470 0.3828705 0.0000000  

> sample_data(phy)
         Treat    Groups    
SamA_1     CON         A
SamA_2     CON         A
SamB_1   Treat         B
SamB_2   Treat         B
SamC_1   Treat         C
SamC_2   Treat         C

我想计算 A、B 和 C 组之间的距离,最终我想要一个距离表,例如“d5”。

哪个函数适合获得 R 中组之间的计算距离表?

4

1 回答 1

0

这是使用 mctoolsr 包对 Bray-Curtis 差异执行此操作的快速方法。您还应该能够用您的 UniFrac 距离对象替换“dm”对象,但只需确保在计算 UniFrac 矩阵时,样本与您的 mctoolsr 对象的顺序相同(即 input$map_loaded)。或者,您可以将距离矩阵融合为长格式(例如,使用reshape2::melt()然后计算平均误差和标准误差并最终绘制它,但这超出了您原始问题的范围。这是使用 mctoolsr 教程的示例。

# Calculate mean Bray-Curtis dissimilarities in mctoolsr
# See tutorial here https://github.com/leffj/mctoolsr
install.packages("devtools")
devtools::install_github("leffj/mctoolsr")
library(mctoolsr)
tax_table_fp = system.file('extdata', 'fruits_veggies_taxa_table_wTax.biom', 
                           package = 'mctoolsr')
map_fp = system.file('extdata', 'fruits_veggies_metadata.txt', 
                     package = 'mctoolsr')
input = load_taxa_table(tax_table_fp, map_fp)
input_rar = single_rarefy(input, 1000)
dm = calc_dm(input_rar$data_loaded)
dm_mean <- calc_mean_dissimilarities(dm, 
                                     input_rar$map_loaded, 
                                     "Sample_type")
dm_mean
于 2020-04-10T02:01:00.537 回答