第9讲:统计基础
2026年04月24日
xlim() / scale_x_continuous() 控制范围;scale_x_log10() 处理跨数量级数据;coord_cartesian() 缩放视图而不丢失数据facet_wrap() 的 nrow/ncol 控制布局,scales = "free" 放开坐标轴,labeller 自定义标签+ 左右、/ 上下、(p1 + p2) / p3 复杂布局;plot_annotation() 统一标题scale_*_manual() 手动配色;scale_*_brewer() 预设调色板;scale_*_viridis_c() 色盲友好的连续变量首选ggsave() 指定尺寸与 dpi;showtext 解决中文字体问题mtcars 综合演示下一讲我们将进入线性回归。
在此之前,有三个问题必须先回答:
① 我的数据长什么样?(描述统计 + 正态分布)
② 变量之间有关系吗?(相关性)
③ 这个关系"可信"吗?(统计推断)
注记
回归分析本质上是对这三个问题的系统化回答。今天打好地基,下讲才能盖楼。
理解数据的"底色"
均值(Mean):所有观测值的算术平均
\[\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i\]
中位数(Median):排序后位于正中间的值
均值的弱点
中位数的优势
提示
实战技巧:均值与中位数差异悬殊 → 数据存在偏态 → 要警惕异常值!
注记
蓝色实线 = 均值,橙色虚线 = 中位数。右偏时均值被极大值"拉走"。
数据的"平均偏差"有多大?
方差(Variance):
\[\sigma^2 = {\sum_{i=1}^{n}(x_i - \bar{x})^2\over {n - 1}}\]
标准差(Standard Deviation):
\[\sigma = \sqrt{\sigma^2}\]
重要
关键洞察:线性回归的本质,就是"解释方差"。
想象你面对 \(y\) 的数据(例如房价),它有一定的总变异。
回归模型引入 \(x\)(面积、地段……)后:
\[\underbrace{\text{SS}_\text{Total}}_{\text{总变异}} = \underbrace{\text{SS}_\text{Regression}}_{\text{模型解释部分}} + \underbrace{\text{SS}_\text{Residual}}_{\text{残差/不可解释部分}}\]
\(R^2\)(决定系数) 就是"模型解释的比例":
\[R^2 = \frac{\text{SS}_\text{Regression}}{\text{SS}_\text{Total}} = 1 - \frac{\text{SS}_\text{Residual}}{\text{SS}_\text{Total}}\]
这个方差分解框架,正是 \(F\) 检验的数学基础——稍后 Part 4 详细展开。
线性模型的概率基础
正态分布(Normal Distribution),又称高斯分布,是统计学中最重要的概率分布:
\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\]
由两个参数完全决定:均值 \(\mu\)(位置)和标准差 \(\sigma\)(宽窄)
为什么它无处不在?
记号:
\[X \sim \mathcal{N}(\mu,\, \sigma^2)\]
标准正态分布(\(\mu=0,\,\sigma=1\)):
\[Z \sim \mathcal{N}(0, 1)\]
注记
所有正态分布的曲线形状相同,只是位置和宽度不同。改变 \(\mu\) 左右平移,改变 \(\sigma\) 胖瘦变化。
标准化(Standardization):将任意正态分布转换为标准正态 \(\mathcal{N}(0,1)\)
\[Z = \frac{x - \mu}{\sigma}\]
Z 分数的意义:
提示
实战价值:
不同量纲的变量标准化后可直接比较。
回归中的标准化系数(beta) 就基于此——用来比较不同自变量的相对重要性。
[1] 0.00998
为什么线性回归假设残差服从正态分布?
回归模型:\(y_i = \beta_0 + \beta_1 x_i + \varepsilon_i\),其中 \(\varepsilon_i \sim \mathcal{N}(0, \sigma^2)\)
这个假设意味着:
回归的"前传"
在计算任何系数之前,先看图。
警告
Anscombe 四重奏的教训(第7讲):统计量相同,散点图可能完全不同。图永远先于数字。
衡量两个变量之间线性关系的强度与方向:
\[r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum(x_i-\bar{x})^2} \cdot \sqrt{\sum(y_i-\bar{y})^2}}\]
| \(r\) 的范围 | 解读 |
|---|---|
| \(+1\) | 完全正线性相关 |
| \(0.7 \sim 0.9\) | 强正相关 |
| \(0.3 \sim 0.7\) | 中等正相关 |
| \(\approx 0\) | 无线性关系 |
| 负值 | 反向关系 |
使用条件:
秩相关(Rank Correlation):先将数据转换为排名,再计算相关性
\[r_s = 1 - \frac{6\sum d_i^2}{n(n^2-1)}\]
其中 \(d_i\) 是第 \(i\) 个观测值在两变量中的排名之差。
适用场景
与 Pearson 的区别
Pearson 问:"线性关系有多强?"
Spearman 问:"单调关系有多强?"
一个增大时另一个也增大,就算不是直线也能捕捉到。
重要
这是统计学中最重要也最常被忽略的警告。
经典案例:
三种混淆模式:
| 模式 | 描述 |
|---|---|
| 混淆变量(Confounding) | 第三个变量同时影响 \(x\) 和 \(y\) |
| 反向因果(Reverse Causality) | \(y\) 其实导致了 \(x\) |
| 巧合相关(Spurious Correlation) | 纯属偶然,无实质联系 |
提示
回归分析可以控制混淆变量,但无法根本解决因果推断——这需要实验设计或更高级的方法(断点回归、双重差分)。
如果两个自变量之间高度相关……
模型"分不清"到底是 \(X_1\) 还是 \(X_2\) 在起作用——系数估计变得不稳定、不可信。
下讲元回归时,我们会详细处理这个问题(VIF 检验)。
\(t\) 检验、\(F\) 检验与置信区间
我们研究的是总体,但只能观测样本。
核心问题: 样本得到的回归系数 \(\hat{\beta}\),能代表真实的总体系数 \(\beta\) 吗?
回归中每个系数都要回答:"这个变量真的有用吗?"
\[H_0: \beta_j = 0 \quad \text{(变量 } X_j \text{ 对 } Y \text{ 没有影响)}\] \[H_1: \beta_j \neq 0\]
注记
标准误(Standard Error): SE 标准误是样本均值 \(\bar{x}\) 围绕总体均值 \(\mu\) 波动程度的标准差。
\(t\) 统计量:
\[t = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)}\]
直觉:系数有多大(信号)除以估计的不确定性(噪声)。信噪比越高,越显著。
警告
P 值 = "假设 \(H_0\) 为真,观测到当前或更极端结果的概率"——不是 \(H_0\) 为真的概率!
\(t\) 检验针对单个系数。\(F\) 检验则问:整个模型有没有解释力?
\[H_0: \beta_1 = \beta_2 = \cdots = \beta_k = 0 \quad \text{(所有自变量都没用)}\]
\(F\) 统计量 基于 Part 1 的方差分解:
\[F = \frac{\text{SS}_\text{Regression} / k}{\text{SS}_\text{Residual} / (n-k-1)} = \frac{\text{模型解释的平均方差}}{\text{残差平均方差}}\]
直觉: 模型解释的方差越多(相对于残差),\(F\) 值越大,模型越有整体价值。
注记
在 R 回归输出中:
F-statistic: 91.4 on 1 and 30 DF
p-value: 1.29e-10
\(F\) 检验通过 → 模型有意义,再去看各系数的 \(t\) 检验。
| \(t\) 检验 | \(F\) 检验 | |
|---|---|---|
| 检验对象 | 单个系数 \(\beta_j\) | 所有系数(模型整体) |
| 原假设 | \(\beta_j = 0\) | \(\beta_1 = \cdots = \beta_k = 0\) |
| 统计量分布 | \(t\) 分布(\(df = n-k-1\)) | \(F\) 分布(\(df_1=k,\; df_2=n-k-1\)) |
| 在 R 输出中 |
Pr(>|t|) 列 |
最后一行 F-statistic
|
| 关系 | 简单回归时 \(F = t^2\) | — |
提示
实战流程:先看 \(F\) 检验。 若整体不显著,单个系数的 \(t\) 检验意义不大。\(F\) 通过后,再逐一检查各系数的 \(t\) 值和 P 值。
回归的估计不是一个"点",而是一个"范围"。
95% 置信区间:
\[\hat{\beta}_j \pm t_{0.025,\, n-k-1} \times \text{SE}(\hat{\beta}_j)\]
正确解读: 如果用同样方法重复抽样 100 次,约 95 次构造的区间会包含真实参数 \(\beta_j\)。
在 R 回归输出中:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.885 1.878 20.18 <2e-16 ***
wt -5.344 0.559 -9.56 1.3e-10 ***
F-statistic: 91.4 on 1 and 30 DF
p-value: 1.29e-10
提示
三个问题,三个输出:
mtcars 综合演示
mtcars
Rows: 32
Columns: 11
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8,…
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8,…
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 16…
$ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180…
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92,…
$ wt <dbl> 2.62, 2.88, 2.32, 3.21, 3.44, 3.46, 3.57, 3.19, 3.15, 3.44, 3.44,…
$ qsec <dbl> 16.5, 17.0, 18.6, 19.4, 17.0, 20.2, 15.8, 20.0, 22.9, 18.3, 18.9,…
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,…
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,…
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3,…
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2,…
summary() 查看描述统计 mpg wt hp disp
Min. :10.4 Min. :1.51 Min. : 52.0 Min. : 71.1
1st Qu.:15.4 1st Qu.:2.58 1st Qu.: 96.5 1st Qu.:120.8
Median :19.2 Median :3.33 Median :123.0 Median :196.3
Mean :20.1 Mean :3.22 Mean :146.7 Mean :230.7
3rd Qu.:22.8 3rd Qu.:3.61 3rd Qu.:180.0 3rd Qu.:326.0
Max. :33.9 Max. :5.42 Max. :335.0 Max. :472.0
提示
mpg 均值(20.09)与中位数(19.20)接近 → 分布较对称。 hp 均值(146.7)> 中位数(123.0)→ 右偏,少数高性能车拉高了均值。
p_mpg <- ggplot(mtcars, aes(x = mpg)) +
geom_histogram(aes(y = after_stat(density)), bins = 12,
fill = "#4472C4", color = "white", alpha = 0.85) +
stat_function(fun = dnorm,
args = list(mean = mean(mtcars$mpg), sd = sd(mtcars$mpg)),
color = "#e05c2a", linewidth = 1.2) +
geom_vline(xintercept = mean(mtcars$mpg), color = "#1a3a5c", linewidth = 1) +
geom_vline(xintercept = median(mtcars$mpg), color = "#e8a838", linewidth = 1, linetype = "dashed") +
labs(title = "mpg 分布", subtitle = "红线=正态拟合曲线", x = "mpg", y = "密度")
p_hp <- ggplot(mtcars, aes(x = hp)) +
geom_histogram(aes(y = after_stat(density)), bins = 12,
fill = "#e05c2a", color = "white", alpha = 0.85) +
stat_function(fun = dnorm,
args = list(mean = mean(mtcars$hp), sd = sd(mtcars$hp)),
color = "#1a3a5c", linewidth = 1.2) +
geom_vline(xintercept = mean(mtcars$hp), color = "#1a3a5c", linewidth = 1) +
geom_vline(xintercept = median(mtcars$hp), color = "#e8a838", linewidth = 1, linetype = "dashed") +
labs(title = "hp 分布", subtitle = "蓝线=正态拟合曲线", x = "hp", y = "密度")
p_mpg + p_hp mpg wt hp disp cyl
mpg 1.00 -0.87 -0.78 -0.85 -0.85
wt -0.87 1.00 0.66 0.89 0.78
hp -0.78 0.66 1.00 0.79 0.83
disp -0.85 0.89 0.79 1.00 0.90
cyl -0.85 0.78 0.83 0.90 1.00
注记
mpg 与 wt 相关系数 −0.87——强负相关,这正是下讲线性回归的核心案例 mpg ~ wt。
注意 wt、disp、cyl 相互之间也高度相关(>0.85)——共线性预警!
r_val <- cor(mtcars$wt, mtcars$mpg) |> round(3)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(size = 3, color = "#1a3a5c", alpha = 0.8) +
geom_smooth(method = "lm", se = TRUE, color = "#e05c2a", linewidth = 1.2) +
annotate("text", x = 4.8, y = 30,
label = paste0("r = ", r_val),
size = 6, color = "#1a3a5c", fontface = "bold") +
labs(
title = "车重与油耗:强负线性相关",
subtitle = "红线为线性拟合趋势线,灰色区域为 95% 置信区间",
x = "车重(1000磅)", y = "油耗(英里/加仑)"
)cor.test() 假设检验
Pearson's product-moment correlation
data: mtcars$wt and mtcars$mpg
t = -10, df = 30, p-value = 1e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.934 -0.744
sample estimates:
cor
-0.868
注记
t = -9.56,p-value < 2.2e-16——极度显著,拒绝"车重与油耗无关"的原假设。
95% CI: [-0.934, -0.744]——置信区间不包含 0,相关性真实存在。
提示
p > 0.05 → 不拒绝正态假设,mpg 可视为近似正态。下讲拟合回归后,同样的检验将用于残差。
描述统计:均值易受极端值影响,中位数更稳健;标准差衡量离散程度;回归的本质是解释方差(\(\text{SS}_\text{Total} = \text{SS}_\text{Reg} + \text{SS}_\text{Res}\))
正态分布:由 \(\mu\) 和 \(\sigma\) 完全决定;68-95-99.7 法则;Z 分数标准化;残差正态假设是 OLS 最优性与后续检验的基础
相关性:散点图先行;Pearson 衡量线性,Spearman 衡量单调;相关性 ≠ 因果性;自变量高度相关 → 多重共线性
统计推断:CLT 保证抽样正态性;\(t\) 检验看单个系数;\(F\) 检验看模型整体;置信区间比点估计更诚实;先看 \(F\),再看 \(t\)
R实战:summary() → 直方图+正态曲线 → cor() → pairs() → cor.test() → shapiro.test() + Q-Q 图
使用 diamonds 数据集,对 price、carat、depth、table 运行 summary(),绘制 price 的直方图并叠加正态曲线,标出均值和中位数,判断分布形态
计算上述四个变量的相关矩阵,找出与 price 相关性最强的变量,绘制散点图加趋势线,并用 cor.test() 检验显著性,解读 \(t\) 值、P 值和置信区间
对 mtcars 中的 mpg 用 shapiro.test() 和 Q-Q 图进行正态性检验,再对 hp 做同样检验,比较两者结论有何不同
分别计算 mtcars 中 wt 与 mpg 的 Pearson 和 Spearman 相关系数(cor(..., method = "spearman")),比较差异,思考:什么情况下两者会相差很大?
用 lm(mpg ~ wt, data = mtcars) 拟合一个简单回归,用 summary() 查看输出,找出其中的 \(t\) 值、P 值、\(F\) 统计量,对照本讲内容逐一解读——这就是下讲的预习
第10讲:线性回归
shapiro.test 再登场)、同方差性、影响点检测lm()、summary(lm())、confint()、ggplot 可视化回归结果提示
今天的所有概念——方差分解(\(R^2\))、正态分布(残差假设)、\(t\) 检验、\(F\) 检验、置信区间——下讲都会在 summary(lm()) 的输出中逐一现身。
第9讲:统计基础
「所有的模型都是错的,但有些模型是有用的。」
—— George Box
数据挖掘与R语言 | 第9讲:统计基础