审稿人:箱线图用R语言添加上显著性标记,好看多了!

文摘   2024-11-06 09:01   爱尔兰  
在科研数据分析中,显著性分析是不可或缺的一环。它帮助研究人员区分不同处理或实验组之间的差异是否真实存在,而不仅仅是偶然产生的。显著性分析通常使用方差分析(ANOVA)和多重比较方法,广泛应用于生物学、医学、农学等领域,以确保实验结果的科学性和结论的可靠性。本文将介绍如何使用 R 进行显著性分析,并将分析结果通过表格和图形的形式直观地展示,为科研论文或展示提供可参考的基础。

在这个教程中,我们将介绍以下步骤:

  • 准备数据和加载必要的 R 库;

  • 进行显著性分析并获得分组标记; 

  • 制作数据总结表格; 

  • 绘制带显著性标记的箱线图;

  • 将显著性结果表格导出为 Excel 文件。

在此示例中,我们将研究不同种类的鸢尾花(Species)在某个特征(如花萼长度 Sepal.Length)上的显著性差异。以下是使用 iris 数据集的完整流程代码。


第一步:加载 iris 数据集和所需的 R 包

首先加载 iris 数据集(R 自带)并安装并加载相关的包。
# 加载必要的包
library(tidyverse)
library(agricolae)
library(openxlsx)

第二步:查看数据结构

为了更好地了解数据,我们可以查看 iris 数据集的前几行。iris 数据集包含了 150 个观测值,分为三个种类 (Species):setosaversicolor 和 virginica,每种 50 个观测值。每个观测值包含花萼长度、花萼宽度、花瓣长度和花瓣宽度的信息。
# 查看 iris 数据集的前几行
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa

第三步:执行显著性分析

我们选择 Sepal.Length(花萼长度)作为分析变量,并使用单因素方差分析(ANOVA)检验不同种类 Species 之间的显著性差异,然后使用 Duncan 检验进行多重比较以获得显著性字母分组。
# 执行 ANOVA 检验
anova_result <- aov(Sepal.Length ~ Species, data = iris)
summary(anova_result)
## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 63.21 31.606 119.3 <2e-16 ***
## Residuals 147 38.96 0.265
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 使用 Duncan 检验得到显著性字母标记

duncan_result <- duncan.test(anova_result, "Species")
print(duncan_result$groups) # 显示显著性分组字母
## Sepal.Length groups
## virginica 6.588 a
## versicolor 5.936 b
## setosa 5.006 c
# 将分组结果转换为数据框并按组排序
significant_labels <- as.data.frame(duncan_result$groups)
colnames(significant_labels)[1] <- "Species" # 将 'trt' 列名改为 'Species'
significant_labels$Species <- as.factor(significant_labels$Species) # 确保为因子类型
significant_labels <- significant_labels %>% arrange(Species)

第四步:制作显著性分析结果表格

将每个种类的平均值、标准差以及显著性字母标记汇总在表格中,方便展示和导出。
# 计算每个种类的平均值和标准差,并合并显著性分组信息
summary_stats <- iris %>%
group_by(Species) %>%
summarize(
mean = mean(Sepal.Length),
sd = sd(Sepal.Length)
) %>%
left_join(significant_labels, by = "Species")
summary_stats$groups <-significant_labels$groups
# 查看结果表格
print(summary_stats)
## # A tibble: 3 × 4
## Species mean sd groups
## <fct> <dbl> <dbl> <chr>
## 1 setosa 5.01 0.352 c
## 2 versicolor 5.94 0.516 b
## 3 virginica 6.59 0.636 a
表格 summary_stats 现在包含了各个 Species 的平均值、标准差和显著性字母标记,可直接用于报告。

第五步:绘制带显著性字母标记的箱线图

接下来,使用 ggplot2 绘制箱线图,并在图中添加显著性差异的字母。
# 绘制箱线图并添加字母标记
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot() +
geom_text(data = summary_stats, aes(x = Species, y = max(iris$Sepal.Length) + 0.2, label = groups),
vjust = 0) +
labs(title = "Boxplot of Sepal Length with Significant Difference Letters",
x = "Species",
y = "Sepal Length")
在此图中,每个种类的箱线图上方都有一个字母标记,表示显著性分组。具有不同字母的组之间存在显著性差异(p < 0.05),而相同字母的组之间无显著性差异。

第六步:将结果表格导出到 Excel

最后,将 summary_stats 表格导出到 Excel 文件,便于保存和进一步分析。
# 创建 Excel 文件
wb <- createWorkbook()

# 添加工作表并写入数据
addWorksheet(wb, "Significant Analysis")
writeData(wb, "Significant Analysis", summary_stats)

# 保存 Excel 文件
saveWorkbook(wb, file = "Iris_Significance_Analysis.xlsx", overwrite = TRUE)

# 确认导出
print("数据已导出到 Iris_Significance_Analysis.xlsx 文件")
## [1] "数据已导出到 Iris_Significance_Analysis.xlsx 文件"

总结

通过以上步骤,我们使用 iris 数据集进行了显著性分析,生成了一个包含平均值、标准差和显著性字母的表格,绘制了带显著性字母标记的箱线图,并将结果导出到 Excel 文件。这种流程可以用于各种数据集和科研场景,帮助您更好地展示和理解实验组之间的差异。

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