R 语言统计建模:从 t 检验到回归分析
FreeGuideOnline
最新
2026-06-12
1. 环境准备与基础概念
1.1 安装 R 与 RStudio
R 语言是统计计算与图形展示的核心工具,RStudio 是最流行的集成开发环境。
- 下载 R:CRAN 镜像
- 下载 RStudio:RStudio 官网
安装顺序:先装 R,再装 RStudio。打开 RStudio 即可开始。
1.2 基础操作与数据结构
我们将在 R 控制台(Console)执行代码。常用数据结构:
- 向量:
c(1, 2, 3) - 数据框:
data.frame(列1 = ..., 列2 = ...),类似表格。
示例:创建一个简单数据集df。
df <- data.frame(
group = rep(c("A", "B"), each = 10),
score = c(rnorm(10, mean=70, sd=10), rnorm(10, mean=78, sd=12))
)
head(df)
1.3 描述性统计先览
进行任何推断统计前,先了解数据基本形态。
summary(df$score) # 最小值、分位数、均值、最大值
tapply(df$score, df$group, mean) # 按组计算均值
tapply(df$score, df$group, sd) # 按组计算标准差
boxplot(score ~ group, data = df, col = c("lightblue", "lightgreen"))
2. 假设检验基石:t 检验
t 检验用于比较均值是否存在显著差异,是入门统计建模的第一道门槛。
2.1 单样本 t 检验
检验单个样本的均值是否等于某个已知值(如总体平均 75)。
# 假设想知道 df 中 A 组的真实均值是否等于 75
groupA <- df$score[df$group == "A"]
t.test(groupA, mu = 75)
输出解读:
t值:根据样本计算的统计量。df:自由度。p-value:若小于 0.05,拒绝“均值等于 75”的原假设。- 同时给出均值的置信区间。
2.2 独立双样本 t 检验(Welch 检验)
比较两个独立样本的均值是否有差异(不假定方差相等)。
t.test(score ~ group, data = df) # formula 写法
# 或直接传入两个向量
t.test(df$score[df$group=="A"], df$score[df$group=="B"])
默认执行 Welch 修正,更稳健。如想假定方差齐性,可加参数 var.equal = TRUE。
解读:p 值小于 0.05 表明两组的均值在统计上显著不同。
2.3 配对 t 检验
用于配对样本,例如同一受试对象前后的测量值。生成示例数据:
before <- c(68, 72, 75, 65, 80)
after <- c(73, 74, 78, 68, 85)
t.test(before, after, paired = TRUE)
此时原假设为“配对差值的均值为 0”。该方法消除了个体间变异,检验功效更高。
3. 从比较到预测:线性回归
t 检验本质上是线性回归的特例(当自变量为两分类时)。回归分析帮助我们理解变量间的关系、进行预测。
3.1 简单线性回归
模型:y = β0 + β1 * x + ε。我们使用内置 cars 数据集(刹车距离与速度)。
data(cars)
str(cars) # 两变量:speed(速度),dist(刹车距离)
plot(dist ~ speed, data = cars, main = "速度与刹车距离")
model_simple <- lm(dist ~ speed, data = cars)
summary(model_simple)
输出解读:
- Coefficients:
(Intercept)和speed的估计值、标准误、t 值、p 值。p 值检验该系数是否为零。 - Residual standard error:残差标准误。
- Multiple R-squared:模型解释的变异比例。这里的 0.651 表示速度能解释约 65% 的刹车距离变异。
- F-statistic:整体模型显著性的检验,p 值远小于 0.05,模型有意义。
回归方程:dist = -17.579 + 3.932 * speed
3.2 回归诊断(模型合理性检查)
简单线性回归也需验证基本假设:线性、正态性、等方差性、独立性和异常点。
par(mfrow = c(2,2))
plot(model_simple) # 自动生成四幅诊断图
- Residuals vs Fitted:检查线性与等方差性,若红点大致平稳,则等方差假设成立;若曲线,说明存在非线性。
- Normal Q-Q:检查残差正态性,点靠近虚线表示正态性好。
- Scale-Location:同样检验等方差,但以标准化的残差平方根绘图。
- Residuals vs Leverage:识别高杠杆异常点,点落在 Cook's distance 等高线外需留意。
3.3 多元线性回归
当有多于一个自变量时,模型扩展为 y ~ x1 + x2 + ...。使用 mtcars 数据集(汽车性能)。
data(mtcars)
model_multi <- lm(mpg ~ wt + hp, data = mtcars) # 用重量和马力预测油耗
summary(model_multi)
解读:
wt和hp的系数均为负,符合常识(车越重、马力越大,油耗越高)。- p 值:两者都显著。
- Adjusted R-squared:多元回归中更重视调整 R²,0.815 表示解释力强。
- 注意多重共线性:用
vif()来自car包检测方差膨胀因子。
library(car)
vif(model_multi) # 一般 VIF<5 或 <10 可接受
3.4 分类自变量与回归
当自变量是分类变量时,R 自动生成虚拟变量(0/1)。回到最初的 df:
model_cat <- lm(score ~ group, data = df)
summary(model_cat)
- 截距对应基线组(此处为 A)的均值。
groupB系数表示 B 组与 A 组的均值差,并且 t 检验的 p 值与前面独立双样本 t 检验(假定等方差时)的 p 值一致。 结论:t 检验与线性回归对两组比较给出相同的推断。
4. 进阶话题导览
- 方差分析(ANOVA):当分组多于 2 个时,用
aov()或lm()配合anova(),本质仍是线性模型。 - 交互效应:
lm(mpg ~ wt * hp)等价于wt + hp + wt:hp,可探索变量间的联合作用。 - 模型选择:使用
step()进行逐步回归,或基于 AIC 比较多个模型。 - 可视化:
ggplot2包绘制拟合线和置信带,ggplot(data, aes(x, y)) + geom_point() + geom_smooth(method = "lm")。
5. 学习资源推荐
- 《R in Action》——从统计角度系统学习 R。
- 《An Introduction to Statistical Learning》(ISLR),附 R 代码,讲解回归、分类等。
- R 内置文档:
?lm,?t.test查看帮助页和精彩示例。
通过亲手跑通上述代码,你将建立从基本假设检验到回归建模的完整工作流。统计思维的核心不在于复杂模型,而在于清晰的问题定义、恰当的假设检验和可靠的模型诊断。