不要再手动计算显著性差异了!R代码从计算到出图,abcd标注一步到位!

文摘   2024-10-30 09:01   爱尔兰  

在科研论文中,尤其是涉及多组数据的实验研究时,平均值、方差和显著性差异分析的准确计算和展示显得尤为关键。虽然这些指标的计算非常简单,但从数据整理到结果导出非常耗费时间。今天的更新我们将分享一种简化的 R 语言代码,帮助科研新生和青年教师们快速完成数据分析及柱状图的绘制。

多重比较的基础概念

平均值与方差是描述一组数据的核心统计量:

  • 平均值表示数据的集中趋势,即一组数值的中心位置,能够反映整体趋势。 

  • 方差用于度量数据的离散程度,值越大代表数据离散性越高,表明数据的波动较大。 

对于两组或多组数据的比较,显著性差异分析(Significance Difference Analysis)是关键。通过显著性检验可以确定组间差异是否在统计上显著存在,是支持科研结论的有力证据。Tukey HSD 检验等多重比较方法则是常用的显著性分析方法之一,可用于多个组之间的均值比较,广泛应用于医学、农学等多个领域的实验数据分析。

手动分析的挑战

对于科研新手来说,手动完成数据分析的难点在于:

  • 需要多个软件协同操作:传统方法通常要使用 SAS、SPSS 进行方差分析,然后在 Origin 进行可视化,并最终将结果转移到 Excel 或 Word 制作表格。这种方式不但耗时,而且容易出错。 

  • 数据处理和图表生成分离:将数据分析结果转移到绘图软件中容易引入人为误差,尤其是当实验组数较多、显著性分析复杂时,难以保证每一步操作都准确无误。

用 R 实现自动化分析的优势

采用 R 语言可以一站式完成数据的平均值和方差计算、多重比较分析、图表生成。通过以下代码,我们可以实现以下流程:

  • 自动计算平均值和方差:无需手动计算,代码自动处理并输出。 

  • 多重比较分析:通过 Tukey HSD 检验直接获得显著性差异字母标记,方便展示组间差异。 

  • 生成可视化图表:生成分组柱状图,并在图表上标注显著性差异字母。 

下面我们将分段解读代码,逐步完成数据生成、显著性分析、多重比较标记与可视化等功能。


1. 数据模拟与处理

在这一步中,我们将生成一个模拟数据集,其中包含四个实验组(Control、Drug、Positive、Negative)和三种浓度水平(Low、Medium、High)。每个实验组在不同浓度下的抗氧化活性数据随机生成,用于后续分析。

# 加载所需的包
library(dplyr)
library(tidyverse)
library(ggplot2)
library(ggpubr)
library(multcomp)
library(multcompView)
library(openxlsx) # 用于将结果导出到Excel

# 设置随机种子以保证结果可重复
set.seed(123)

# 定义实验组和浓度水平
groups <- c("Control", "Drug", "Positive", "Negative")
concentrations <- c("Low", "Medium", "High")

# 生成抗氧化活性数据
data <- expand.grid(Group = groups, Concentration = concentrations, Replicate = 1:10) %>%
mutate(AntioxidantActivity = rnorm(n = n(), mean = 50 + as.numeric(Group) * 5 + as.numeric(Concentration) * 2, sd = 5))

解析:通过 expand.grid() 函数创建一个包含实验组、浓度和重复实验的组合数据框,然后利用 mutate() 函数生成每个组合的抗氧化活性数据。此数据服从正态分布,模拟了实际实验数据的差异性。


2. 数据汇总与描述性统计

接下来计算不同实验组和浓度水平下的均值和标准差,以便后续的可视化和显著性差异分析。

# 计算均值和标准差
summary_data <- data %>%
group_by(Group, Concentration) %>%
summarise(
Mean = round(mean(AntioxidantActivity), 2),
SD = round(sd(AntioxidantActivity), 2)
) %>%
ungroup()


3. 方差分析与 Tukey HSD 多重比较

在本部分,我们将对抗氧化活性数据进行方差分析,并通过 Tukey HSD 方法进行多重比较,生成每组间的显著性差异字母标记。

# 进行 ANOVA 分析
anova_model <- aov(AntioxidantActivity ~ Group * Concentration, data = data)

# 多重比较(Tukey HSD 检验)
tukey_result <- TukeyHSD(anova_model)

# 提取 Tukey HSD 的显著性字母
tukey_letters <- multcompLetters4(anova_model, tukey_result)

# 将显著性标签添加到 summary_data
summary_data$SigLabel <- NA
summary_data$SigLabel <- with(tukey_letters$`Group:Concentration`, Letters[match(paste(summary_data$Group, summary_data$Concentration, sep = ":"), names(Letters))])

解析:我们使用 aov() 函数进行方差分析,并应用 TukeyHSD() 进行 Tukey HSD 多重比较,以标记组间的显著性差异。multcompLetters4() 函数会生成代表显著性差异的字母标签,方便后续的可视化。


4. 绘制分组柱状图并添加显著性标记

通过 ggplot2 包绘制分组柱状图,直观展示各组的均值和显著性差异。此图使用深浅不一的灰色表示不同浓度,误差条和显著性字母标记显示在柱状图上方。

# 自定义颜色
custom_colors <- c("#333333", "#666666", "#CCCCCC")

# 绘制柱状图
plot <- ggplot(summary_data, aes(x = Group, y = Mean, fill = Concentration)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8), color = "black") +
geom_errorbar(aes(ymin = Mean - SD, ymax = Mean + SD),
width = 0.2, position = position_dodge(width = 0.8)) +
geom_text(aes(y = Mean + SD + 1, label = SigLabel),
position = position_dodge(width = 0.8), vjust = -0.2, size = 4) +
scale_fill_manual(values = custom_colors) +
labs(
title = "Antioxidant Activity Experiment Results",
x = "Experimental Group",
y = "Mean Antioxidant Activity ± SD"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.title = element_text(size = 12),
legend.text = element_text(size = 10)
)

# 显示图形
print(plot)


5. 小结

通过上述代码,我们展示了一个快速而高效的显著性差异分析流程。显而易见,绘制的图的质量跟Origin几乎一模一样,此流程从数据生成、显著性分析、可视化实现了一站式操作,大幅提升了数据分析的效率和准确性,非常适合科研新手和青年教师在实验数据处理和论文撰写中的使用。感兴趣的话,就快去试一试吧!

感谢关注,你的支持是我不懈的动力!

科研代码
专注R和Python的数据分析。
 最新文章