假设检验

R语言
数据分析
各类假设检验相关方法的汇总
发布于

2024年8月10日

1 概念

假设检验是统计学中的一种方法,用于判断样本数据是否支持某个关于总体参数的假设。它的基本过程可以概括为以下几个步骤:

  • 提出假设

    • 原假设(H0):通常表示没有效应或没有差异的假设,是我们希望检验的初始假设。

    • 备择假设(H1):表示存在效应或差异的假设。

  • 选择显著性水平(α)

    • 这是一个预先设定的阈值,通常为0.05或0.01,用于决定何时拒绝原假设。
  • 选择检验统计量

    • 根据数据的分布和样本大小,选择合适的检验统计量(如t检验、z检验、卡方检验等)。
  • 计算检验统计量

    • 使用样本数据计算出检验统计量的值。
  • 确定拒绝域或p值

    • 基于显著性水平和所选择的检验统计量,确定拒绝原假设的区域或计算p值(在原假设成立的情况下,观察到样本数据或更极端数据的概率)。
  • 作出决策

    • 如果检验统计量落入拒绝域,或者p值小于显著性水平,就拒绝原假设;否则,未能拒绝原假设。
  • 结论

    • 根据检验结果,给出对研究问题的结论,并进行相应的解释。

假设检验广泛应用于医学、社会科学、市场研究等领域,以帮助研究人员根据样本数据做出推断和决策。注意,假设检验的结果并不能证明原假设为真的,而只能提供足够的证据支持或反驳它。

本文汇总了各个情况下应当采取的假设检验 图 1

flowchart LR
  L0(假设检验) --> A1(单样本检验)
  A1 --> B11(正态总体)
  A1  --> B12(总体未知)
  B11 --> C11(均值检验)
  C11 --> D11(方差已知) --> E11(Z 检验)
  C11 --> D12(方差未知) --> E12(t 检验)
  B11 --> C12(方差检验) --> E13(卡方检验)
  B12 --> C13(均值检验) --> E14(Wilcoxon 秩和检验)
  B12 --> C14(方差检验) --> E15[无检验方法]
  L0(假设检验) --> A2(两样本检验)
  A2 --> B21(正态总体)
  A2  --> B22(总体未知)
  B21 --> C21(均值检验)
  C21 --> D21(方差已知) --> E21(Z 检验)
  C21 --> D22(方差未知但相等) --> E22(t 检验)
  C21 --> D23(方差未知且不等) --> E23(Welch t 检验)
  B21 --> C22(方差检验) --> E24(F 检验)
  C22 --> E27(Bartlett 检验)
  B22 --> C23(均值检验) --> E25(Wilcoxon 符号秩检验\nKruskal-Wallis 秩和检验)
  B22 --> C24(方差检验) --> E28(Ansari-Bradley 检验\nMood 检验\nFligner-Killeen 检验)
  L0(假设检验) --> A3(多样本检验)
  L0(假设检验) --> A4(配对样本检验)
图 1: 假设检验汇总

2 单样本检验

2.1 正态总体

随机变量 \(X\) 服从标准正态分布,它的概率分布函数如下:

\[ P(X \leq u)= \phi(u) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{u}\mathrm{e}^{-t^2/2}\mathrm{dt} \]

2.1.1 均值检验

2.1.1.1 方差已知

\[ \begin{aligned} \mathrm{I} \quad H_0: \mu - \mu_0 \leq 0 \quad vs. \quad H_1: \mu - \mu_0 > 0 \\ \mathrm{II} \quad H_0: \mu - \mu_0 \geq 0 \quad vs. \quad H_1: \mu - \mu_0 < 0 \\ \mathrm{III} \quad H_0: \mu - \mu_0 = 0 \quad vs. \quad H_1: \mu - \mu_0 \neq 0 \end{aligned} \]

\(x_1,\cdots,x_n\) 是来自总体 \(\mathcal{N}(\mu,\sigma^2)\) 的样本,样本均值和方差分别

\[\bar{x} = \frac{\sum_{i=1}^{n}x_i}{n}\]

\[s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2\]

根据中心极限定理 \(\bar{x} \sim \mathcal{N}(\mu,\sigma^2 / n)\) ,则检验统计量服从标准正态分布

\[ u = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}} \]

假定 \(\mu_0 = 1\) 对于检验问题 I 拒绝域 \(\{u \geq u_{1-\alpha}\}\)

代码
set.seed(1234)  
n <- 20  
# 随机生成样本  
x <- rnorm(n, mean = 2.5, sd = 2)  

# 计算检验统计量  
u <- (mean(x) - 1) / (2 / sqrt(n))  

# 计算临界值  
critical_value <- qnorm(p = 1 - 0.05, mean = 0, sd = 1)  

# 计算 p 值  
p_value <- 1 - pnorm(q = u)  

# 输出结果  
list(u = u, critical_value = critical_value, p_value = p_value)
$u
[1] 2.233098

$critical_value
[1] 1.644854

$p_value
[1] 0.01277123

显著性水平(α)为0.05时,检验统计量2.233 大于 1.645, p值 0.0128 小于0.05

2.1.1.2 方差未知

在实际应用中,特别是样本较小的情况下(通常 n < 30),我们通常无法准确知道总体方差。这时,我们只能用样本方差(S²)来估计总体方差。利用样本方差进行估计会引入不确定性,因此需要一个更为宽容的分布来进行推断,因此也就诞生了\(t\)分布。\(t\) 分布比正态分布有更厚的尾部,这意味着它能更好地处理小样本带来的额外不确定性。当样本数量增加时,\(t\) 分布会逐渐趋近于正态分布。因此,在样本量较小的情况下,使用 t 分布可以更准确地反映抽样误差。 \[ \begin{aligned} \mathrm{I} \quad H_0: \mu - \mu_0 \leq 0 \quad vs. \quad H_1: \mu - \mu_0 > 0 \\ \mathrm{II} \quad H_0: \mu - \mu_0 \geq 0 \quad vs. \quad H_1: \mu - \mu_0 < 0 \\ \mathrm{III} \quad H_0: \mu - \mu_0 = 0 \quad vs. \quad H_1: \mu - \mu_0 \neq 0 \end{aligned} \]

考虑到

\[ \begin{aligned} & \frac{\bar{x} - \mu}{\sigma / \sqrt{n}} \sim \mathcal{N}(0,1) \\ & \frac{(n-1)s^2}{\sigma^2} \sim \chi^2(n-1) \\ & \mathsf{E}\{s^2\} = \sigma^2 \quad \mathsf{Var}\{s^2\} = \frac{2\sigma^4}{n-1} \end{aligned} \]

根据 t 分布的定义,检验统计量服从 t 分布,即 \(t \sim t(n-1)\)

\[ t = \frac{\bar{x} - \mu_0}{s/\sqrt{n}} \]

假定 \(\mu_0 = 1\) 对于检验问题 I ,拒绝域 \(\{t \geq t_{1-\alpha}(n-1)\}\)

代码
mu0 = 1
# 计算样本均值  
sample_mean <- mean(x)  

# 计算样本标准差  
sample_sd <- sd(x)  

# 计算 t 值  
t_value <- (sample_mean - mu0) / (sample_sd / sqrt(n))  

# 输出 t 值  
cat("t 值:", t_value, "\n")
t 值: 2.202684 
代码
# 计算自由度  
df <- n - 1  

# 计算 p 值(单侧检验)  
p_value <- 1 - pt(t_value, df)  

# 输出 p 值  
cat("p 值:", p_value, "\n")  
p 值: 0.02008155 
代码
# 结果判断  
alpha <- 0.05  # 显著性水平  
if (p_value < alpha) {  
  cat("拒绝原假设:均值显著大于", mu0, "\n")  
} else {  
  cat("无法拒绝原假设:均值与", mu0, "没有显著差异\n")  
}
拒绝原假设:均值显著大于 1 

R中内置了t.test函数,可以方便的进行多种t检验

代码
# 单边t检验,备择假设大于
t.test(x,mu = mu0,alternative = "greater")

    One Sample t-test

data:  x
t = 2.2027, df = 19, p-value = 0.02008
alternative hypothesis: true mean is greater than 1
95 percent confidence interval:
 1.214703      Inf
sample estimates:
mean of x 
 1.998672 
代码
# 单边t检验,备择假设小于
t.test(x,mu = mu0,alternative = "less")

    One Sample t-test

data:  x
t = 2.2027, df = 19, p-value = 0.9799
alternative hypothesis: true mean is less than 1
95 percent confidence interval:
     -Inf 2.782641
sample estimates:
mean of x 
 1.998672 
代码
# 双边检验,
t.test(x,mu = mu0,alternative = "two.sided")

    One Sample t-test

data:  x
t = 2.2027, df = 19, p-value = 0.04016
alternative hypothesis: true mean is not equal to 1
95 percent confidence interval:
 1.049719 2.947625
sample estimates:
mean of x 
 1.998672 
0.75 0.8 0.9 0.95 0.975 0.99 0.995 0.999
1 1.0000 1.3764 3.0777 6.3138 12.7062 31.8205 63.6567 318.3088
2 0.8165 1.0607 1.8856 2.9200 4.3027 6.9646 9.9248 22.3271
3 0.7649 0.9785 1.6377 2.3534 3.1824 4.5407 5.8409 10.2145
4 0.7407 0.9410 1.5332 2.1318 2.7764 3.7469 4.6041 7.1732
5 0.7267 0.9195 1.4759 2.0150 2.5706 3.3649 4.0321 5.8934
6 0.7176 0.9057 1.4398 1.9432 2.4469 3.1427 3.7074 5.2076
7 0.7111 0.8960 1.4149 1.8946 2.3646 2.9980 3.4995 4.7853
8 0.7064 0.8889 1.3968 1.8595 2.3060 2.8965 3.3554 4.5008
9 0.7027 0.8834 1.3830 1.8331 2.2622 2.8214 3.2498 4.2968
10 0.6998 0.8791 1.3722 1.8125 2.2281 2.7638 3.1693 4.1437

2.1.2 方差检验

方差检验是统计学中用于比较两个或多个样本或群体之间的方差是否相等的一种方法。方差检验主要用于确定不同组数据的离散程度是否存在显著差异,从而影响后续的统计分析和假设检验。

卡方检验 \(\chi^2\) 检验统计量服从卡方分布。

\[ \begin{aligned} \mathrm{I} \quad H_0: \sigma^2 - \sigma^2_0 \leq 0 \quad vs. \quad H_1: \sigma^2 - \sigma^2_0 > 0 \\ \mathrm{II} \quad H_0: \sigma^2 - \sigma^2_0 \geq 0 \quad vs. \quad H_1: \sigma^2 - \sigma^2_0 < 0 \\ \mathrm{III} \quad H_0: \sigma^2 - \sigma^2_0 = 0 \quad vs. \quad H_1: \sigma^2 - \sigma^2_0 \neq 0 \end{aligned} \]

一般假定均值 \(\mu\) 是未知的。检验统计量服从卡方分布 \(\chi^2(n-1)\)

\[ \chi^2 = \frac{(n-1)s^2}{\sigma^2_0} \]

\(\sigma^2_0 = 1.5^2\) ,考虑检验问题 I

代码
# 生成样本数据  
set.seed(123)  

# 计算样本方差  
sample_variance <- var(x)  

# 设置待检验的方差(假设值)  
hypothesized_variance <- 1.5^2  # 方差的假设值  

# 进行卡方检验  
n <- length(x)  
chi_square_statistic <- (n - 1) * sample_variance / hypothesized_variance  
p_value <- 1 - pchisq(chi_square_statistic, df = n - 1)  

# 输出结果  
cat("卡方统计量:", chi_square_statistic, "\n")  
卡方统计量: 34.717 
代码
cat("p值:", p_value, "\n")  
p值: 0.01510361 
代码
# 设定显著性水平,判断是否拒绝原假设  
alpha <- 0.05  
if (p_value < alpha) {  
    cat("拒绝原假设,说明样本方差与假设方差存在显著差异。\n")  
} else {  
    cat("未能拒绝原假设,样本方差与假设方差不存在显著差异。\n")  
}
拒绝原假设,说明样本方差与假设方差存在显著差异。
\(\chi^2\) 分布的分位数表
表 1: \(\chi^2\) 分布的分位数表
0.005 0.01 0.025 0.05 0.1 0.9 0.95 0.975 0.99 0.995
1 0.0000 0.0002 0.0010 0.0039 0.0158 2.7055 3.8415 5.0239 6.6349 7.8794
2 0.0100 0.0201 0.0506 0.1026 0.2107 4.6052 5.9915 7.3778 9.2103 10.5966
3 0.0717 0.1148 0.2158 0.3518 0.5844 6.2514 7.8147 9.3484 11.3449 12.8382
4 0.2070 0.2971 0.4844 0.7107 1.0636 7.7794 9.4877 11.1433 13.2767 14.8603
5 0.4117 0.5543 0.8312 1.1455 1.6103 9.2364 11.0705 12.8325 15.0863 16.7496
6 0.6757 0.8721 1.2373 1.6354 2.2041 10.6446 12.5916 14.4494 16.8119 18.5476
7 0.9893 1.2390 1.6899 2.1673 2.8331 12.0170 14.0671 16.0128 18.4753 20.2777
8 1.3444 1.6465 2.1797 2.7326 3.4895 13.3616 15.5073 17.5345 20.0902 21.9550
9 1.7349 2.0879 2.7004 3.3251 4.1682 14.6837 16.9190 19.0228 21.6660 23.5894
10 2.1559 2.5582 3.2470 3.9403 4.8652 15.9872 18.3070 20.4832 23.2093 25.1882

2.2 总体未知

2.2.1 均值检验

Wilcoxon符号秩检验:这是一种非参数统计检验,用于比较两个相关样本的中位数,当数据不符合正态分布时,Wilcoxon符号秩检验是一个替代t检验的有效方法。

代码
wilcox.test(x = x, mu = mu0, alternative = "greater")

    Wilcoxon signed rank exact test

data:  x
V = 163, p-value = 0.01479
alternative hypothesis: true location is greater than 1
代码
wilcox.test(x = x, mu = mu0, alternative = "less")

    Wilcoxon signed rank exact test

data:  x
V = 163, p-value = 0.9867
alternative hypothesis: true location is less than 1
代码
wilcox.test(x = x, mu = mu0, alternative = "two.sided")

    Wilcoxon signed rank exact test

data:  x
V = 163, p-value = 0.02958
alternative hypothesis: true location is not equal to 1

2.3 两样本检验

2.3.1 正态总体均值检验

两样本均值之差的检验

\[ \begin{aligned} \mathrm{I} \quad H_0: \mu_1 - \mu_2 \leq 0 \quad vs. \quad H_1: \mu_1 - \mu_2 > 0 \\ \mathrm{II} \quad H_0: \mu_1 - \mu_2 \geq 0 \quad vs. \quad H_1: \mu_1 - \mu_2 < 0 \\ \mathrm{III} \quad H_0: \mu_1 - \mu_2 = 0 \quad vs. \quad H_1: \mu_1 - \mu_2 \neq 0 \end{aligned} \]

2.3.1.1 方差已知

检验统计量如下:

\[ u = \frac{(\bar{x} - \bar{y}) - (\mu_1 - \mu_2)}{\sqrt{\frac{\sigma^2_1}{n1} + \frac{\sigma^2_2}{n2}} } \]

检验统计量服从标准正态分布 \(u \sim \mathcal{N}(0,1)\),检验统计量 \(u\) 对应的样本值 \(u_0\),检验的拒绝域和 \(P\) 值如下

\[ W_1 = \{u \geq u_{1 - \alpha} \}, \quad p_1 = 1 - \varPhi(u_0) \]

代码
# 设置已知参数  
mean1 <- 5     # 样本1的均值  
mean2 <- 6     # 样本2的均值  
n1 <- 30       # 样本1的大小  
n2 <- 30       # 样本2的大小  
sigma1 <- 1    # 样本1的标准差(已知总体标准差)  
sigma2 <- 1    # 样本2的标准差(已知总体标准差)  

# 计算Z检验统计量  
z <- (mean1 - mean2) / sqrt((sigma1^2/n1) + (sigma2^2/n2))  

# 输出Z值  
print(paste("Z值:", z))  
[1] "Z值: -3.87298334620742"
代码
# 定义显著性水平  
alpha <- 0.05  

# 计算p值  
p_value <-  (1 - pnorm(abs(z)))  # 单尾检验  
# p_value <- 2 * (1 - pnorm(abs(z)))  # 双尾检验  
# 输出p值  
print(paste("p值:", p_value))  
[1] "p值: 5.37555883647345e-05"
代码
# 检验结果  
if (p_value < alpha) {  
  print("拒绝原假设,两个总体均值存在显著差异")  
} else {  
  print("未拒绝原假设,两个总体均值不存在显著差异")  
}
[1] "拒绝原假设,两个总体均值存在显著差异"

2.3.1.2 方差未知但相等

\(x_1,\cdots,x_{n1}\) 是来自总体 \(\mathcal{N}(\mu_1,\sigma^2)\) 的样本,设 \(y_1,\cdots,y_{n2}\) 是来自总体 \(\mathcal{N}(\mu_2,\sigma^2)\) 的样本。

t 检验,检验统计量服从自由度为 \(n1 + n2 - 2\) 的 t 分布

\[ t = \frac{(\bar{x} -\bar{y})-(\mu_1 - \mu_2)}{s_0\sqrt{\frac{1}{n1} + \frac{1}{n2}}} \]

其中,

\[ \begin{aligned} & \bar{x} = \sum_{i=1}^{n1}x_i \quad \bar{y} = \sum_{i=1}^{n2}y_i \\ & s_0^2 = \frac{1}{n1 + n2 - 2}\big(\sum_{i=1}^{n1}(x_i - \bar{x})^2 + \sum_{i=1}^{n2}(y_i - \bar{y})^2\big) \end{aligned} \]

代码
# 设置随机种子以便重现  
set.seed(123)  

# 生成两个正态分布样本  
sample1 <- rnorm(30, mean = 5, sd = 1)  # 样本1  
sample2 <- rnorm(30, mean = 6, sd = 1)  # 样本2  


# 执行双样本t检验,并假设方差相等  
t_test_result <- t.test(sample1, sample2, var.equal = TRUE)  

# 输出检验结果  
print(t_test_result)

    Two Sample t-test

data:  sample1 and sample2
t = -5.2098, df = 58, p-value = 2.616e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.6962870 -0.7545972
sample estimates:
mean of x mean of y 
 4.952896  6.178338 

2.3.1.3 方差未知且不等

两个样本的样本量不是很大,总体方差也未知,两样本均值之差的显著性检验,即著名的 Behrens-Fisher 问题,Welch 在 1938 年提出近似服从自由度为 \(l\) 的 t 分布。

Welch’s t-test(Welch检验)是一种用于比较两个独立样本均值的统计方法,特别是在以下情况下适用:

  • 方差不相等:与传统的t检验相比,Welch’s t-test不要求两个样本的方差相等。这使得它在处理现实数据时更加灵活和可靠。

  • 样本大小不同:该方法也能有效处理样本量不同的情况。

Welch’s t-test的基本原理是计算出样本均值的差异,并评估这一差异是否显著。其统计量依赖于样本均值、样本标准差和样本大小,并且使用了不同的自由度计算公式,以考虑方差的不等性。

\(x_1,\cdots,x_{n1}\) 是来自总体 \(\mathcal{N}(\mu_1,\sigma_1^2)\) 的 IID 样本,设 \(y_1,\cdots,y_{n2}\) 是来自总体 \(\mathcal{N}(\mu_2,\sigma_2^2)\) 的 IID 样本。

\[ T = \frac{(\bar{x} - \bar{y}) - (\mu_1 - \mu_2)}{\sqrt{\frac{s_x^2}{n1} + \frac{s_y^2}{n2}} } \]

其中,\(s_x^2\) 表示样本 x 的方差 \(s_x^2 = \frac{1}{n1-1}\sum_{i=1}^{n1}(x_i -\bar{x})^2\)\(s_y^2\) 表示样本 y 的方差 \(s_y^2 = \frac{1}{n2-1}\sum_{i=1}^{n2}(y_i -\bar{y})^2\) 。检验统计量 \(T\) 服从自由度为 \(l\) 的 t 分布。

\[ l = \frac{s_0^4}{ \frac{s_x^4}{n1^2(n1 - 1)} + \frac{s_y^4}{n2^2(n2-1)} } \]

其中, \(s_0^2 = s_x^2 / n1 + s_y^2/n2\)\(l\) 通常不是整数,实际使用时,\(l\) 可取最近的整数。

在R语言中,通过设置t.test的参数var.equal = FALSE就可以进行Welch’s t-test

代码
# 假设有两个样本  
sample1 <- c(10.5, 12.3, 11.7, 14.2, 13.8)  
sample2 <- c(8.9, 10.1, 9.5, 11.0, 8.7)  

# 执行Welch's t-test  
result <- t.test(sample1, sample2, var.equal = FALSE)  

# 输出结果  
print(result)

    Welch Two Sample t-test

data:  sample1 and sample2
t = 3.5789, df = 6.6526, p-value = 0.009792
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.9501803 4.7698197
sample estimates:
mean of x mean of y 
    12.50      9.64 
回到顶部