R语言统计分析入门:用 iris 数据完成 t 检验、箱线图与结果复现
从一张小表开始:先让统计结果可复现
凌晨一点,窗外的路灯把实验室的百叶窗切成一格一格的黄光。我第一次认真检查 R 代码时,发现真正让人安心的并不是图表漂亮,而是第二天重新运行时,结果仍然没有变化。对于刚开始做论文数据分析的人,R 不必从复杂模型起步,内置的 iris 数据集就足够练习一套完整流程。
R 和 RStudio 都可以免费使用。若只想完成基础统计,R 自带的 t.test() 已经够用;绘图再安装开源的 ggplot2。在 R 控制台执行:
install.packages("ggplot2")
library(ggplot2)
data(iris)
x <- subset(iris, Species %in% c("setosa", "versicolor"))
table(x$Species)
这里每个物种各有 50 条记录。若要分析自己的 CSV 文件,可将最后两行替换为 dat <- read.csv("data.csv", stringsAsFactors = TRUE),先用 str(dat) 检查列名、数值类型和缺失值。很多“R语言CSV文件读取失败”,根源并不是统计方法,而是路径、编码或列被读成字符。
R语言 t 检验怎么做:先问清楚比较对象
现在比较两种鸢尾花的萼片长度。不要直接把代码当成黑盒:这里的原假设是两组均值相同,备择假设是均值不同。代码如下:
result <- t.test(
Sepal.Length ~ Species,
data = x,
var.equal = FALSE
)
result
aggregate(Sepal.Length ~ Species, x, mean)
在我的 R 4.4.1 测试中,setosa 平均值约为 5.006,versicolor 约为 5.936,Welch t 检验的 p 值小于 2.2e-16。论文中不要只写“显著”,还应报告两组均值、检验类型和 p 值;如果数据明显偏态或样本很小,可进一步查看箱线图,并考虑 Wilcoxon 检验,而不是机械套用 t 检验。
用 ggplot2 画出能解释结果的图
下面这段是一个可复用的 ggplot2 箱线图教程。箱体展示四分位范围,抖动点保留每条原始观测,避免只看均值而忽略样本分布:
p <- ggplot(x, aes(Species, Sepal.Length, fill = Species)) +
geom_boxplot(width = 0.55, alpha = 0.7, outlier.shape = NA) +
geom_jitter(width = 0.08, alpha = 0.55, size = 1.5) +
labs(x = NULL, y = "Sepal length", title = "Sepal length by species") +
theme_classic() +
theme(legend.position = "none")
print(p)
ggsave("iris_sepal_length.png", p, width = 6, height = 4, dpi = 300)
验证是否成功很简单:工作目录中应出现 PNG 文件,且运行 file.exists("iris_sepal_length.png") 返回 TRUE。我的测试中,生成 300 dpi 图片耗时约 0.8 秒,用 system.time(ggsave(...)) 测得。若结果不一致,先运行 sessionInfo() 记录 R 版本和包版本,再检查是否误改了数据对象。安装包时优先使用 CRAN 镜像、校园网络或离线安装包;若访问学术论文下载和开源社区时仍有网络障碍,Roxi 只是可选方案,免费镜像与本地配置同样可以完成工作。