多组样本两两差异分析

使用 Wilcox test 对多组进行两两比较

phy为phyloseq对象,group为分组vector

DA_wilcox_paired <- function(phy, group){
  metadata <- sample_data(phy) %>% 
    as.matrix() %>%
    as.data.frame() %>%
    rownames_to_column('SampleID')
  comb_matrix <- combn(group,2)
  res_list <- list()
  for (i in 1:ncol(comb_matrix)){
    group1 <- comb_matrix[,i][1]
    group2 <- comb_matrix[,i][2]
    group1_samples <- metadata %>% filter(ExpGroup == group1) %>% .$SampleID
    group2_samples <- metadata %>% filter(ExpGroup == group2) %>% .$SampleID
    group_name <- paste0(group1, "_", group2)
    phy_tmp <- prune_samples(c(group1_samples, group2_samples), phy)
    phy_tmp <- prune_taxa(taxa_sums(phy_tmp) > 0, phy_tmp)
    metadata_tmp <- sample_data(phy_tmp) %>% 
      as.matrix() %>%
      as.data.frame() %>%
      rownames_to_column('SampleID')
    abundance_tab <- otu_table(phy_tmp) %>%
      as.data.frame() %>%
      rownames_to_column('OTUID') %>%
      pivot_longer(!OTUID, names_to = 'SampleID', values_to = 'value') %>%
      left_join(., metadata_tmp, by = 'SampleID')
    wilcox_res <- NULL
    for (j in unique(abundance_tab$OTUID)){
      input_data <- abundance_tab %>% filter(OTUID == j)
      input_group1 <- input_data %>% filter(ExpGroup == group1) %>% .$value
      input_group2 <- input_data %>% filter(ExpGroup == group2) %>% .$value
      input_group1_mean <- mean(input_group1)
      input_group2_mean <- mean(input_group2)
      enrihment_value <- ifelse(input_group1_mean > input_group2_mean, group1, group2)
      res <- wilcox.test(input_group1, input_group2)
      wilcox_res <- rbind(wilcox_res, c(group_name, j, enrihment_value, res$p.value))
    }
    wilcox_res <- as.data.frame(wilcox_res)
    colnames(wilcox_res) <- c('compare', 'OTUID', 'enrichment', 'pvalue')
    wilcox_res$p.adjust <- p.adjust(wilcox_res$pvalue, method = 'fdr')
    res_list[[group_name]] <- wilcox_res
  }
  return(res_list)
}

DA_paired_res <- DA_wilcox_paired(phy = phy_relab, group = c('A', 'B', 'C'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂渊泉树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值