R 语言基础|均值加减误差|统计数据制表、制图

文摘   2024-05-20 00:37   江苏  

ANOVA-01

1 需要的包

library(tidyverse) # 包括 ggplot2 等工具
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

2 数据

# 保存数据
write.csv(
x = datasets::CO2, # 需要存储的数据
file = "CO2.csv", # 存储的数据名
row.names = FALSE # 不保存行名
)
list.files()
[1] "ANOVA-02.html"            "ANOVA-02.Rmd"            
[3] "CO2.csv" "fig.mean.point.error.pdf"
[5] "fig.mean.point.error.png" "fig.mean.point.error.svg"
[7] "styles.css"
# 读取数据
my.data <- read.csv(
file = "CO2.csv", # 数据 csv 文件名
header = TRUE # 数据有列名
)
colnames(my.data)
[1] "Plant"     "Type"      "Treatment" "conc"      "uptake"
my.data.test <- read.csv(
file = "CO2.csv", # 数据 csv 文件名
header = FALSE # 假设数据没有列名
)
colnames(my.data.test) # 列名变成了 "V1" "V2" "V3" "V4" "V5"
[1] "V1" "V2" "V3" "V4" "V5"

2.1 读取数据后,探索数据

head(my.data) # 浏览数据表前 6 行
  Plant   Type  Treatment conc uptake
1 Qn1 Quebec nonchilled 95 16.0
2 Qn1 Quebec nonchilled 175 30.4
3 Qn1 Quebec nonchilled 250 34.8
4 Qn1 Quebec nonchilled 350 37.2
5 Qn1 Quebec nonchilled 500 35.3
6 Qn1 Quebec nonchilled 675 39.2
colnames(my.data) # 数据表列名(有哪些变量)
[1] "Plant"     "Type"      "Treatment" "conc"      "uptake"
str(my.data) # 数据表结构
'data.frame':   84 obs. of  5 variables:
$ Plant : chr "Qn1" "Qn1" "Qn1" "Qn1" ...
$ Type : chr "Quebec" "Quebec" "Quebec" "Quebec" ...
$ Treatment: chr "nonchilled" "nonchilled" "nonchilled" "nonchilled" ...
$ conc : int 95 175 250 350 500 675 1000 95 175 250 ...
$ uptake : num 16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
dim(my.data) # 数据表行列数
[1] 84  5

3 制表:各组均值、误差

使用 R 语言中的 dplyr 包,汇总数据集。

  • dplyr 包提供了一系列的工具,用于快速和高效地对数据做转换和汇总,

  • 以下这段代码的目的是计算不同类型(Type)和治疗方案(Treatment)下,吸收量(uptake)的平均值及其标准误。

mean.se.data <- my.data |>
# 按照 Type 和 Treatment 两个变量对数据集分组
group_by(Type, Treatment) |>
# 汇总对分组后的数据,计算吸收量的平均值、标准误
summarise(
# 计算每个分组中吸收量的平均值
uptakeMean = mean(uptake),
# 计算吸收量的标准误,标准误是标准差除以样本量的平方根
uptakeSe = sd(uptake) / sqrt(length(uptake)),
# 输出格式为保留两位小数的均值、标准误
uptakeMeanSe = sprintf("%.2f ± %.2f", uptakeMean, uptakeSe)
) |>
# 将分组的数据集重新变回未分组的状态
ungroup()
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# 输出处理后的数据集
mean.se.data
# A tibble: 4 × 5
Type Treatment uptakeMean uptakeSe uptakeMeanSe
<chr> <chr> <dbl> <dbl> <chr>
1 Mississippi chilled 15.8 0.886 15.81 ± 0.89
2 Mississippi nonchilled 26.0 1.62 25.95 ± 1.62
3 Quebec chilled 31.8 2.10 31.75 ± 2.10
4 Quebec nonchilled 35.3 2.09 35.33 ± 2.09

3.1 保存表格

write.csv(mean.se.data, "mean-se-data.csv", row.names = FALSE)

4 绘图

对 ggplot2 的绘图设置全局的主题。

# 定义一个变量 FONT,用于图形主题设置字体
FONT <- "Prompt"

# 设置 ggplot2 的全局主题,这将影响所有后续创建的图形
theme_set(
# 创建一个黑白主题的基础,适合出版质量的图形
theme_bw(
# 设置基础字体
base_family = FONT,
# 设置基础字体大小为 22 点
base_size = 22,
# 设置基础矩形大小(如柱状图的柱子宽度)为 0.6
base_rect_size = 0.6,
# 设置基础线大小(如线图的线宽)为 0.3
base_line_size = 0.3
) +
theme(
# 设置面板网格线为空白,即不显示网格线
panel.grid = element_blank(),
# 设置分面(facet)标题背景为空白
strip.background = element_blank(),
# 设置坐标轴标题的文本大小为 22 点
axis.title = element_text(size = 22),
# 设置坐标轴文本的文本大小为 14 点
axis.text = element_text(size = 14),
# 设置坐标轴刻度的长度为 7 点
axis.ticks.length = unit(7, "pt"),
# 设置图例标题的文本大小为 22 点
legend.title = element_text(size = 22)
)
)

4.1 均值点、误差线

使用 ggplot2 来创建一个均值和误差线的图表。

  • 展示了不同类型(Type)和治疗方案(Treatment)下的吸收量均值(uptakeMean)及其标准误(uptakeSe)。

fig.mean.point.error <- mean.se.data |>
ggplot(
# 定义图形的美学映射
aes(
x = Type, # x 轴映射到 Type 变量
y = uptakeMean, # y 轴映射到 uptakeMean 变量
color = Treatment, # 颜色映射到 Treatment 变量
fill = Treatment # 填充也映射到 Treatment 变量
)
) +
# 添加点图层
geom_point(
position = position_dodge(0.2) # 错开 0.2 个单位,防止不同治疗方案的数据点相互重叠
) +
# 添加误差线图层
geom_errorbar(
# 定义误差线的最小 y 值和最大 y 值
aes(
ymin = uptakeMean - uptakeSe,
ymax = uptakeMean + uptakeSe
),
width = 0, # 设置误差线的宽度,可以设置为小于 1 的任何值
linewidth = 1, # 设置误差线的线宽
position = position_dodge(0.2) # 错开 0.2 个单位,防止不同组的数据点相互重叠
) +
# 设置颜色标度
scale_color_brewer(
palette = "Set2" # 使用 Brewer 颜色集中的 Set2 调色板
) +
coord_cartesian( # 设置图形的坐标轴范围
ylim = c(10, 40) # 限制y轴的范围为 10 到 40
)

# 输出创建的带有均值和误差线的图表对象
fig.mean.point.error

保存图片

  • 若存为 SVG 格式,则更方便导入 PPT 编辑。

# 存为  SVG 格式,则更方便导入 PPT 编辑
library(svglite)

ggsave(
"fig.mean.point.error.svg",
fig.mean.point.error,
width = 5,
height = 5
)

# 存为 PDF 格式
ggsave(
"fig.mean.point.error.pdf",
fig.mean.point.error,
width = 5,
height = 5,
device = cairo_pdf
)

# 存为 600 DPI 高分辨率 PNG 格式
ggsave(
"fig.mean.point.error.png",
fig.mean.point.error,
width = 5,
height = 5,
dpi = 600
)

4.2 箱线图

使用 ggplot2 包来创建一个箱线图。

  • 箱线图是一种用于展示数据分布的统计图表,

  • 它展示了数据的:中位数,第一、第三四分位数,第一、第三四分位数加减 1.5 倍四分位距(IQR)或者异常值。

fig.boxplot.mean <- my.data |>
ggplot(
# 定义图形的美学映射
aes(
x = Type, # x 轴映射到 Type 变量
y = uptake, # y 轴映射到 uptake 变量
color = Treatment # 颜色映射到 Treatment 变量
)
) +
# 添加箱线图图层
geom_boxplot(
linewidth = 1 # 设置箱线图的线条宽度为 1
) +
# 设置颜色标度
scale_color_brewer(
palette = "Set2" # 使用 Brewer 颜色集中的 Set2 调色板
) +
# 设置图形的坐标轴范围
coord_cartesian(
ylim = c(0, 60) # 限制y轴的范围为 0 到 60
)

# 输出创建的箱线图对象
fig.boxplot.mean


ecologyR
🚀打赏可获取本公众号代码合集(见置顶文章)📌统计案例📌统计制图📌显著性标记📌结构方程模型可视化工具📌SEM教程与案例📌论文代码复现📌地图可视化
 最新文章