本文介绍⽅差分析(ANOVA),并通过给出集中不同应用场景。⽅差分析(ANOVA),⼜叫F检验,简单来说,就是求得F统计量(组间⽅差/组内⽅差),然后查F表,如果⼤于临界值(⼀般是0.05显著性⽔平下)则拒绝原假设,即组间具有显著性的差异,当然R语言实现不需要查表。
F检验用于测试两个总体方差是否相等。原假设和备择假设如下:
H 0 {H_0} H0: σ 1 2 {σ_1^2} σ12 = σ 2 2 {σ_2^2} σ22 (总体方差相等)
H 1 {H_1} H1: σ 1 2 {σ_1^2} σ12 ≠ σ 2 2 {σ_2^2} σ22 (总体方差不相等)
如果P值小于显著性水平(可以选择.01, .05, .10),那么你有足够证据拒绝原假设。通常我们在回归模型中可以看到F检验统计量,下面就从回归模型示例开始。
假如我们有下面数据集,包括学习时间(StudyHours)、预考成绩(PrepExams)、终考成绩(FinalExamScore).
为了分析学生的学习时间与预考成绩与终考成绩直接的关系,我们使用多重线性回归,使用学习时间和预考成绩作为预测变量、终考成绩作为响应变量:
score <- read.csv("csv/score.csv")
score
# X StudyHours PrepExams FinalExamScore
# 1 student1 3 2 76
# 2 student2 7 6 88
# 3 student3 16 5 96
# 4 student4 14 2 90
# 5 student5 12 7 98
# 6 student6 7 4 80
# 7 student7 4 4 86
# 8 student8 19 2 89
# 9 student9 4 8 68
# 10 student10 8 4 75
# 11 student11 8 1 72
# 12 student12 3 3 76
model <- lm(FinalExamScore~StudyHours+PrepExams, data = score)
summary(model)
# Call:
# lm(formula = FinalExamScore ~ StudyHours + PrepExams, data = score)
#
# Residuals:
# Min 1Q Median 3Q Max
# -13.128 -5.319 2.168 3.458 9.341
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 66.990 6.211 10.785 1.9e-06 ***
# StudyHours 1.300 0.417 3.117 0.0124 *
# PrepExams 1.117 1.025 1.090 0.3041
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 7.327 on 9 degrees of freedom
# Multiple R-squared: 0.5308, Adjusted R-squared: 0.4265
# F-statistic: 5.091 on 2 and 9 DF, p-value: 0.0332
从结果可以看到F检验统计量和p-value,F-statistic: 5.091 , p-value: 0.0332; F检验统计量等于MS回归除以MS残差。
既然P值小于显著性水平,我们能够推断回归模型比仅使用截距模型拟合数据效果更好。对我们示例来说,使用预测变量学习时间和预考成绩,比不用两个预测变量、只用截距效果更好。这里就是实现整体显著性F检验,是F检验中常用应用场景。
整体显著性F检验是回归模型用于检验线性回归模型是否比不使用预测变量模型更好。原假设与备注假设如下:
原假设( H 0 {H_0} H0):不使用预测变量模型与使用预测变量模型(你的模型)效果一样。
备择假设 H 1 {H_1} H1: 你的模型比仅使用截距模型(不使用预测变量)效果更好。
如果P值小于显著性水平(可以选择.01, .05, .10),那么你有足够证据拒绝原假设。
在R中执行F检验,可以使用var.test()函数,语法如下:
方法1:var.test(x, y, alternative = “two.sided”)
方法2:var.test(values ~ groups, data, alternative = “two.sided”)
alternative参数用于指定使用的备择假设,缺省为"two.sided",但也可以指定"left", “right”。
下面通过示例介绍这两种方法的使用。
# 定义两组样本数据集
x <- c(18, 19, 22, 25, 27, 28, 41, 45, 51, 55)
y <- c(14, 15, 15, 17, 18, 22, 25, 25, 27, 34)
# 执行F检验判断方差是否相等
var.test(x, y)
# F test to compare two variances
#
# data: x and y
# F = 4.3871, num df = 9, denom df = 9, p-value = 0.03825
# alternative hypothesis: true ratio of variances is not equal to 1
# 95 percent confidence interval:
# 1.089699 17.662528
# sample estimates:
# ratio of variances
# 4.387122
从输出可以看到:
F检验为4.3871,相应的 p-value 为 0.03825。既然p-value小于.05,我们应该拒绝原假设。这意味着有足够证据证明两个总体方差不相等。
# 定义两组样本数据集
data <- data.frame(values=c(18, 19, 22, 25, 27, 28, 41, 45, 51, 55,
14, 15, 15, 17, 18, 22, 25, 25, 27, 34),
group=rep(c('A', 'B'), each=10))
# 执行F检验判断方差是否相等
var.test(values~group, data=data)
# F test to compare two variances
#
# data: values by group
# F = 4.3871, num df = 9, denom df = 9, p-value = 0.03825
# alternative hypothesis: true ratio of variances is not equal to 1
# 95 percent confidence interval:
# 1.089699 17.662528
# sample estimates:
# ratio of variances
# 4.387122
从输出可以看到:
再次,F检验为4.3871,相应的 p-value 为 0.03825。既然p-value小于.05,我们应该拒绝原假设。这意味着有足够证据证明两组总体方差不相等。
典型F检验为了回答下面两个问题:
两个样本来自方差相等的总体吗?
新的方法与现有的方法是否减少了一些可变性?