如何在 r 中执行单向方差分析
单向方差分析用于确定三个或更多独立组的平均值之间是否存在统计显着差异。
这种类型的检验称为单向方差分析,因为我们分析预测变量对响应变量的影响。
注意:如果我们对两个预测变量对响应变量的影响感兴趣,我们可以执行双向方差分析。
如何在 R 中执行单向方差分析
以下示例说明了如何在 R 中执行单向方差分析。
背景
假设我们想要确定三种不同的锻炼计划是否对减肥有不同的影响。我们研究的预测变量是锻炼计划,响应变量是体重减轻(以磅为单位)。
我们可以进行单向方差分析,以确定这三个计划所带来的体重减轻是否存在统计上的显着差异。
我们招募 90 人参加一项实验,随机分配 30 人遵循计划 A、计划 B 或计划 C,为期一个月。
以下代码创建我们将使用的数据框:
#make this example reproducible
set.seed(0)
#create data frame
data <- data.frame(program = rep(c("A", "B", "C"), each = 30),
weight_loss = c(runif(30, 0, 3),
runif(30, 0, 5),
runif(30, 1, 7)))
#view first six rows of data frame
head(data)
# program weight_loss
#1 A 2.6900916
#2 A 0.7965260
#3 A 1.1163717
#4 A 1.7185601
#5 A 2.7246234
#6 A 0.6050458
数据框的第一列显示该人参加一个月的计划,第二列显示该人在计划结束时经历的总体重减轻(以磅为单位)。
探索数据
在拟合单向方差分析模型之前,我们可以通过使用dplyr包查找三个程序中每一个的减肥平均值和标准差来更好地理解数据:
#load dplyr package library (dplyr) #find mean and standard deviation of weight loss for each treatment group data %>% group_by (program) %>% summarize (mean = mean(weight_loss), sd = sd(weight_loss)) # A tibble: 3 x 3 # program mean sd # #1 A 1.58 0.905 #2 B 2.56 1.24 #3 C 4.13 1.57
我们还可以为这三个计划中的每一个创建一个箱线图,以可视化每个计划的减肥分布:
#create boxplots
boxplot(weight_loss ~ program,
data = data,
main = "Weight Loss Distribution by Program",
xlab = "Program",
ylab = "Weight Loss",
col = "steelblue",
border = "black")
从这些箱线图中,我们可以看到,计划 C 的参与者的平均体重减轻最高,计划 A 的参与者的平均体重减轻最低。
我们还可以看到,与其他两个程序相比,程序 C 中的减肥标准差(箱线图的“长度”)稍高一些。
接下来,我们将单向方差分析模型与我们的数据进行拟合,看看这些视觉差异实际上是否具有统计显着性。
单向方差分析模型拟合
在 R 中拟合单向方差分析模型的一般语法是:
aov(响应变量~预测变量,数据=数据集)
在我们的示例中,我们可以使用以下代码来拟合单向方差分析模型,使用weight_loss作为响应变量,使用program作为预测变量。然后我们可以使用summary()函数来显示模型的结果:
#fit the one-way ANOVA model model <- aov(weight_loss ~ program, data = data) #view the model output summary(model) # Df Sum Sq Mean Sq F value Pr(>F) #program 2 98.93 49.46 30.83 7.55e-11 *** #Residuals 87 139.57 1.60 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
从模型结果中我们可以看出,预测变量程序在 0.05 显着性水平上具有统计显着性。
换句话说,这三个计划的平均体重减轻之间存在统计上的显着差异。
检查模型假设
在进一步进行之前,我们需要验证模型的假设是否得到满足,以便模型结果可靠。特别是,单向方差分析假设:
1. 独立性——每组的观察结果必须相互独立。由于我们使用了随机设计(即将参与者随机分配到锻炼计划),因此应该满足这个假设,这样我们就不必对此过于担心。
2. 正态性——因变量对于预测变量的每个水平都应具有近似正态分布。
3. 方差相等——每组的方差相等或近似相等。
检查正态性和等方差假设的一种方法是使用plot()函数,该函数会生成四个模型检查图。特别是,我们对以下两个图特别感兴趣:
- 残差对比拟合– 该图显示残差和拟合值之间的关系。我们可以使用该图来粗略评估组之间的方差是否近似相等。
- QQ 图– 该图显示相对于理论分位数的标准化残差。我们可以使用该图来粗略评估是否满足正态性假设。
以下代码可用于生成这些模型检查图:
plot(model)
上面的QQ图让我们验证了正态性假设。理想情况下,标准化残差将沿着图的直线对角线分布。然而,在上图中我们可以看到残差在开始和结束时与直线略有偏差。这表明我们的正态性假设可能被违反。
残差对比上面调整后的图表使我们能够验证方差相等的假设。理想情况下,我们希望残差对于拟合值的每个级别均等分布。
我们可以看到,对于较高的拟合值,残差更加分散,这表明我们的方差齐性假设可能被违反。
为了正式测试等方差,我们可以使用car包执行 Levene 测试:
#load car package library (car) #conduct Levene's Test for equality of variances leveneTest(weight_loss ~ program, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 2 4.1716 0.01862 * #87 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
检验的 p 值为0.01862 。如果我们使用 0.05 的显着性水平,我们将拒绝三个程序之间方差相等的原假设。但是,如果我们使用 0.01 的显着性水平,我们将不会拒绝原假设。
尽管我们可以尝试转换数据以确保满足正态性和方差相等的假设,但目前我们不会太担心它。
分析治疗差异
一旦我们验证了模型假设得到满足(或合理满足),我们就可以进行事后测试来准确确定哪些治疗组彼此不同。
对于我们的事后测试,我们将使用TukeyHSD()函数执行 Tukey 测试以进行多重比较:
#perform Tukey's Test for multiple comparisons
TukeyHSD(model, conf.level=.95)
#Tukey multiple comparisons of means
# 95% family-wise confidence level
#
#Fit: aov(formula = weight_loss ~ program, data = data)
#
#$program
# diff lwr upr p adj
#BA 0.9777414 0.1979466 1.757536 0.0100545
#CA 2.5454024 1.7656076 3.325197 0.0000000
#CB 1.5676610 0.7878662 2.347456 0.0000199
p 值表示每个程序之间是否存在统计显着差异。结果显示,各方案的平均减肥效果在0.05显着性水平上存在统计学上的显着差异。
我们还可以使用 R 中的plot(TukeyHSD())函数可视化 Tukey 测试产生的 95% 置信区间:
#create confidence interval for each comparison
plot(TukeyHSD(model, conf.level=.95), las = 2)
置信区间的结果与假设检验的结果一致。
特别是,我们可以看到,程序之间的平均体重减轻的置信区间都不包含值0 ,这表明三个程序之间的平均体重减轻存在统计上的显着差异。
报告单向方差分析结果
最后,我们可以用一种总结结果的方式报告单向方差分析的结果:
进行单向方差分析来检查锻炼计划的效果 关于减肥(以磅为单位)。三个计划的减肥效果之间存在统计学上的显着差异(F(2, 87) = 30.83, p = 7.55e-11)。进行事后 Tukey 的 HSD 测试。
计划 C 参与者的平均体重减轻明显大于计划 B 参与者的平均体重减轻 (p < 0.0001)。
计划 C 参与者的平均体重减轻明显大于计划 A 参与者的平均体重减轻 (p < 0.0001)。
此外,计划 B 参与者的平均体重减轻明显大于计划 A 参与者的平均体重减轻 (p = 0.01)。
其他资源
以下教程提供有关单向方差分析的更多信息: