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)

解读

  • wthp 的系数均为负,符合常识(车越重、马力越大,油耗越高)。
  • 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 查看帮助页和精彩示例。

通过亲手跑通上述代码,你将建立从基本假设检验到回归建模的完整工作流。统计思维的核心不在于复杂模型,而在于清晰的问题定义、恰当的假设检验和可靠的模型诊断。