使用方差分析进行事后测试的指南
方差分析是一种统计检验,用于确定三个或更多独立组的平均值之间是否存在统计显着差异。
方差分析中使用的假设如下:
原假设 (H 0 ): µ 1 = µ 2 = µ 3 = … = µ k (每组的平均值相等)
备择假设:(Ha):至少其中一个均值与其他均值不同
如果方差分析的p 值低于显着性水平,我们可以拒绝原假设,并得出结论:我们有足够的证据表明组均值中至少有一个与其他均值不同。
然而,这并没有告诉我们哪些群体彼此不同。这只是告诉我们并非所有组的平均值都是相等的。
为了准确地知道哪些组彼此不同,我们需要执行事后检验(也称为多重比较检验),这将使我们能够探索多个组的平均值之间的差异,同时也控制家庭。合理的错误率。
技术说明:需要注意的是,只有当方差分析 p 值具有统计显着性时,我们才应执行事后检验。如果 p 值不具有统计显着性,则表明所有组的平均值彼此没有差异。因此,无需执行事后测试来确定哪些组彼此不同。
家庭错误率
如前所述,事后检验使我们能够检验多个组均值之间的差异,同时还控制每个族的错误率。
在假设检验中,总是存在 I 类错误率,它由我们的显着性水平 (alpha) 定义,并告诉我们拒绝实际上为真的原假设的概率。换句话说,它是获得“假阳性”的概率,也就是说,当我们声称各组之间存在统计显着差异时,但实际上情况并非如此。
当我们进行假设检验时,I 类错误率等于显着性水平,通常选择 0.01、0.05 或 0.10。然而,当我们同时运行多个假设检验时,得到假阳性的可能性就会增加。
例如,假设我们掷出一个 20 面的骰子。骰子落在“1”上的概率仅为 5%。但如果你同时掷两个骰子,其中一个骰子落在“1”上的概率就会增加到 9.75%。如果我们同时掷 5 个骰子,概率就会增加到 22.6%。
我们掷的骰子越多,其中一个骰子落到“1”的概率就越高。同样,如果我们使用 0.05 的显着性水平同时运行多个假设检验,则得到假阳性的概率会增加到超过 0.05。
方差分析中的多重比较
当我们进行方差分析时,我们经常比较三个或更多组。因此,当我们进行事后检验来探索组均值之间的差异时,我们想要探索多个成对比较。
例如,假设我们有四个组:A、B、C 和 D。这意味着我们要通过事后检验检查总共六个成对比较:
A – B(A组平均值与B组平均值之差)
交流电
公告
公元前
漫画
光盘
如果我们有四个以上的组,我们想要执行的成对比较的数量只会增加更多。下表说明了与每个组数相关的成对比较的数量以及每个族的错误率:
请注意,每个系列的错误率随着组数(以及因此成对比较的数量)的增加而迅速增加。事实上,一旦我们达到六组,我们得到假阳性的几率实际上就超过 50%!
这意味着,如果我们必须进行如此多的成对比较,并且知道我们的家庭错误率如此之高,我们就会对我们的结果产生严重怀疑。
幸运的是,事后测试使我们能够在组之间进行多重比较,同时按家庭控制错误率。
示例:使用事后检验的单向方差分析
以下示例说明如何使用事后检验执行 单向方差分析。
注意:此示例使用 R 编程语言,但您无需了解 R 即可理解测试结果或关键要点。
首先,我们将创建一个包含四组(A、B、C、D)的数据集,每组有 20 个观测值:
#make this example reproducible set.seed(1) #load tidyr library to convert data from wide to long format library(tidyr) #create wide dataset data <- data.frame(A = runif(20, 2, 5), B = runif(20, 3, 5), C = runif(20, 3, 6), D = runif(20, 4, 6)) #convert to long dataset for ANOVA data_long <- gather(data, key = "group", value = "amount", A, B, C, D) #view first six lines of dataset head(data_long) # group amount #1 To 2.796526 #2 A 3.116372 #3 A 3.718560 #4 A 4.724623 #5 A 2.605046 #6 A 4.695169
接下来,我们将对数据集进行单向方差分析:
#fit anova model anova_model <- aov(amount ~ group, data = data_long) #view summary of anova model summary(anova_model) # Df Sum Sq Mean Sq F value Pr(>F) #group 3 25.37 8.458 17.66 8.53e-09 *** #Residuals 76 36.39 0.479
从方差分析表结果中,我们看到 F 统计量为 17.66,相应的 p 值非常小。
这意味着我们有足够的证据来拒绝所有组均值相等的原假设。然后我们可以使用事后检验来确定哪些组均值彼此不同。
我们将回顾以下事后测试的示例:
Tukey 测试– 当您想要进行所有可能的成对比较时很有用
Holm 方法– 比 Tukey 测试稍微保守的测试
Dunnett 校正– 当您想要将每个组的均值与控制均值进行比较并且不想将处理均值相互比较时非常有用。
图基测试
我们可以使用内置的 R 函数TukeyHSD()进行多重比较的 Tukey 测试,如下所示:
#perform Tukey's Test for multiple comparisons
TukeyHSD(anova_model, conf.level=.95)
#Tukey multiple comparisons of means
# 95% family-wise confidence level
#
#Fit: aov(formula = amount ~ group, data = data_long)
#
#$group
# diff lwr upr p adj
#BA 0.2822630 -0.292540425 0.8570664 0.5721402
#CA 0.8561388 0.281335427 1.4309423 0.0011117
#DA 1.4676027 0.892799258 2.0424061 0.0000000
#CB 0.5738759 -0.000927561 1.1486793 0.0505270
#DB 1.1853397 0.610536271 1.7601431 0.0000041
#DC 0.6114638 0.036660419 1.1862672 0.0326371
请注意,我们指定置信度为 95%,这意味着我们希望每个族的错误率为 0.05。 R 为我们提供了两个指标来比较每个成对差异:
- 平均差的置信区间(由lwr和upr的值给出)
- 根据均值差调整 p 值
置信区间和 p 值将得出相同的结论。
例如,C 组和 A 组之间的均值差的 95% 置信区间为 (0.2813, 1.4309),并且由于该区间不包含零,所以我们知道这两组均值之间的差异具有统计显着性。特别是,我们知道差异是正的,因为置信区间的下限大于零。
同样,C 组和 A 组之间的均值差异的 p 值为 0.0011,低于我们的显着性水平 0.05,这也表明这两组均值之间的差异具有统计显着性。
我们还可以使用 R 中的plot()函数可视化 Tukey 测试产生的 95% 置信区间:
plot(TukeyHSD(anova_model, conf.level=.95))
如果区间包含零,则我们知道组均值之间的差异不具有统计显着性。在上面的示例中,BA 和 CB 的差异不具有统计显着性,但其他四个成对比较的差异具有统计显着性。
霍尔姆法
我们可以执行的另一个事后测试是霍尔姆方法。该检验通常被认为比 Tukey 检验更为保守。
我们可以在 R 中使用以下代码来运行 Holm 方法进行多个成对比较:
#perform holm's method for multiple comparisons
pairwise.t.test(data_long$amount, data_long$group, p.adjust="holm")
# Pairwise comparisons using t tests with pooled SD
#
#data: data_long$amount and data_long$group
#
#ABC
#B 0.20099 - -
#C 0.00079 0.02108 -
#D 1.9e-08 3.4e-06 0.01974
#
#P value adjustment method: holm
该测试为每个成对比较提供 p 值网格。例如,A 组和 B 组平均值之间差异的 p 值为 0.20099。
如果将此检验的 p 值与 Tukey 检验的 p 值进行比较,您会发现除了 C 组和 D 组之间的差异外,每个成对比较都会得出相同的结论。 – Tukey 测试中的差异值为 0.0505,而 Holm 方法中的差异值为 0.02108。
因此,使用Tukey’s检验,我们得出结论,C组和D组之间的差异在0.05显着性水平上不具有统计学显着性,但使用Holm’s方法,我们得出结论,C组和D组之间的差异具有统计学显着性。
一般来说,Holm 方法产生的 p 值往往低于 Tukey 检验产生的 p 值。
邓尼特修正
我们可以用于多重比较的另一种方法是 Dunett 校正。当我们想要将每个组的均值与控制均值进行比较并且我们不想将治疗均值相互比较时,我们会使用这种方法。
例如,使用下面的代码,我们将 B、C 和 D 组的均值与 A 组的均值进行比较。因此,我们使用 A 组作为对照组,并且对 B、C 组之间的差异不感兴趣., 和 D.
#load multcomp library necessary for using Dunnett's Correction library(multicomp) #convert group variable to factor data_long$group <- as.factor(data_long$group) #fit anova model anova_model <- aov(amount ~ group, data = data_long) #performcomparisons dunnet_comparison <- glht(anova_model, linfct = mcp(group = "Dunnett")) #view summary of comparisons summary(dunnet_comparison) #Multiple Comparisons of Means: Dunnett Contrasts # #Fit: aov(formula = amount ~ group, data = data_long) # #Linear Assumptions: #Estimate Std. Error t value Pr(>|t|) #B - A == 0 0.2823 0.2188 1.290 0.432445 #C - A == 0 0.8561 0.2188 3.912 0.000545 *** #D - A == 0 1.4676 0.2188 6.707 < 1e-04 ***
从输出中的 p 值,我们可以看到以下内容:
- B 组与 A 组均值之间的差异在 0.05 显着性水平上不具有统计学显着性。此测试的 p 值为0.4324 。
- C组和A组平均值之间的差异具有统计学显着性,显着性水平为0.05。此测试的 p 值为0.0005 。
- D 组和 A 组平均值之间的差异具有统计显着性,显着性水平为 0.05。此测试的 p 值为0.00004 。
如前所述,此方法将 A 组视为“对照”组,并简单地将所有其他组的平均值与 A 组的平均值进行比较。请注意,没有对 B、C 和 D 组之间的差异进行测试,因为我们不这样做不要这样做。我对这些群体之间的差异不感兴趣。
关于事后测试和统计功效的说明
事后测试在控制族错误率方面做得非常出色,但代价是它们降低了比较的统计功效。事实上,降低家族错误率的唯一方法是对所有个体比较使用较低的显着性水平。
例如,当我们使用 Tukey 检验进行六次配对比较并且希望将族错误率保持在 0.05 时,我们应该对每个单独的显着性水平使用大约 0.011 的显着性水平。我们进行的成对比较越多,我们对每个单独的显着性水平使用的显着性水平就越低。
问题在于较低的显着性水平对应于较低的统计功效。这意味着,如果群体平均值之间确实存在差异,那么动力较弱的研究不太可能检测到这种差异。
减少这种权衡影响的一种方法是简单地减少我们执行的成对比较的数量。例如,在前面的示例中,我们对四个不同组进行了六次成对比较。但是,根据您的学习需要,您可能只想进行一些比较。
通过减少比较,您无需过多降低统计功效。
值得注意的是,在执行方差分析之前,您必须准确确定要进行比较的组以及将使用哪个事后检验来进行这些比较。否则,如果您只是看到哪个事后测试产生了统计上显着的结果,就会降低研究的完整性。
结论
在这篇文章中,我们了解了以下内容:
- 方差分析用于确定三个或更多独立组的平均值之间是否存在统计显着差异。
- 如果方差分析产生的 p 值低于我们的显着性水平,我们可以使用事后检验来找出哪些组均值彼此不同。
- 事后测试使我们能够在执行多次成对比较时控制每个系列的错误率。
- 控制族错误率的代价是统计功效较低。我们可以通过减少成对比较来减少较低统计功效的影响。
- 您必须首先确定要对哪些组执行成对比较以及将使用哪个事后测试来执行此操作。