首页 > 其他分享 >R:计算均值和标准差并进行多重比较

R:计算均值和标准差并进行多重比较

时间:2024-03-19 09:44:58浏览次数:26  
标签:多重 读取数据 均值 value 标准差 library

rm (list = ls ()) #清除所有变量
setwd("C:\\Users\\Administrator\\Desktop\\新建文件夹\\FAPROTAX微生物功能预测") #设置工作目录

# 加载所需的包
library(tidyverse)
library(agricolae)
library(dplyr)

# 读取数据
abundance_file <- "vegan.txt" # 功能丰度文件路径
group_file <- "metadata.txt" # 样本分组文件路径

abundance_data <- read.csv(abundance_file, sep = "\t", row.names = 1, check.names = FALSE)
group_data <- read.csv(group_file, sep = "\t", header = FALSE, col.names = c("Sample", "Group"))

# 整理分组信息
# 假设分组文件有两列,第一列为样本名,第二列为对应的分组
colnames(group_data) <- c("Sample", "Group")
# 转换丰度数据为长格式
abundance_long <- as.data.frame(t(abundance_data))
abundance_long$Sample <- rownames(abundance_long)
melted_data <- reshape2::melt(abundance_long, id.vars = "Sample")
# 合并分组信息
merged_data <- merge(melted_data, group_data, by = "Sample")

# 计算每个功能每一组的均值和标准差
group_summary <- merged_data %>%
  group_by(variable, Group) %>%
  summarise(Mean = mean(value), SD = sd(value))

# 指定分组的顺序
groups_order <- c("B73_DAS28", "B73_DAS42", "B73_DAS56", "B73_DAS70", 
                  "Mo17_DAS28", "Mo17_DAS42", "Mo17_DAS56", "Mo17_DAS70")

# 确保merged_data中的Group列是因子类型,并设置正确的水平
merged_data$Group <- factor(merged_data$Group, levels = groups_order)

# 对每个功能进行ANOVA分析和Tukey HSD测试
analysis_results <- list()
for(feature in unique(merged_data$variable)) {
  feature_data <- subset(merged_data, variable == feature)
  model <- aov(value ~ Group, data = feature_data)
  tukey <- HSD.test(model, "Group", console = TRUE)
  analysis_results[[feature]] <- tukey
}

# 准备输出数据框
output_data <- data.frame(Feature = character(),
                          Group = factor(levels = groups_order),
                          Mean = numeric(),
                          SD = numeric(),
                          Significance = character())

# 填充输出数据
for(feature in names(analysis_results)) {
  groups_info <- analysis_results[[feature]]$groups
  for(group_name in groups_order) { # 按指定顺序处理分组
    if(group_name %in% rownames(groups_info)){
      group_data <- subset(merged_data, variable == feature & Group == group_name)
      mean_val <- mean(group_data$value)
      sd_val <- sd(group_data$value)
      sig_mark <- as.character(groups_info[group_name, "groups"])
      output_data <- rbind(output_data, data.frame(Feature = feature,
                                                   Group = group_name,
                                                   Mean = mean_val,
                                                   SD = sd_val,
                                                   Significance = sig_mark))
    }
  }
}

# 输出结果到TXT文件
write.table(output_data, "output_results.txt", row.names = FALSE, sep = "\t", quote = FALSE)

 

标签:多重,读取数据,均值,value,标准差,library
From: https://www.cnblogs.com/wzbzk/p/18082069

相关文章

  • 代码随想录算法训练营第day46|139.单词拆分 、多重背包
    目录139.单词拆分多重背包 139.单词拆分力扣题目链接(opensnewwindow)给定一个非空字符串s和一个包含非空单词的列表wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单......
  • 代码随想录算法训练营第四十六天| 139.单词拆分 多重背包 背包问题总结篇!
    单词拆分 题目链接:139.单词拆分-力扣(LeetCode)思路:竟然真能转化为背包问题。classSolution{public:boolwordBreak(strings,vector<string>&wordDict){unordered_set<string>t(wordDict.begin(),wordDict.end());vector<bool>dp(s.size()+......
  • 代码随想录算法训练营第四十六天 | 背包问题总结篇!,关于多重背包,你该了解这些!,139.单词
    背包总结听说背包问题很难?这篇总结篇来拯救你了年前我们已经把背包问题都讲完了,那么现在我们要对背包问题进行总结一番。背包问题是动态规划里的非常重要的一部分,所以我把背包问题单独总结一下,等动态规划专题更新完之后,我们还会在整体总结一波动态规划。关于这几种常见......
  • 使用Julia语言展示几何平均值与算数平均值在实际应用中的差别(采用注册计量师考试试题
    理论部分在注册计量师考试中有一道试题,大体内容为:现在有一块砝码在等臂天平上进行测量,第一次测得值是19.6g,调换两边位置后的测得值是19.7g,天平最终测得检测样品的重量为多少? 个别同事可能会将算数平均值作为这个砝码的最终测量值,但实际应当使用几何平均值的方式计算,算数......
  • 有关幅值、振幅、峰值、峰峰值、有效值、平均值的区分
    本文以Ut=10sin(wt)的正弦电压为例:幅值:10V振幅:10V峰值(Vp:Peak):10V峰峰值(Vpp:Peaktopeak):20V有效值(Vrms):10/2^(1/2)-->峰值除以根号二平均值(Vavg):这边提以下半波整流与全波整流下平均值与峰值的关系半波整流:Vavg=0.45Vp全波整流:Vavg=0.9Vp注意:......
  • 多重背包详解,二进制优化、单调队列优化
    文章目录零、前言一、多重背包初步1.1问题描述1.2朴素算法二、朴素算法的优化策略2.1二进制优化2.1.1算法思想2.2二进制优化的正确性证明2.3代码实现2.2单调队列优化2.2.1算法思想2.2.2代码实现2.3、总结三、OJ练习3.1P1776宝物筛选3.1.1原题链接3.1.2思路分析3.1.3......
  • 数据结构算法系列----背包问题(01,完全,多重)
    一、01背包1、01背包介绍    "01背包"是一个经典的动态规划问题。在01背包中,给定一个背包容量和一组物品,每个物品都有自己的重量和价值。问题的目标是选择一些物品放入背包中,使得放入的物品总重量不超过背包容量,同时使得放入的物品总价值最大。    "01"表......
  • 多重映射
    题目:AtCoderBeginnerContest342_C链接:https://atcoder.jp/contests/abc342题意:给出一串字符串S,字符串仅由小写字母组成,有m次操作,第mi次操作的意思为将字符串S中所有出现的字符C转化为字符D,m次操作完成后输出最终字符串。思路:本题是一道非常标准的字符多重映射问题,仅需要用......
  • MATLAB数据挖掘用改进的K-Means(K-均值)聚类算法分析高校学生的期末考试成绩数据
    全文链接:http://tecdat.cn/?p=30832原文出处:拓端数据部落公众号本文首先阐明了聚类算法的基本概念,介绍了几种比较典型的聚类算法,然后重点阐述了K-均值算法的基本思想,对K-均值算法的优缺点做了分析,回顾了对K-均值改进方法的文献,最后在Matlab中应用了改进的K-均值算法对数据进行了......
  • 均值不等式证明(拉格朗日乘数法)
    Part1求证:\(\frac{n}{\sum_{i=1}^{n}\frac{1}{y_i}}\leq({\prod_{i=1}^{n}y_i})^{\frac{1}{n}}\)\(y_i\)为正实数\(n\geq3\)证明:令\(x_i\)=\(y_i^{\frac{1}{n}}\)且\(x_i\)为正实数原命题等价于:\[{\prod_{i=1}^{n}x_i}-\frac{n}{\sum_{i=1}^{n}\......