概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(22)

5.7 多元线性回归简介

模型

Yi=β0+β1Xi1+β2Xi2+⋯+βpXip+εiY_i = \beta_0 + \beta_1 X_{i1} + \beta_2 X_{i2} + \cdots + \beta_p X_{ip} + \varepsilon_iYi=β0+β1Xi1+β2Xi2+⋯+βpXip+εi

矩阵形式:Y=Xβ+ε\mathbf{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon}Y=Xβ+ε

最小二乘估计

β^=(XTX)−1XTY\hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}β^=(XTX)−1XTY

推导

Q=(Y−Xβ)T(Y−Xβ)Q = (\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})^T(\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})Q=(Y−Xβ)T(Y−Xβ)

∂Q∂β=−2XT(Y−Xβ)=0\frac{\partial Q}{\partial \boldsymbol{\beta}} = -2\mathbf{X}^T(\mathbf{Y} - \mathbf{X}\boldsymbol{\beta}) = 0∂β∂Q=−2XT(Y−Xβ)=0

XTXβ^=XTY\mathbf{X}^T\mathbf{X}\hat{\boldsymbol{\beta}} = \mathbf{X}^T\mathbf{Y}XTXβ^=XTY

β^=(XTX)−1XTY\hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}β^=(XTX)−1XTY


§6 Bootstrap方法

6.1 基本思想

Bootstrap(自助法)是一种基于重抽样的非参数统计方法,由Efron(1979)提出。其核心思想是:

样本本身作为"总体",通过有放回抽样产生大量Bootstrap样本,从而估计统计量的抽样分布。

适用场景

  • 总体分布未知或不满足传统方法的假设条件
  • 统计量的分布难以推导(如中位数的标准误、比率的置信区间等)
  • 样本量较小时的传统方法效果不佳

6.2 非参数Bootstrap的基本步骤

目标 :估计统计量 θ^=g(X1,X2,...,Xn)\hat{\theta} = g(X_1, X_2, \ldots, X_n)θ^=g(X1,X2,...,Xn) 的标准误或置信区间。

步骤

Step 1 :从原始样本 {X1,X2,...,Xn}\{X_1, X_2, \ldots, X_n\}{X1,X2,...,Xn} 中有放回地 抽取 nnn 个观测值,得到一个Bootstrap样本 X1∗b,X2∗b,...,Xn∗bX_1^{*b}, X_2^{*b}, \ldots, X_n^{*b}X1∗b,X2∗b,...,Xn∗b(b=1,2,...,Bb = 1, 2, \ldots, Bb=1,2,...,B)。

Step 2 :对每个Bootstrap样本计算统计量的值 θ^∗b\hat{\theta}^{*b}θ^∗b。

Step 3 :重复Step 1和Step 2共 BBB 次(通常 B=1000B = 1000B=1000 或 B=10000B = 10000B=10000)。

Step 4 :利用 {θ^∗1,θ^∗2,...,θ^∗B}\{\hat{\theta}^{*1}, \hat{\theta}^{*2}, \ldots, \hat{\theta}^{*B}\}{θ^∗1,θ^∗2,...,θ^∗B} 近似 θ^\hat{\theta}θ^ 的抽样分布。

6.3 Bootstrap标准误

SEboot(θ^)=1B−1∑b=1B(θ^∗b−θˉ∗)2\text{SE}{\text{boot}}(\hat{\theta}) = \sqrt{\frac{1}{B-1}\sum{b=1}^{B}\left(\hat{\theta}^{*b} - \bar{\theta}^{*}\right)^2}SEboot(θ^)=B−11b=1∑B(θ^∗b−θˉ∗)2

其中 θˉ∗=1B∑b=1Bθ^∗b\bar{\theta}^{*} = \frac{1}{B}\sum_{b=1}^{B}\hat{\theta}^{*b}θˉ∗=B1∑b=1Bθ^∗b。

6.4 Bootstrap置信区间

6.4.1 百分位数法(Percentile Method)

将 {θ^∗b}\{\hat{\theta}^{*b}\}{θ^∗b} 从小到大排序,取第 α/2\alpha/2α/2 和 1−α/21-\alpha/21−α/2 分位数:

θ\^(α/2)∗,  θ\^(1−α/2)∗\]\\left\[\\hat{\\theta}\^{\*}_{(\\alpha/2)},\\; \\hat{\\theta}\^{\*}_{(1-\\alpha/2)}\\right\]\[θ\^(α/2)∗,θ\^(1−α/2)∗

其中 θ^(k)∗\hat{\theta}^{*}_{(k)}θ^(k)∗ 表示排序后第 kkk 个值。

6.4.2 标准误差法(Normal Approximation)

基于正态近似:

θ\^−z1−α/2⋅SEboot,  θ\^+z1−α/2⋅SEboot\]\\left\[\\hat{\\theta} - z_{1-\\alpha/2} \\cdot \\text{SE}_{\\text{boot}},\\; \\hat{\\theta} + z_{1-\\alpha/2} \\cdot \\text{SE}_{\\text{boot}}\\right\]\[θ\^−z1−α/2⋅SEboot,θ\^+z1−α/2⋅SEboot

6.4.3 基本Bootstrap法(Basic/Pivotal Method)

2θ\^−θ\^(1−α/2)∗,  2θ\^−θ\^(α/2)∗\]\\left\[2\\hat{\\theta} - \\hat{\\theta}\^{\*}_{(1-\\alpha/2)},\\; 2\\hat{\\theta} - \\hat{\\theta}\^{\*}_{(\\alpha/2)}\\right\]\[2θ\^−θ\^(1−α/2)∗,2θ\^−θ\^(α/2)∗

推导 :若 θ^∗−θ^\hat{\theta}^* - \hat{\theta}θ^∗−θ^ 是 θ^−θ\hat{\theta} - \thetaθ^−θ 的一个好的近似,则 P(θ^(α/2)∗≤θ^−θ≤θ^(1−α/2)∗)≈1−αP(\hat{\theta}^*{(\alpha/2)} \leq \hat{\theta} - \theta \leq \hat{\theta}^*{(1-\alpha/2)}) \approx 1 - \alphaP(θ^(α/2)∗≤θ^−θ≤θ^(1−α/2)∗)≈1−α,解出 θ\thetaθ 的范围即得上述区间。

6.4.4 BCa法(Bias-Corrected and Accelerated)

这是偏差校正和加速的方法,能同时纠正偏差和偏度:

θ\^(α1)∗,  θ\^(α2)∗\]\\left\[\\hat{\\theta}\^{\*}_{(\\alpha_1)},\\; \\hat{\\theta}\^{\*}_{(\\alpha_2)}\\right\]\[θ\^(α1)∗,θ\^(α2)∗

其中:

α1=Φ(z^0+z^0+zα/21−a^(z^0+zα/2))\alpha_1 = \Phi\left(\hat{z}_0 + \frac{\hat{z}0 + z{\alpha/2}}{1 - \hat{a}(\hat{z}0 + z{\alpha/2})}\right)α1=Φ(z^0+1−a^(z^0+zα/2)z^0+zα/2)

α2=Φ(z^0+z^0+z1−α/21−a^(z^0+z1−α/2))\alpha_2 = \Phi\left(\hat{z}_0 + \frac{\hat{z}0 + z{1-\alpha/2}}{1 - \hat{a}(\hat{z}0 + z{1-\alpha/2})}\right)α2=Φ(z^0+1−a^(z^0+z1−α/2)z^0+z1−α/2)

偏差校正因子:

z^0=Φ−1(#{θ^∗b<θ^}B)\hat{z}_0 = \Phi^{-1}\left(\frac{\#\{\hat{\theta}^{*b} < \hat{\theta}\}}{B}\right)z^0=Φ−1(B#{θ^∗b<θ^})

加速因子:

a^=∑i=1n(θ^(⋅)−θ^(i))36∑i=1n(θ\^(⋅)−θ\^(i))23/2\hat{a} = \frac{\sum_{i=1}^{n}(\hat{\theta}{(\cdot)} - \hat{\theta}{(i)})^3}{6\left\\sum_{i=1}\^{n}(\\hat{\\theta}_{(\\cdot)} - \\hat{\\theta}_{(i)})\^2\\right^{3/2}}a^=6∑i=1n(θ\^(⋅)−θ\^(i))23/2∑i=1n(θ^(⋅)−θ^(i))3

其中 θ^(i)\hat{\theta}_{(i)}θ^(i) 为去掉第 iii 个观测后的统计量(刀切法估计)。

6.5 Bootstrap用于假设检验

Bootstrap检验的基本思路

Step 1 :在 H0H_0H0 下构造Bootstrap样本。对于检验 H0:μ=μ0H_0: \mu = \mu_0H0:μ=μ0:

Xi∗b=Xi−Xˉ+μ0X_i^{*b} = X_i - \bar{X} + \mu_0Xi∗b=Xi−Xˉ+μ0

Step 2 :计算每个Bootstrap样本的检验统计量 T∗bT^{*b}T∗b。

Step 3 :ppp 值估计:

p^=#{∣T∗b∣≥∣Tobs∣}B\hat{p} = \frac{\#\{|T^{*b}| \geq |T_{\text{obs}}|\}}{B}p^=B#{∣T∗b∣≥∣Tobs∣}

6.6 R实现

r 复制代码
library(boot)

# ========== 基本Bootstrap示例 ==========
# 数据:某工厂产品寿命(单位:小时)
data <- c(112, 120, 115, 108, 130, 125, 118, 122, 110, 115,
          128, 119, 121, 117, 124, 126, 113, 116, 120, 123)

# 目标:估计中位数的标准误和95%置信区间

# 方法一:手动实现
set.seed(42)
B <- 10000
n <- length(data)
boot_medians <- numeric(B)

for (b in 1:B) {
  boot_sample <- sample(data, size = n, replace = TRUE)
  boot_medians[b] <- median(boot_sample)
}

# Bootstrap标准误
se_boot <- sd(boot_medians)
cat("Bootstrap标准误:", se_boot, "\n")

# 百分位数置信区间
ci_percentile <- quantile(boot_medians, probs = c(0.025, 0.975))
cat("百分位数95%置信区间:", ci_percentile, "\n")

# 基本Bootstrap置信区间
theta_hat <- median(data)
ci_basic <- c(2*theta_hat - quantile(boot_medians, 0.975),
              2*theta_hat - quantile(boot_medians, 0.025))
cat("基本Bootstrap 95%置信区间:", ci_basic, "\n")

# 绘制Bootstrap分布
hist(boot_medians, breaks = 50, probability = TRUE,
     main = "中位数的Bootstrap分布",
     xlab = "Bootstrap中位数", col = "lightblue")
abline(v = theta_hat, col = "red", lwd = 2, lty = 2)
abline(v = ci_percentile, col = "blue", lwd = 2, lty = 3)

# ========== 使用boot包 ==========
# 定义统计量函数
median_func <- function(data, indices) {
  return(median(data[indices]))
}

# 执行Bootstrap
set.seed(42)
boot_result <- boot(data = data, statistic = median_func, R = 10000)
print(boot_result)

# 置信区间
boot.ci(boot_result, type = c("perc", "basic", "bca"))

# ========== Bootstrap用于回归系数的置信区间 ==========
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
y <- c(2.1, 3.9, 6.2, 7.8, 10.1, 12.0, 14.1, 15.9, 18.2, 19.8)
df <- data.frame(x = x, y = y)

# 定义统计量(提取斜率)
slope_func <- function(data, indices) {
  d <- data[indices, ]
  model <- lm(y ~ x, data = d)
  return(coef(model)[2])
}

set.seed(42)
boot_slope <- boot(data = df, statistic = slope_func, R = 10000)
print(boot_slope)
boot.ci(boot_slope, type = c("perc", "basic", "bca"))

# ========== Bootstrap假设检验 ==========
# 检验 H0: mu = 115 vs H1: mu != 115
mu0 <- 115
T_obs <- median(data)  # 使用中位数作为检验统计量

B <- 10000
boot_T <- numeric(B)
centered_data <- data - median(data) + mu0  # 在H0下中心化

set.seed(42)
for (b in 1:B) {
  boot_sample <- sample(centered_data, size = n, replace = TRUE)
  boot_T[b] <- median(boot_sample)
}

p_value <- mean(abs(boot_T - mu0) >= abs(T_obs - mu0))
cat("Bootstrap p值:", p_value, "\n")

6.7 Bootstrap的理论基础

Bootstrap原理的渐近理论

设 Tn=g(X1,...,Xn)T_n = g(X_1, \ldots, X_n)Tn=g(X1,...,Xn) 是参数 θ\thetaθ 的估计量,Tn∗=g(X1∗,...,Xn∗)T_n^* = g(X_1^*, \ldots, X_n^*)Tn∗=g(X1∗,...,Xn∗) 是Bootstrap估计量。若

sup⁡x∣P(Tn−θSE(Tn)≤x)−P(Tn∗−TnSE∗(Tn∗)≤x)∣→0a.s.\sup_x \left|P\left(\frac{T_n - \theta}{\text{SE}(T_n)} \leq x\right) - P\left(\frac{T_n^* - T_n}{\text{SE}^*(T_n^*)} \leq x\right)\right| \to 0 \quad \text{a.s.}xsup P(SE(Tn)Tn−θ≤x)−P(SE∗(Tn∗)Tn∗−Tn≤x) →0a.s.

则Bootstrap分布几乎必然 逼近 TnT_nTn 的真实抽样分布。

Bootstrap的一致性条件

Bootstrap估计是一致的,当且仅当经验分布函数 FnF_nFn 是 FFF 的一致估计,即:

sup⁡x∣Fn(x)−F(x)∣→P0\sup_x |F_n(x) - F(x)| \xrightarrow{P} 0xsup∣Fn(x)−F(x)∣P 0

这由Glivenko-Cantelli定理保证。


附录 R软件的一些介绍

A.1 R的基本数据类型

类型 说明 示例
numeric 数值型 3.14, 42
integer 整型(后缀L) 42L
character 字符型 "hello"
logical 逻辑型 TRUE, FALSE
factor 因子型 factor(c("A","B","A"))

A.2 数据结构

r 复制代码
# 向量
v <- c(1, 2, 3, 4, 5)

# 矩阵
m <- matrix(1:6, nrow = 2, ncol = 3)

# 数据框
df <- data.frame(
  name = c("Alice", "Bob", "Carol"),
  score = c(85, 92, 78),
  grade = c("B", "A", "C")
)

# 列表
lst <- list(name = "Alice", scores = c(85, 90, 78), passed = TRUE)

A.3 常用统计函数

r 复制代码
# 描述统计
x <- rnorm(100, mean = 50, sd = 10)
mean(x)          # 均值
median(x)        # 中位数
sd(x)            # 标准差
var(x)           # 方差
range(x)         # 范围
quantile(x)      # 四分位数
summary(x)       # 五数概括+均值

# 概率分布函数(以正态分布为例)
dnorm(0)         # 密度函数 f(0)
pnorm(1.96)      # 分布函数 Φ(1.96)
qnorm(0.975)     # 分位数函数 Φ⁻¹(0.975) = 1.96
rnorm(100)       # 生成100个标准正态随机数

# 其他常用分布:t, chisq, f, binom, pois, exp 等
# 例如:dt(), pt(), qt(), rt() 对应t分布

A.4 重要的统计分布函数对照

分布 密度/概率 分布函数 分位数 随机数
正态 N(μ,σ2)N(\mu,\sigma^2)N(μ,σ2) dnorm pnorm qnorm rnorm
t(n)t(n)t(n) dt pt qt rt
χ2(n)\chi^2(n)χ2(n) dchisq pchisq qchisq rchisq
F(m,n)F(m,n)F(m,n) df pf qf rf
B(n,p)B(n,p)B(n,p) dbinom pbinom qbinom rbinom
P(λ)P(\lambda)P(λ) dpois ppois qpois rpois

A.5 绘图系统

r 复制代码
# Base graphics
par(mfrow = c(2, 2))
hist(rnorm(1000), main = "直方图", col = "steelblue")
boxplot(rnorm(100), main = "箱线图")
plot(1:10, (1:10)^2, type = "b", main = "散点折线图")
curve(dnorm(x), -3, 3, main = "密度曲线")

# ggplot2(更强大)
library(ggplot2)
ggplot(data.frame(x = rnorm(1000)), aes(x = x)) +
  geom_histogram(bins = 30, fill = "steelblue", color = "white") +
  theme_minimal() +
  ggtitle("正态分布直方图")

习题十一

习题 1(箱线图)

某班级40名学生成绩如下:

复制代码
55, 58, 60, 62, 63, 65, 66, 67, 68, 69,
70, 70, 71, 72, 73, 73, 74, 75, 75, 76,
76, 77, 78, 78, 79, 80, 80, 81, 82, 83,
85, 86, 87, 88, 90, 92, 93, 95, 97, 100

(1)求五数概括;

(2)用R绘制箱线图,并判断是否存在异常值;

(3)根据箱线图判断分布的偏态性。

解答

(1)排序后,n=40n = 40n=40:

  • 最小值 =55= 55=55
  • Q1Q_1Q1:位置 L25=0.25×41=10.25L_{25} = 0.25 \times 41 = 10.25L25=0.25×41=10.25,Q1=69+0.25×(70−69)=69.25Q_1 = 69 + 0.25 \times (70 - 69) = 69.25Q1=69+0.25×(70−69)=69.25
  • Q2Q_2Q2(中位数):位置 L50=20.5L_{50} = 20.5L50=20.5,Q2=76+762=76Q_2 = \frac{76 + 76}{2} = 76Q2=276+76=76
  • Q3Q_3Q3:位置 L75=30.75L_{75} = 30.75L75=30.75,Q3=83+0.75×(85−83)=84.5Q_3 = 83 + 0.75 \times (85 - 83) = 84.5Q3=83+0.75×(85−83)=84.5
  • 最大值 =100= 100=100

(2)IQR=84.5−69.25=15.25\text{IQR} = 84.5 - 69.25 = 15.25IQR=84.5−69.25=15.25

下界 =69.25−1.5×15.25=46.375= 69.25 - 1.5 \times 15.25 = 46.375=69.25−1.5×15.25=46.375

上界 =84.5+1.5×15.25=107.375= 84.5 + 1.5 \times 15.25 = 107.375=84.5+1.5×15.25=107.375

所有数据均在 46.375,107.37546.375, 107.37546.375,107.375 内,无异常值

(3)Q2−Q1=76−69.25=6.75Q_2 - Q_1 = 76 - 69.25 = 6.75Q2−Q1=76−69.25=6.75,Q3−Q2=84.5−76=8.5Q_3 - Q_2 = 84.5 - 76 = 8.5Q3−Q2=84.5−76=8.5。由于 Q3−Q2>Q2−Q1Q_3 - Q_2 > Q_2 - Q_1Q3−Q2>Q2−Q1,中位数偏向 Q1Q_1Q1 侧,数据呈轻微右偏分布。

r 复制代码
scores <- c(55,58,60,62,63,65,66,67,68,69,
            70,70,71,72,73,73,74,75,75,76,
            76,77,78,78,79,80,80,81,82,83,
            85,86,87,88,90,92,93,95,97,100)
boxplot(scores, main="学生成绩箱线图", col="lightblue", horizontal=TRUE)
summary(scores)

习题 2(单样本假设检验)

某饮料厂生产瓶装饮料,标称净含量为 250 ml。现随机抽取 16 瓶,测得净含量为:

复制代码
249.2, 250.5, 248.8, 251.0, 249.5, 250.1, 249.8, 250.3,
250.7, 249.0, 251.2, 248.5, 250.0, 249.6, 250.8, 249.3

已知 σ=1.0\sigma = 1.0σ=1.0 ml,取 α=0.05\alpha = 0.05α=0.05,检验该厂生产的饮料净含量是否达到标称值。

(1)提出假设并选择检验统计量;

(2)计算检验统计量的值和P值;

(3)做出结论。

解答

(1)H0:μ=250H_0: \mu = 250H0:μ=250,H1:μ≠250H_1: \mu \neq 250H1:μ=250(双侧检验)

由于 σ=1.0\sigma = 1.0σ=1.0 已知,使用 UUU 检验:

U=Xˉ−250σ/n=Xˉ−2501/16=4(Xˉ−250)U = \frac{\bar{X} - 250}{\sigma / \sqrt{n}} = \frac{\bar{X} - 250}{1/\sqrt{16}} = 4(\bar{X} - 250)U=σ/n Xˉ−250=1/16 Xˉ−250=4(Xˉ−250)

拒绝域:∣U∣>u0.975=1.96|U| > u_{0.975} = 1.96∣U∣>u0.975=1.96

(2)计算 Xˉ\bar{X}Xˉ:

Xˉ=116∑Xi=116×3998.3=249.894\bar{X} = \frac{1}{16}\sum X_i = \frac{1}{16} \times 3998.3 = 249.894Xˉ=161∑Xi=161×3998.3=249.894

U=4×(249.894−250)=4×(−0.106)=−0.425U = 4 \times (249.894 - 250) = 4 \times (-0.106) = -0.425U=4×(249.894−250)=4×(−0.106)=−0.425

P值 =2P(Z>0.425)=2×(1−Φ(0.425))=2×(1−0.6646)=0.6708= 2P(Z > 0.425) = 2 \times (1 - \Phi(0.425)) = 2 \times (1 - 0.6646) = 0.6708=2P(Z>0.425)=2×(1−Φ(0.425))=2×(1−0.6646)=0.6708

(3)由于 ∣U∣=0.425<1.96|U| = 0.425 < 1.96∣U∣=0.425<1.96(或P值 =0.6708>0.05= 0.6708 > 0.05=0.6708>0.05),不拒绝 H0H_0H0 ,即在 α=0.05\alpha = 0.05α=0.05 水平下,没有足够证据认为饮料净含量不达标。

r 复制代码
data <- c(249.2, 250.5, 248.8, 251.0, 249.5, 250.1, 249.8, 250.3,
          250.7, 249.0, 251.2, 248.5, 250.0, 249.6, 250.8, 249.3)
# sigma已知的U检验
n <- length(data)
xbar <- mean(data)
sigma <- 1.0
U <- (xbar - 250) / (sigma / sqrt(n))
p_val <- 2 * (1 - pnorm(abs(U)))
cat(sprintf("U = %.4f, P值 = %.4f\n", U, p_val))

习题 3(两样本假设检验)

为比较两种教学方法的效果,随机将20名学生分为两组,每组10人。成绩如下:

  • 方法A:78, 82, 85, 79, 90, 88, 76, 84, 87, 81
  • 方法B:72, 75, 80, 74, 78, 71, 76, 73, 77, 79

(1)先检验两组方差是否相等(α=0.05\alpha = 0.05α=0.05);

(2)根据(1)的结论选择适当的检验方法,检验两种教学方法的均值是否有显著差异。

解答

(1)H0:σ12=σ22H_0: \sigma_1^2 = \sigma_2^2H0:σ12=σ22 vs H1:σ12≠σ22H_1: \sigma_1^2 \neq \sigma_2^2H1:σ12=σ22

计算样本方差:S12=19.60S_1^2 = 19.60S12=19.60,S22=9.34S_2^2 = 9.34S22=9.34(自由度均为 9)

F=S12S22=19.609.34=2.098F = \frac{S_1^2}{S_2^2} = \frac{19.60}{9.34} = 2.098F=S22S12=9.3419.60=2.098

拒绝域:F>F0.975(9,9)=4.026F > F_{0.975}(9,9) = 4.026F>F0.975(9,9)=4.026 或 F<F0.025(9,9)=1/4.026=0.248F < F_{0.025}(9,9) = 1/4.026 = 0.248F<F0.025(9,9)=1/4.026=0.248

由于 0.248<2.098<4.0260.248 < 2.098 < 4.0260.248<2.098<4.026,不拒绝 H0H_0H0,可认为两组方差相等。

(2)H0:μ1=μ2H_0: \mu_1 = \mu_2H0:μ1=μ2 vs H1:μ1≠μ2H_1: \mu_1 \neq \mu_2H1:μ1=μ2

等方差 ttt 检验,Xˉ1=83.0\bar{X}_1 = 83.0Xˉ1=83.0,Xˉ2=75.5\bar{X}_2 = 75.5Xˉ2=75.5

Sw=9×19.60+9×9.3418=176.4+84.0618=260.4618=14.47=3.804S_w = \sqrt{\frac{9 \times 19.60 + 9 \times 9.34}{18}} = \sqrt{\frac{176.4 + 84.06}{18}} = \sqrt{\frac{260.46}{18}} = \sqrt{14.47} = 3.804Sw=189×19.60+9×9.34 =18176.4+84.06 =18260.46 =14.47 =3.804

T=83.0−75.53.804×1/10+1/10=7.53.804×0.4472=7.51.701=4.409T = \frac{83.0 - 75.5}{3.804 \times \sqrt{1/10 + 1/10}} = \frac{7.5}{3.804 \times 0.4472} = \frac{7.5}{1.701} = 4.409T=3.804×1/10+1/10 83.0−75.5=3.804×0.44727.5=1.7017.5=4.409

临界值 t0.975(18)=2.101t_{0.975}(18) = 2.101t0.975(18)=2.101。

由于 ∣T∣=4.409>2.101|T| = 4.409 > 2.101∣T∣=4.409>2.101,拒绝 H0H_0H0。两种教学方法的效果有显著差异,方法A明显优于方法B。

r 复制代码
A <- c(78, 82, 85, 79, 90, 88, 76, 84, 87, 81)
B <- c(72, 75, 80, 74, 78, 71, 76, 73, 77, 79)

# F检验
var.test(A, B)

# t检验
t.test(A, B, var.equal = TRUE)

习题 4(方差分析)

用三种不同的灯丝材料制作灯泡,各随机抽取5只,测试其使用寿命(小时):

材料1 材料2 材料3
1600 1580 1540
1610 1640 1550
1650 1600 1570
1680 1620 1600
1700 1660 1620

(1)进行方差分析(α=0.05\alpha = 0.05α=0.05),检验三种灯丝材料对灯泡寿命是否有显著影响;

(2)若影响显著,进行多重比较。

解答

(1)

H0:μ1=μ2=μ3,H1:至少有两个均值不等H_0: \mu_1 = \mu_2 = \mu_3, \quad H_1: \text{至少有两个均值不等}H0:μ1=μ2=μ3,H1:至少有两个均值不等

各组均值:Xˉ1=1648\bar{X}_1 = 1648Xˉ1=1648,Xˉ2=1620\bar{X}_2 = 1620Xˉ2=1620,Xˉ3=1576\bar{X}_3 = 1576Xˉ3=1576

总均值:Xˉ=5×1648+5×1620+5×157615=1614.67\bar{X} = \frac{5 \times 1648 + 5 \times 1620 + 5 \times 1576}{15} = 1614.67Xˉ=155×1648+5×1620+5×1576=1614.67

SA=5(1648−1614.67)2+(1620−1614.67)2+(1576−1614.67)2S_A = 5(1648-1614.67)\^2 + (1620-1614.67)\^2 + (1576-1614.67)\^2SA=5(1648−1614.67)2+(1620−1614.67)2+(1576−1614.67)2

=51111.89+28.41+1495.56=5×2635.86=13179.3= 51111.89 + 28.41 + 1495.56 = 5 \times 2635.86 = 13179.3=51111.89+28.41+1495.56=5×2635.86=13179.3

SE=∑(X1j−1648)2+∑(X2j−1620)2+∑(X3j−1576)2S_E = \sum(X_{1j}-1648)^2 + \sum(X_{2j}-1620)^2 + \sum(X_{3j}-1576)^2SE=∑(X1j−1648)2+∑(X2j−1620)2+∑(X3j−1576)2

=7200+3200+3720=14120= 7200 + 3200 + 3720 = 14120=7200+3200+3720=14120

来源 平方和 自由度 均方 F值
组间 13179.3 2 6589.7 5.60
组内 14120 12 1176.7
总计 27299.3 14

F0.95(2,12)=3.89F_{0.95}(2,12) = 3.89F0.95(2,12)=3.89

由于 F=5.60>3.89F = 5.60 > 3.89F=5.60>3.89,拒绝 H0H_0H0,三种灯丝材料对灯泡寿命有显著影响。

r 复制代码
g1 <- c(1600, 1610, 1650, 1680, 1700)
g2 <- c(1580, 1640, 1600, 1620, 1660)
g3 <- c(1540, 1550, 1570, 1600, 1620)

values <- c(g1, g2, g3)
groups <- factor(rep(c("材料1","材料2","材料3"), each = 5))

model <- aov(values ~ groups)
summary(model)

# 多重比较
TukeyHSD(model)

习题 5(线性回归)

为研究广告投入 XXX(万元)与销售额 YYY(万元)之间的关系,收集了8组数据:

XXX 1 2 3 4 5 6 7 8
YYY 3.1 5.0 6.8 9.0 10.9 13.1 15.0 16.8

(1)建立一元线性回归方程 Y^=β^0+β^1X\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 XY^=β^0+β^1X;

(2)检验回归方程的显著性(α=0.05\alpha = 0.05α=0.05);

(3)求 X0=4.5X_0 = 4.5X0=4.5 时 YYY 的预测值和95%预测区间。

解答

(1)计算各统计量(n=8n = 8n=8):

Xˉ=4.5,Yˉ=9.9625\bar{X} = 4.5, \quad \bar{Y} = 9.9625Xˉ=4.5,Yˉ=9.9625

Lxx=∑Xi2−nXˉ2=204−8×20.25=42L_{xx} = \sum X_i^2 - n\bar{X}^2 = 204 - 8 \times 20.25 = 42Lxx=∑Xi2−nXˉ2=204−8×20.25=42

Lxy=∑XiYi−nXˉYˉ=398.7−8×4.5×9.9625=398.7−358.65=40.05L_{xy} = \sum X_iY_i - n\bar{X}\bar{Y} = 398.7 - 8 \times 4.5 \times 9.9625 = 398.7 - 358.65 = 40.05Lxy=∑XiYi−nXˉYˉ=398.7−8×4.5×9.9625=398.7−358.65=40.05

β^1=LxyLxx=40.0542=0.9536\hat{\beta}1 = \frac{L{xy}}{L_{xx}} = \frac{40.05}{42} = 0.9536β^1=LxxLxy=4240.05=0.9536

β^0=Yˉ−β^1Xˉ=9.9625−0.9536×4.5=9.9625−4.2912=5.6713\hat{\beta}_0 = \bar{Y} - \hat{\beta}_1\bar{X} = 9.9625 - 0.9536 \times 4.5 = 9.9625 - 4.2912 = 5.6713β^0=Yˉ−β^1Xˉ=9.9625−0.9536×4.5=9.9625−4.2912=5.6713

回归方程

Y^=5.6713+0.9536X\hat{Y} = 5.6713 + 0.9536XY^=5.6713+0.9536X

(2)显著性检验 H0:β1=0H_0: \beta_1 = 0H0:β1=0

Lyy=∑Yi2−nYˉ2=1000.1−8×99.25=206.1L_{yy} = \sum Y_i^2 - n\bar{Y}^2 = 1000.1 - 8 \times 99.25 = 206.1Lyy=∑Yi2−nYˉ2=1000.1−8×99.25=206.1

SR=β^1Lxy=0.9536×40.05=38.19S_R = \hat{\beta}1 L{xy} = 0.9536 \times 40.05 = 38.19SR=β^1Lxy=0.9536×40.05=38.19

SE=Lyy−SR=206.1−38.19=167.91S_E = L_{yy} - S_R = 206.1 - 38.19 = 167.91SE=Lyy−SR=206.1−38.19=167.91

等等,让我重新核实数据。

∑Yi2=3.12+5.02+6.82+9.02+10.92+13.12+15.02+16.82\sum Y_i^2 = 3.1^2 + 5.0^2 + 6.8^2 + 9.0^2 + 10.9^2 + 13.1^2 + 15.0^2 + 16.8^2∑Yi2=3.12+5.02+6.82+9.02+10.92+13.12+15.02+16.82

=9.61+25+46.24+81+118.81+171.61+225+282.24=959.51= 9.61 + 25 + 46.24 + 81 + 118.81 + 171.61 + 225 + 282.24 = 959.51=9.61+25+46.24+81+118.81+171.61+225+282.24=959.51

Lyy=959.51−8×(9.9625)2=959.51−8×99.25=959.51−794.0=165.51L_{yy} = 959.51 - 8 \times (9.9625)^2 = 959.51 - 8 \times 99.25 = 959.51 - 794.0 = 165.51Lyy=959.51−8×(9.9625)2=959.51−8×99.25=959.51−794.0=165.51

∑XiYi=1×3.1+2×5.0+3×6.8+4×9.0+5×10.9+6×13.1+7×15.0+8×16.8\sum X_iY_i = 1\times3.1 + 2\times5.0 + 3\times6.8 + 4\times9.0 + 5\times10.9 + 6\times13.1 + 7\times15.0 + 8\times16.8∑XiYi=1×3.1+2×5.0+3×6.8+4×9.0+5×10.9+6×13.1+7×15.0+8×16.8

=3.1+10+20.4+36+54.5+78.6+105+134.4=442= 3.1 + 10 + 20.4 + 36 + 54.5 + 78.6 + 105 + 134.4 = 442=3.1+10+20.4+36+54.5+78.6+105+134.4=442

Lxy=442−8×4.5×9.9625=442−358.65=83.35L_{xy} = 442 - 8 \times 4.5 \times 9.9625 = 442 - 358.65 = 83.35Lxy=442−8×4.5×9.9625=442−358.65=83.35

重新计算:

β^1=83.3542=1.9845\hat{\beta}_1 = \frac{83.35}{42} = 1.9845β^1=4283.35=1.9845

β^0=9.9625−1.9845×4.5=9.9625−8.9303=1.0322\hat{\beta}_0 = 9.9625 - 1.9845 \times 4.5 = 9.9625 - 8.9303 = 1.0322β^0=9.9625−1.9845×4.5=9.9625−8.9303=1.0322

让我再验证一下 LxyL_{xy}Lxy。

∑XiYi\sum X_i Y_i∑XiYi:

  • 1×3.1=3.11 \times 3.1 = 3.11×3.1=3.1
  • 2×5.0=10.02 \times 5.0 = 10.02×5.0=10.0
  • 3×6.8=20.43 \times 6.8 = 20.43×6.8=20.4
  • 4×9.0=36.04 \times 9.0 = 36.04×9.0=36.0
  • 5×10.9=54.55 \times 10.9 = 54.55×10.9=54.5
  • 6×13.1=78.66 \times 13.1 = 78.66×13.1=78.6
  • 7×15.0=105.07 \times 15.0 = 105.07×15.0=105.0
  • 8×16.8=134.48 \times 16.8 = 134.48×16.8=134.4

总和 =442.0= 442.0=442.0

nXˉYˉ=8×4.5×9.9625=358.65n\bar{X}\bar{Y} = 8 \times 4.5 \times 9.9625 = 358.65nXˉYˉ=8×4.5×9.9625=358.65

Lxy=442.0−358.65=83.35L_{xy} = 442.0 - 358.65 = 83.35Lxy=442.0−358.65=83.35

好的,重新整理:

β^1=83.3542≈1.9845\hat{\beta}_1 = \frac{83.35}{42} \approx 1.9845β^1=4283.35≈1.9845

β^0=9.9625−1.9845×4.5=9.9625−8.9303≈1.0322\hat{\beta}_0 = 9.9625 - 1.9845 \times 4.5 = 9.9625 - 8.9303 \approx 1.0322β^0=9.9625−1.9845×4.5=9.9625−8.9303≈1.0322

回归方程 :Y^=1.03+1.98X\hat{Y} = 1.03 + 1.98XY^=1.03+1.98X

(2)

SR=β^1×Lxy=1.9845×83.35=165.41S_R = \hat{\beta}1 \times L{xy} = 1.9845 \times 83.35 = 165.41SR=β^1×Lxy=1.9845×83.35=165.41

SE=Lyy−SR=165.51−165.41=0.10S_E = L_{yy} - S_R = 165.51 - 165.41 = 0.10SE=Lyy−SR=165.51−165.41=0.10

σ^2=SEn−2=0.106=0.0167\hat{\sigma}^2 = \frac{S_E}{n-2} = \frac{0.10}{6} = 0.0167σ^2=n−2SE=60.10=0.0167

T=β^1σ^/Lxx=1.98450.0167/42=1.98450.1293/6.4807=1.98450.01995=99.47T = \frac{\hat{\beta}1}{\hat{\sigma}/\sqrt{L{xx}}} = \frac{1.9845}{\sqrt{0.0167}/\sqrt{42}} = \frac{1.9845}{0.1293/6.4807} = \frac{1.9845}{0.01995} = 99.47T=σ^/Lxx β^1=0.0167 /42 1.9845=0.1293/6.48071.9845=0.019951.9845=99.47

t0.975(6)=2.447t_{0.975}(6) = 2.447t0.975(6)=2.447,∣T∣=99.47≫2.447|T| = 99.47 \gg 2.447∣T∣=99.47≫2.447,回归方程高度显著

R2=SR/Lyy=165.41/165.51=0.9994R^2 = S_R / L_{yy} = 165.41 / 165.51 = 0.9994R2=SR/Lyy=165.41/165.51=0.9994,拟合优度极高。

(3)当 X0=4.5X_0 = 4.5X0=4.5 时:

Y^0=1.0322+1.9845×4.5=1.0322+8.9303=9.96\hat{Y}_0 = 1.0322 + 1.9845 \times 4.5 = 1.0322 + 8.9303 = 9.96Y^0=1.0322+1.9845×4.5=1.0322+8.9303=9.96

95%预测区间:

Y^0±t0.975(6)⋅σ^1+1n+(X0−Xˉ)2Lxx\hat{Y}0 \pm t{0.975}(6) \cdot \hat{\sigma}\sqrt{1 + \frac{1}{n} + \frac{(X_0 - \bar{X})^2}{L_{xx}}}Y^0±t0.975(6)⋅σ^1+n1+Lxx(X0−Xˉ)2

由于 X0=Xˉ=4.5X_0 = \bar{X} = 4.5X0=Xˉ=4.5:

=9.96±2.447×0.0167×1+18+0= 9.96 \pm 2.447 \times \sqrt{0.0167} \times \sqrt{1 + \frac{1}{8} + 0}=9.96±2.447×0.0167 ×1+81+0

=9.96±2.447×0.1293×1.125= 9.96 \pm 2.447 \times 0.1293 \times \sqrt{1.125}=9.96±2.447×0.1293×1.125

=9.96±2.447×0.1293×1.0607= 9.96 \pm 2.447 \times 0.1293 \times 1.0607=9.96±2.447×0.1293×1.0607

=9.96±0.336= 9.96 \pm 0.336=9.96±0.336

即 Y0Y_0Y0 的95%预测区间为 (9.62,10.30)(9.62, 10.30)(9.62,10.30)。

r 复制代码
X <- c(1, 2, 3, 4, 5, 6, 7, 8)
Y <- c(3.1, 5.0, 6.8, 9.0, 10.9, 13.1, 15.0, 16.8)

model <- lm(Y ~ X)
summary(model)

# 预测
new <- data.frame(X = 4.5)
predict(model, newdata = new, interval = "prediction", level = 0.95)
predict(model, newdata = new, interval = "confidence", level = 0.95)

# 绘图
plot(X, Y, pch = 19, col = "steelblue", main = "广告投入与销售额回归分析",
     xlab = "广告投入(万元)", ylab = "销售额(万元)")
abline(model, col = "red", lwd = 2)

# 残差诊断
par(mfrow = c(2, 2))
plot(model)

习题 6(Bootstrap方法)

设某地区20户家庭的年收入(万元)数据为:

复制代码
5.2, 6.8, 4.5, 8.3, 7.1, 9.5, 3.8, 6.2, 7.8, 10.5,
5.5, 6.9, 7.3, 8.0, 4.2, 9.1, 6.5, 7.6, 5.8, 12.0

(1)用Bootstrap方法估计中位数的标准误(B=5000B = 5000B=5000);

(2)求中位数的95%百分位数Bootstrap置信区间和基本Bootstrap置信区间;

(3)检验 H0:中位数=7H_0: \text{中位数} = 7H0:中位数=7(α=0.05\alpha = 0.05α=0.05),用Bootstrap方法。

解答

(1)和(2)通过R模拟(结果为模拟值,以下为示例输出):

r 复制代码
set.seed(123)
income <- c(5.2, 6.8, 4.5, 8.3, 7.1, 9.5, 3.8, 6.2, 7.8, 10.5,
            5.5, 6.9, 7.3, 8.0, 4.2, 9.1, 6.5, 7.6, 5.8, 12.0)

B <- 5000
n <- length(income)
boot_med <- numeric(B)

for (b in 1:B) {
  boot_med[b] <- median(sample(income, n, replace = TRUE))
}

# (1) Bootstrap标准误
se_boot <- sd(boot_med)
cat("Bootstrap标准误:", round(se_boot, 4), "\n")

# (2) 百分位数置信区间
ci_perc <- quantile(boot_med, c(0.025, 0.975))
cat("百分位数95%CI:", round(ci_perc, 4), "\n")

# 基本Bootstrap置信区间
theta_hat <- median(income)
ci_basic <- c(2*theta_hat - quantile(boot_med, 0.975),
              2*theta_hat - quantile(boot_med, 0.025))
cat("基本Bootstrap 95%CI:", round(ci_basic, 4), "\n")

# (3) Bootstrap检验
mu0 <- 7
boot_T <- numeric(B)
centered <- income - median(income) + mu0
set.seed(456)
for (b in 1:B) {
  boot_T[b] <- median(sample(centered, n, replace = TRUE))
}
p_val <- mean(abs(boot_T - mu0) >= abs(median(income) - mu0))
cat("Bootstrap p值:", round(p_val, 4), "\n")

参考结果(因随机性可能略有差异):

  • Bootstrap标准误 ≈0.55\approx 0.55≈0.55
  • 百分位数95%CI ≈(5.85,8.15)\approx (5.85, 8.15)≈(5.85,8.15)
  • 基本Bootstrap 95%CI ≈(5.85,8.15)\approx (5.85, 8.15)≈(5.85,8.15)
  • 原始中位数 =6.95= 6.95=6.95
  • Bootstrap p值 ≈0.85\approx 0.85≈0.85

(3)由于Bootstrap p值远大于0.05,不拒绝 H0H_0H0,即没有足够证据认为该地区家庭年收入的中位数不等于7万元。


习题 7(综合应用题)

某研究者收集了30名学生的数学成绩(YYY)、每周学习时间(X1X_1X1,小时)和参加辅导班次数(X2X_2X2,次/月),数据如下:

r 复制代码
set.seed(2024)
n <- 30
X1 <- round(runif(n, 5, 25), 1)       # 每周学习时间
X2 <- sample(0:8, n, replace = TRUE)   # 辅导班次数
Y <- round(40 + 1.5*X1 + 3*X2 + rnorm(n, 0, 5), 1)

(1)建立多元线性回归方程;

(2)对回归方程进行 FFF 检验;

(3)对各回归系数分别进行 ttt 检验;

(4)计算决定系数 R2R^2R2 并解释其含义。

R解答代码

r 复制代码
set.seed(2024)
n <- 30
X1 <- round(runif(n, 5, 25), 1)
X2 <- sample(0:8, n, replace = TRUE)
Y <- round(40 + 1.5*X1 + 3*X2 + rnorm(n, 0, 5), 1)

# (1) 多元线性回归
model <- lm(Y ~ X1 + X2)
summary(model)

# (2) F检验 --- 方差分析表
anova(model)

# (3) 回归系数的t检验 --- 在summary中已给出
# 关注 Coefficients 表中的 t value 和 Pr(>|t|)

# (4) R²
cat("R² =", summary(model)$r.squared, "\n")
cat("调整R² =", summary(model)$adj.r.squared, "\n")

# 预测
new_data <- data.frame(X1 = 15, X2 = 4)
predict(model, newdata = new_data, interval = "prediction")

理论说明

多元线性回归的 FFF 检验统计量:

F=SR/pSE/(n−p−1)∼F(p,n−p−1)F = \frac{S_R / p}{S_E / (n - p - 1)} \sim F(p, n-p-1)F=SE/(n−p−1)SR/p∼F(p,n−p−1)

其中 ppp 为自变量个数(本题 p=2p = 2p=2)。

R2R^2R2 的含义:R2=SR/STR^2 = S_R / S_TR2=SR/ST 表示响应变量的变异中能被回归方程解释的比例,R2R^2R2 越接近1,拟合越好。

调整 R2R^2R2:

Rˉ2=1−SE/(n−p−1)ST/(n−1)=1−(1−R2)n−1n−p−1\bar{R}^2 = 1 - \frac{S_E/(n-p-1)}{S_T/(n-1)} = 1 - (1-R^2)\frac{n-1}{n-p-1}Rˉ2=1−ST/(n−1)SE/(n−p−1)=1−(1−R2)n−p−1n−1

调整 R2R^2R2 对变量个数施加了惩罚,避免过度拟合。


全章总结

方法 核心统计量 分布 R函数
单样本 UUU 检验 U=Xˉ−μ0σ/nU = \frac{\bar{X}-\mu_0}{\sigma/\sqrt{n}}U=σ/n Xˉ−μ0 N(0,1)N(0,1)N(0,1) ---
单样本 ttt 检验 T=Xˉ−μ0S/nT = \frac{\bar{X}-\mu_0}{S/\sqrt{n}}T=S/n Xˉ−μ0 t(n−1)t(n-1)t(n−1) t.test()
两样本 ttt 检验 T=Xˉ−YˉSw1/m+1/nT = \frac{\bar{X}-\bar{Y}}{S_w\sqrt{1/m+1/n}}T=Sw1/m+1/n Xˉ−Yˉ t(m+n−2)t(m+n-2)t(m+n−2) t.test()
FFF 检验(方差比) F=S12/S22F = S_1^2/S_2^2F=S12/S22 F(m−1,n−1)F(m-1,n-1)F(m−1,n−1) var.test()
单因素ANOVA F=MSA/MSEF = MS_A/MS_EF=MSA/MSE F(r−1,n−r)F(r-1,n-r)F(r−1,n−r) aov()
一元回归 T=β^1/(σ^/Lxx)T = \hat{\beta}1/(\hat{\sigma}/\sqrt{L{xx}})T=β^1/(σ^/Lxx ) t(n−2)t(n-2)t(n−2) lm()
Bootstrap 重抽样分布 非参数近似 boot()
相关推荐
乐观勇敢坚强的老彭1 小时前
C++信奥GESP四级的常见题型和解题模板速查表
开发语言·c++
denggun123451 小时前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
lisw051 小时前
计算与科学哲学(Philosophy of Computing and Science)
java·开发语言·人工智能
陈年老古董2 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
深念Y2 小时前
为什么选 Go:直观、可维护、AI 友好
linux·开发语言·人工智能·golang·agent·harness
戈文波Geir-Wenbo Ge2 小时前
深度七步:从学习到主宰
学习
Billy121382 小时前
Day25-编译期计算与 constexpr if:跨越编译与运行的边界
开发语言·c++进阶学习
clorinda2 小时前
OpenCV实战学习记录:图像拼接与答题卡识别
人工智能·opencv·学习
red_redemption2 小时前
自由学习记录(221)
学习·renderdoc