Anova.在R.

Antoine Soetewey 2020-10-12 32 minute read

介绍

Anova.(方差分析)是统计学齐鲁风采群英会,以确定两个或更多个人口手段是否不同。换句话说,它用于 比较两个或更多组 看他们是否显着 不同的.

然而,在实践中,是:

  • 学生t检验 用于比较 2组;
  • Anova. 概括2组超过2组的T检验,因此它用于比较 3个或更多组.

注意,有几个版本的ANOVA(例如,单向ANOVA,双向ANOVA,混合ANOVA,重复测量ANOVA等)。在本文中,我们只介绍了最简单的形式 - 单向Anova1 - 我们在剩下的文章中将其称为Anova。

虽然Anova用于推断 方法 不同的群体,该方法称为“分析 方差“。它被称为这样,因为它比较了“在”方差(不同组之间的差异之间)和“内的方差”(每个组内的方差)。如果方差之间的方差显着大于方差范围内,则归属于组表示不同。否则,我们不能以某种方式得出结论。通过采用比率来彼此比较这两个差异(\(\ frac {variance_ {之间}} {variance_ {内}}}})然后通过将该比率与来自Fisher的阈值进行比较 概率分布 (基于特定意义水平的阈值,通常为5%)。

这是现在关于ANOVA方法的足够理论。在本文的剩值中,我们从更实际的角度讨论了它,特别是我们将涵盖以下几点:

  • Anova.的目的,应该使用它和零/替代假设
  • Anova.的潜在假设以及如何检查它们
  • 如何在r中执行ANOVA
  • 如何解释Anova的结果
  • 了解HOC齐鲁风采群英会的概念并解释结果
  • 如何可视化ANOVA和HOC齐鲁风采群英会结果

数据

数据 for the present article is the penguins dataset (an alternative to the well-known iris dataset), accessible via the {palmerpenguins} package:

# install.packages("palmerpenguins")
library(palmerpenguins)

数据集包含344个企鹅的数据,3种不同种类(Adelie,Chinstrap和Gentoo)。 DataSet包含8个变量,但我们仅关注鳍状肢长度和本文的物种,因此我们只保留那些2个变量:

library(tidyverse)

dat <- penguins %>%
  select(species, flipper_length_mm)

(If you are unfamiliar with the pipe operator (%>%), you can also 选择变量 with penguins[, c("species", "flipper_length_mm")]. Learn more ways to select variables in the article about 数据操纵。)

以下一些基本 描述性统计 和一个情节(用) {ggplot2} package)我们在我们进入ANOVA的目标之前,我们的数据集:

summary(dat)
##       species    flipper_length_mm
##  Adelie   :152   Min.   :172.0    
##  Chinstrap: 68   1st Qu.:190.0    
##  Gentoo   :124   Median :197.0    
##                  Mean   :200.9    
##                  3rd Qu.:213.0    
##                  Max.   :231.0    
##                  NA's   :2

鳍状长度从172变化到231毫米,平均为200.9毫米。 Adelie,Chinstrap和Gentoo的物种分别为152,68和124企鹅。

library(ggplot2)

ggplot(dat) +
  aes(x = species, y = flipper_length_mm, color = species) +
  geom_jitter() +
  theme(legend.position = "none")

在这里,这是 因素 is the species 多变的 which contains 3 modalities or groups (Adelie, Chinstrap and Gentoo).

Anova.的AIM和假设

如引言中所述,ANOVA用于比较群体(实际上,3个或更多组)。更一般地,它用于:

  • 研究是否在不同的方式(也称为Anova的背景下的水平或治疗)的测量相似 分类 variable
  • 比较不同级别的分类变量的影响 定量 variable
  • 基于定性变量解释定量变量

在这种情况下,作为一个例子,我们将使用ANOVA来帮助我们回答问题:“Penguins的3种企鹅脚蹼是不同的吗?“。

Anova.的NULL和替代假设是:

  • \(h_0 \): \(\ mu_ {adelie} = \ mu_ {chinstrap} = \ mu_ {gentoo} \) (\(\右箭头\) 在鳍状肢长度方面,3种相等)
  • \(H_1): 至少 一个意思是不同的(\(\右箭头\) 至少一个物种在鳍状肢长度方面与其他2种不同)

小心替代假设是 不是 一切都意味着不同。所有意味着相同的相反(\(h_0 \)) 就是它 至少 一个意思是与其他意思(\(H_1))。从这个意义上讲,如果拒绝零假设,则意味着至少一个物种与另一个物种不同,但不一定是所有3种彼此不同。它可能是属于物种的鳍状肢长度与物种chinstrap和gentoo不同,但是鳍状肢长度在Chinstrap和Gentoo之间相似。其他类型的齐鲁风采群英会(称为后HOC齐鲁风采群英会并覆盖 部分)必须进行齐鲁风采群英会以齐鲁风采群英会所有3种是否有所不同。

Anova的基础假设

至多 统计齐鲁风采群英会,有些假设需要满足,以便能够解释结果。当没有满足一个或多个假设时,虽然技术上可以执行这些齐鲁风采群英会,但解释结果并信任结论是不正确的。

以下是ANOVA的假设,如何齐鲁风采群英会它们以及如果不符合假设,则存在其他齐鲁风采群英会:

  • 变量类型:ANOVA需要一个混合 连续定量 依赖变量(对应于问题所关联的测量)和一个 定性的 独立变量(至少2个级别,它将确定组比较的组)。
  • 独立:从代表和随机选择的部分收集的数据 人口,应在组之间和每个组内独立。独立的假设是基于实验的设计和对实验条件的良好控制而不是通过正式齐鲁风采群英会来验证。如果您仍然不确定基于实验设计的独立性,请向自己询问一个观察与另一个观察(如果一个观察对每个组内的影响有关),或者本身之间存在影响。如果没有,很可能你有独立的 样本。如果样品之间的观察(形成要比较的不同组)是依赖性的(例如,如果收集了三次测量 同一个人 由于在治疗前(II)期间(II)期间测量(II)之前的测量度量(I)的情况,因此,应优选重复措施Anova,以考虑样品之间的依赖性。
  • 常态:残留物2 应该遵循大约一个 正常分布。常常可以通过a视觉齐鲁风采群英会正常性假设 直方图 A. QQ图,和/或通过a正式 正常齐鲁风采群英会 如那个 Shapiro-Wilk or Kolmogorov-Smirnov test. If, even after a transformation of your data (e.g., logarithmic transformation, square root, Box-Cox, etc.), the residuals still do not follow approximately a normal distribution, the Kruskal-Wallis test can be applied (kruskal.test(variable ~ group, data = dat in R). This non-parametric test, robust to non normal distributions, has the same goal than the ANOVA—compare 3 or more groups—but it uses sample medians instead of sample means to compare groups.
  • 差异的平等:不同组的差异应该是相等的群体(一种称为差异的同质性的假设,甚至有时被称为同性恋,而不是异源性,如果差异在组中不同,则相反)。可以以图形方式齐鲁风采群英会此假设(通过比较A中的色散 箱形图 或者 dotplot. for instance), or more formally via the Levene’s test (leveneTest(variable ~ group) from the {car} package) or Bartlett’s test, among others. If the hypothesis of equal variances is rejected, another version of the ANOVA can be used: the Welch ANOVA (oneway.test(variable ~ group, var.equal = FALSE)). Note that the Welch ANOVA does not require homogeneity of the variances, but the distributions should still follow approximately a normal distribution. Note that the Kruskal-Wallis test does not require the assumptions of normality nor homoscedasticity of the variances.3

根据是否满足假设,选择适当的齐鲁风采群英会可能会令人困惑,所以这里是一个简短的摘要:

  1. 检查您的观察是独立的。
  2. 如果他们是独立的,齐鲁风采群英会残差的正常性:
    • 如果假设正常性,则齐鲁风采群英会差异的同质性:
      • 如果差异是平等的,则使用 Anova..
      • 如果差异不等于,请使用 Welch Anova..
    • 如果没有假设正常性,请使用 Kruskal-Wallis齐鲁风采群英会.

现在我们已经看到了Anova的潜在假设,我们在应用适当版本的齐鲁风采群英会之前,我们专门为我们的数据集进行审核。

变量类型

这 dependent variable flipper_length_mm is a 定量 多变的 and the independent variable species is a 定性的 一个(与3种相对应的3个级别)。所以我们有两种类型的变量混合,并且满足了这个假设。

独立

假设观察结果的独立性是从随机选择的群体中收集的数据和3个样本之间的测量没有相关的数据。

这 independence assumption is most often verified based on the design of the experiment and on the good control of experimental conditions, as it is the case here. If you really want to test it more formally, you can, however, test it via a statistical test—the Durbin-Watson test (in R: durbinWatsonTest(res_lm) where res_lm is a linear model). The null hypothesis of this test specifies an autocorrelation coefficient = 0, while the alternative hypothesis specifies an autocorrelation coefficient \(\ ne \) 0.

常态

请记住 常态 可以通过a目视齐鲁风采群英会残差 直方图 A. QQ图,和/或通过a正式 正常齐鲁风采群英会 (例如shapiro-wilk齐鲁风采群英会)。

在检查正常假设之前,我们首先需要计算ANOVA(更重要的是 部分). We then save the results in res_aov :

res_aov <- aov(flipper_length_mm ~ species,
  data = dat
)

我们现在可以视觉检查正常性:

par(mfrow = c(1, 2)) # combine plots

# histogram
hist(res_aov$residuals)

# QQ-plot
library(car)
qqPlot(res_aov$residuals,
  id = FALSE # id = FALSE to remove point identification
)

从上面的直方图和QQ图来看,我们可以看到似乎满足正常性假设。实际上,直方图大致形成钟曲线,表明残差遵循正态分布。此外,QQ图中的点粗略地遵循直线,大部分都在置信带内,也表明残留物遵循正常分布。

一些研究人员在这里停下来,假设达到正常性,而其他研究也通过正式的统计齐鲁风采群英会齐鲁风采群英会假设。您选择仅在视觉上齐鲁风采群英会(i)(ii)仅通过正常性齐鲁风采群英会或(iii)在视觉上和通过正常齐鲁风采群英会中进行齐鲁风采群英会。但是,请记住,两点以下:

  1. Anova.对与正常性的小偏差非常强大。这意味着,如果少数点略有从正常性略微偏离,则这不是一个问题(从ANOVA结果的解释),
  2. 常规齐鲁风采群英会有时是非常保守的,这意味着由于与正常性有限的偏差,可以拒绝正常性的零假设。对于齐鲁风采群英会的功率随着样本大小而增加,这是尤其如此。

在实践中,我倾向于仅喜欢(i)视觉方法,但是,这是个人选择的问题,并且还取决于分析的背景。

仍然为了说明,我们现在还通过正常齐鲁风采群英会齐鲁风采群英会正常性假设。您可以使用Shapiro-Wilk齐鲁风采群英会或Kolmogorov-Smirnov齐鲁风采群英会等。请记住,null和替代假设是:

  • \(h_0 \):数据来自正常分布
  • \(H_1):数据做 不是 来自正态分布

In R, we can test normality of the residuals with the Shapiro-Wilk test thanks to the shapiro.test() function:

shapiro.test(res_aov$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  res_aov$residuals
## W = 0.99452, p-value = 0.2609

P-价值of the Shapiro-Wilk test on the residuals is larger than the usual significance level of \(\ alpha = 5 \%\),所以我们不拒绝剩余遵循正常分布的假设(p-价值= 0.261).

此结果符合视觉方法。在我们的情况下,因此在视觉上和正式遇到正常假设。

侧面注意:提醒p值是 可能性 在鉴于空假设的情况下,将观察结果与我们在样品中观察到的极端。如果是p值 \(< \alpha\) (表明它不太可能观察我们在样本中的数据,因为零假设是真的),拒绝空假设,否则不拒绝NULL假设。查看更多信息 p值和意义水平 如果您不熟悉这些重要的统计概念。

请记住,如果未达到正常的假设,则需要在原始数据上应用一些转换,希望残差更好地适合正态分配,或者您需要使用Anova的非参数版本 - kruskal-wallis齐鲁风采群英会。

正如读者所指出的(参见文章的最终的注释),也可以在“原始”数据(即观察)而不是残差上齐鲁风采群英会正常假设。但是,如果您在原始数据上齐鲁风采群英会正常性假设,则必须齐鲁风采群英会它 每组分别 由于ANOVA需要正常 每组.

在所有残差或每组观测上齐鲁风采群英会正常性相当于,并将提供类似的结果。实际上,说“每组内的y分布通常分布”与“剩余量通常分布式”的说法相同。

请记住,残差是y的实际值与x的特定值的平均值之间的距离,因此在计算残差的计算中诱导分组变量。

所以总之,在ANOVA中,您实际上有两种齐鲁风采群英会正常性:

  1. 在“RAW”数据(Y值)上单独检查每个组的正常性
  2. 检查所有残差上的正常性(但不是每组)

在实践中,您将看到刚刚使用残差并将其全部检查它们,特别是如果您有很多组或每组观察少,则通常更容易。

如果您仍然不相信:请记住,ANOVA是线性模型的特殊情况。假设你的独立变量是一个 连续变量 (代替 分类变量),您备注的唯一选项是检查残差上的正常性,这正是在线性回归模型中齐鲁风采群英会正常性的方法。

差异平等 - 同质性

假设残差遵循正常分布,现在是时候检查差异是否相等。结果将对我们使用ANOVA或WELCH ANOVA产生影响。

这可以在视觉上进行验证 箱形图 或者 dotplot. - 通过统计齐鲁风采群英会(Levene的齐鲁风采群英会等)更加正式。

在视觉上,我们有:

# Boxplot
boxplot(flipper_length_mm ~ species,
  data = dat
)

# Dotplot
library("lattice")

dotplot(flipper_length_mm ~ species,
  data = dat
)

Boxplot和Dotplot都显示出不同物种的类似方差。在Boxplot中,这可以通过盒子和晶须具有所有物种的可比大小的事实来看。有几个 异常值 如晶须外部的点所示,但这不会改变这样的事实 分散 不同物种之间或多或少相同。

在Dotplot中,这可以看出,所有3种的点数都有或多或少地具有 范围,分散的标志,因此 方差 being similar.

与正常的假设一样,如果您觉得视觉方法不够,您可以正式齐鲁风采群英会与Levene或Bartlett的齐鲁风采群英会的差异的平等。请注意,Levene的齐鲁风采群英会对从正常分布的偏差敏感而不是Bartlett的齐鲁风采群英会。

两个齐鲁风采群英会的NULL和替代假设是:

  • \(h_0 \):差异是平等的
  • \(H_1):至少有一个方差是不同的

In R, the Levene’s test can be performed thanks to the leveneTest() function from the {car} package:

# Levene's test
library(car)

leveneTest(flipper_length_mm ~ species,
  data = dat
)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value Pr(>F)
## group   2  0.3306 0.7188
##       339

p-价值being larger than the significance level of 0.05, we do not reject the null hypothesis, so we cannot reject the hypothesis that variances are equal between species (p-价值= 0.719).

该结果也符合视觉方法,因此差异的均匀性在视觉上和正式地举行。

一种齐鲁风采群英会正常性和均匀性的方法

For your information, it is also possible to test the homogeneity of the variances and the normality of the residuals visually (and both at the same time) via the plot() function:

par(mfrow = c(1, 2)) # combine plots

# 1. Homogeneity of variances
plot(res_aov, which = 1)

# 2. Normality
plot(res_aov, which = 2)

左侧的绘图表明,残留物和拟合值之间没有明显的关系(每个组的平均值),因此假设差异的均匀性。如果违反了差异的同质性,红线就不会平。

右侧的绘图显示残差遵循大约正常分布,因此假设正常性。如果违反了正常性,那么积分将始终如一地偏离虚线。

Anova.

我们表明,满足了ANOVA的所有假设。因此,我们可以继续执行r的ANOVA,但首先,让我们做一些初步分析,以更好地了解研究问题。

初步分析

在实际在r中实际执行ANOVA之前的良好做法是 可视化数据 in relation to the research question. The best way to do so is to draw and compare boxplots of the quantitative variable flipper_length_mm for each species.

This can be done with the 箱形图() function in base R (same code than the visual check of equal variances):

箱形图(flipper_length_mm ~ species,
  data = dat
)

或者与之与 {ggplot2} package:

library(ggplot2)

ggplot(dat) +
  aes(x = species, y = flipper_length_mm) +
  geom_boxplot()

这 boxplots above show that, at least for our sample, penguins of the species Gentoo seem to have the biggest flipper, and Adelie species the smallest flipper.

除了每个物种的盒子外,还是计算一些良好做法 描述性统计 如那个 意思是标准偏差 by species. This can be done, for instance, with the aggregate() function:

aggregate(flipper_length_mm ~ species,
  data = dat,
  function(x) round(c(mean = mean(x), sd = sd(x)), 2)
)
##     species flipper_length_mm.mean flipper_length_mm.sd
## 1    Adelie                 189.95                 6.54
## 2 Chinstrap                 195.82                 7.13
## 3    Gentoo                 217.19                 6.48

或者 with the summarise()group_by() functions from the {dplyr} package:

library(dplyr)

group_by(dat, species) %>%
  summarise(
    mean = mean(flipper_length_mm, na.rm = TRUE),
    sd = sd(flipper_length_mm, na.rm = TRUE)
  )
## # A tibble: 3 x 3
##   species    mean    sd
##   <fct>     <dbl> <dbl>
## 1 Adelie     190.  6.54
## 2 Chinstrap  196.  7.13
## 3 Gentoo     217.  6.48

Mean is also the lowest for Adelie 和 highest for Gentoo. Boxplots and 描述性统计 are, however, not enough to conclude that flippers are significantly different in the 3 populations of penguins.

Anova.在R.

正如您现在所猜到的那样,只有ANOVA可以帮助我们在手头上赋予样品的人口推断,并帮助我们回答初始研究问题“是针对3种企鹅的脚蹼长度不同?”。

R中的ANOVA可以通过几种方式进行,其中两个是下面的:

  1. With the oneway.test() function:
# 1st method:
oneway.test(flipper_length_mm ~ species,
  data = dat,
  var.equal = TRUE # assuming equal variances
)
## 
##  One-way analysis of means
## 
## data:  flipper_length_mm and species
## F = 594.8, num df = 2, denom df = 339, p-value < 2.2e-16
  1. With the summary()aov() functions:
# 2nd method:
res_aov <- aov(flipper_length_mm ~ species,
  data = dat
)

summary(res_aov)
##              Df Sum Sq Mean Sq F value Pr(>F)    
## species       2  52473   26237   594.8 <2e-16 ***
## Residuals   339  14953      44                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 2 observations deleted due to missingness

As you can see from the two outputs above, the test statistic (F = in the first method and F value in the second one) and the p-价值(p-value in the first method and Pr(>F) in the second one) are exactly the same for both methods, which means that in case of equal variances, results and conclusions will be unchanged.

第一种方法的优点是,它易于从ANOVA切换到瓦奇ANOVA时从ANOVA(当差异相等)(当差异时使用) 联合国equal). This can be done by replacing var.equal = TRUE by var.equal = FALSE, as presented below:

oneway.test(flipper_length_mm ~ species,
  data = dat,
  var.equal = FALSE # assuming unequal variances
)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  flipper_length_mm and species
## F = 614.01, num df = 2.00, denom df = 172.76, p-value < 2.2e-16

然而,第二种方法的优点是:

  • 打印完整的Anova表(具有自由度,平均方块等),这可能对某些(理论)病例感兴趣
  • results of the ANOVA (res_aov) can be saved for later use (especially useful for 后HOC齐鲁风采群英会)

解释ANOVA结果

鉴于这一点 p-价值is smaller than 0.05, we reject the null hypothesis, so we reject the hypothesis that all means are equal. Therefore, we can conclude that 在脚蹼长度方面,至少一个物种与其他物种不同 (p-价值< 2.2e-16).

(为了说明,如果是 p-Value大于0.05:我们不能拒绝所有手段等于的零假设,所以我们不能拒绝第3种所考虑的企鹅在鳍状肢长度方面相等的假设。)

A nice and easy way to report results of an ANOVA in R is with the report() function from the {report} package:

# install.packages("remotes")
# remotes::install_github("easystats/report") # You only need to do that once
library("report") # Load the package every time you start R

report(res_aov)
## The ANOVA (formula: flipper_length_mm ~ species) suggests that:
## 
##   - The main effect of species is significant and large (F(2, 339) = 594.80, p < .001; Eta2 = 0.78, 90% CI [0.75, 0.80])
## 
## Effect sizes were labelled following Field's (2013) recommendations.

正如您所看到的,该功能会为您解释结果,并表明在鳍状侧长度上的物种的大而显着的主要效果(p-价值< .001).

Note that the report() function can be used for other analyses. See more r的提示和技巧 如果你发现这个有用。

下一步是什么?

如果是 零假设没有被拒绝 (p-价值\(\ ge \) 0.05),这意味着我们不拒绝所有群体等于的假设。 Anova在这里或多或少地停止。其他类型的分析可以执行当然,但 - 给定手头的数据 - 我们无法证明至少一个组是不同的,所以我们通常不会与ANOVA进一步进一步。

相反,如果 只有if.null假设被拒绝 (因为它是我们的案子 p-价值<0.05),我们证明至少有一个组是不同的。如果我们只对鳍状肢的长度似有感兴趣,我们可以决定停止此处。

但大多数时候,当我们展示了一个Anova,至少有一个群体是不同的,我们也有兴趣了解 哪个 一个(是)不同。然而,ANOVA的结果 不是 告诉我们哪个群体(也)与其他组不同。

为齐鲁风采群英会这一点,我们需要使用其他类型的齐鲁风采群英会,称为hoc齐鲁风采群英会(在拉丁语中,“之后”,因此在获得统计上显着的ANOVA结果之后)或多个成对比较齐鲁风采群英会。这家统计齐鲁风采群英会是以下部分的主题。

后HOC齐鲁风采群英会

发出多次齐鲁风采群英会

为了看看哪个组(是)与其他组不同,我们需要 比较组2到2。在实践中,由于有3种,我们将以如下方式比较物种2:

  1. Chinstrap与Adelie
  2. Gentoo与Adelie.
  3. Gentoo vs. chinstrap.

从理论上讲,我们可以比较3 学生的t检验 由于我们需要比较2组,并且在这种情况下精确地使用T-Test。

但是,如果执行了几个T检验,则 多次齐鲁风采群英会 (也称为多重性)。简而言之,当进行几个统计齐鲁风采群英会时,有些将有 p - 价值less than \(\α\) 纯粹偶然,即使所有空假设实际上也是真的。

为了展示问题,考虑我们的案例,我们有3个假设来齐鲁风采群英会和所需的显着性水平为0.05。观察至少一个重要结果的概率(至少一个 p-价值<0.05)就是因为机会是:

\ [开始{等式} \begin{split} p(\ text {至少1个签名结果})&= 1 - p(\ text {no signif。结果})\\ &= 1 - (1 - 0.05)^ 3 \\ & = 0.142625 \end{split} \end{equation}\]

因此,随着3个齐鲁风采群英会的考虑,我们已经有14.26%的几率观察至少一个重要结果,即使所有齐鲁风采群英会实际上都没有意义。

随着组的数量增加,比较数量也会增加,因此由于机会而具有显着结果的可能性不断增加。例如,对于10个组,我们需要进行45个比较,并且偶然至少有一个重要结果的比较 \(1 - (1 - 0.05)^ {45} = 90 \%\)。因此,在比较10组的情况下,很可能偶然观察重要的结果,当我们有14个或更多我们几乎确定(99%)时有一个假的阳性!

Hoc齐鲁风采群英会考虑到进行多次齐鲁风采群英会并通过调整处理问题 \(\α\) 在某种程度上,使得由于机会观察至少一个重要结果的可能性仍然低于我们所需的显着性水平。4

hoc在r及其解释中的齐鲁风采群英会

后HOC齐鲁风采群英会是一系列统计齐鲁风采群英会,因此有几个。最常使用的是 Tukey HSD.邓恩特的 tests:

  • Tukey HSD.用于比较 所有团体 彼此(因此所有可能的2组比较)。
  • Dunnett用于与A比较 参照组。例如,考虑2种治疗组和一个对照组。如果您只想与对照组进行比较2个处理组,并且您不想将2个治疗组相互比较,则Dunnett的齐鲁风采群英会是首选。

注意,假设差异是相等的齐鲁风采群英会。它们是在下一节中的。如果variances不平等,则可以使用游戏 - Howell齐鲁风采群英会等。

Tukey HSD.齐鲁风采群英会

在我们的情况下,由于没有“参考”物种,并且我们有兴趣比较所有物种,我们将使用Tukey HSD齐鲁风采群英会。

在R中,Tukey HSD齐鲁风采群英会如下所示。这是在哪里 第二种方法 to perform the ANOVA comes handy because the results (res_aov) are reused for the post-hoc test:

library(multcomp)

# Tukey HSD test:
post_test <- glht(res_aov,
  linfct = mcp(species = "Tukey")
)

summary(post_test)
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = flipper_length_mm ~ species, data = dat)
## 
## Linear Hypotheses:
##                         Estimate Std. Error t value Pr(>|t|)    
## Chinstrap - Adelie == 0   5.8699     0.9699   6.052 7.32e-09 ***
## Gentoo - Adelie == 0     27.2333     0.8067  33.760  < 1e-09 ***
## Gentoo - Chinstrap == 0  21.3635     1.0036  21.286  < 1e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)

In the output of the Tukey HSD test, we are interested in the table displayed after Linear Hypotheses:, and more precisely, in the first and last column of the table. The first column shows the comparisons which have been made; the last column (Pr(>|t|)) shows the adjusted5 p - 每个比较的值(用空假设是两组相等,并且两组的替代假设是不同的)。

这是这些调整的 p - 用于齐鲁风采群英会两组是否有明显不同的值,我们可以相信整个一组比较集中的错误率为0.05。

在我们的示例中,我们齐鲁风采群英会了:

  1. Chinstrap与Adelie (line Chinstrap - Adelie == 0)
  2. Gentoo与Adelie. (line Gentoo - Adelie == 0)
  3. Gentoo vs. chinstrap. (line Gentoo - Chinstrap == 0)

所有三个迫使 p-Values小于0.05,因此我们拒绝所有比较的空假设,这意味着 所有物种都有显着差异 就脚蹼长度而言。

这 results of the post-hoc test can be visualized with the plot() function:

par(mar = c(3, 8, 3, 3))
plot(post_test)

我们看到置信区间不跨越零线,这表明所有群体都显着不同。

Note that the Tukey HSD test can also be done in R with the TukeyHSD() function:

TukeyHSD(res_aov)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = flipper_length_mm ~ species, data = dat)
## 
## $species
##                       diff       lwr       upr p adj
## Chinstrap-Adelie  5.869887  3.586583  8.153191     0
## Gentoo-Adelie    27.233349 25.334376 29.132323     0
## Gentoo-Chinstrap 21.363462 19.000841 23.726084     0

With this code, it is the column p adj (also the last column) which is of interest. Notice that the conclusions are the same than above: 所有物种都有显着差异 就脚蹼长度而言。

这 results can also be visualized with the plot() function:

plot(TukeyHSD(res_aov))

Dunnett的齐鲁风采群英会

我们已经看到了这一点 部分 即随着组的数量增加,比较数量也会增加。并且作为数量 比较增加,后HOC分析必须进一步降低个人意义水平,这导致 较低的统计权力 (因此人口中的组手段之间的差异不太可能检测到)。

一种方法来缓解这一点并增加统计功率是通过减少比较的数量。此减少允许后HOC过程使用更大的单个错误率来实现所需的全局错误率。在将所有可能的组与Tukey HSD齐鲁风采群英会进行比较的同时,许多研究具有对照组和几个治疗组。对于这些研究,您可能需要将治疗组仅与对照组进行比较,这减少了比较次数。

Dunnett的齐鲁风采群英会确实如此 - 它只比较了一组作为对所有其他组的参考,但它不会将所有组与其他组进行比较。

以便回顾:

  • Tukey HSD.齐鲁风采群英会允许比较 全部 小组,但以成本为止 较少的力量
  • Dunnett的齐鲁风采群英会允许只制造 与参考组的比较,但有利于 更多权力

Now, again for the sake of illustration, consider that the species Adelie is the reference species and we are only interested in comparing the reference species against the other 2 species. In that scenario, we would use the Dunnett’s test.

In R, the Dunnett’s test is done as follows (the only difference with the code for the Tukey HSD test is in the line linfct = mcp(species = "Dunnett")):

library(multcomp)

# Dunnett's test:
post_test <- glht(res_aov,
  linfct = mcp(species = "Dunnett")
)

summary(post_test)
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Dunnett Contrasts
## 
## 
## Fit: aov(formula = flipper_length_mm ~ species, data = dat)
## 
## Linear Hypotheses:
##                         Estimate Std. Error t value Pr(>|t|)    
## Chinstrap - Adelie == 0   5.8699     0.9699   6.052 7.59e-09 ***
## Gentoo - Adelie == 0     27.2333     0.8067  33.760  < 1e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)

解释与Tukey HSD齐鲁风采群英会相同,但在Dunett的齐鲁风采群英会中,我们只比较:

  1. Chinstrap与Adelie (line Chinstrap - Adelie == 0)
  2. Gentoo与Adelie. (line Gentoo - Adelie == 0)

都调整了 p-Values(在最后一列中显示)低于0.05,因此我们拒绝两个比较的空假设。这意味着两个 物种Chinstrap和Gentoo与Adelie的参考物种显着不同 就脚蹼长度而言。 (尽管如此,关于Chinstrap和Gentoo之间的比较,没有任何东西可以说。)

Again, the results of the post-hoc test can be visualized with the plot() function:

par(mar = c(3, 8, 3, 3))
plot(post_test)

我们看到置信区间不会越过零线,这表明物种Gentoo和Chinstrap与参考物种Adelie有很大差异。

请注意,在r默认情况下,参考类别为a 因子变量 是按字母顺序排列的第一个类别。这是默认情况下,参考物种是Adelie的原因。

这 reference category can be changed with the relevel() function (or with the {questionr} addin)。考虑到我们希望Gentoo作为参考类别而不是Adelie:

# Change reference category:
dat$species <- relevel(dat$species, ref = "Gentoo")

# Check that Gentoo is the reference category:
levels(dat$species)
## [1] "Gentoo"    "Adelie"    "Chinstrap"

Gentoo现在是三个三类,它确实被认为是参考水平。

为了用新的参考执行Dunnett的齐鲁风采群英会,我们首先需要重新运行Anova来考虑到新参考:

res_aov2 <- aov(flipper_length_mm ~ species,
  data = dat
)

然后,我们可以使用Anova的新结果运行Dunett的齐鲁风采群英会:

# Dunnett's test:
post_test <- glht(res_aov2,
  linfct = mcp(species = "Dunnett")
)

summary(post_test)
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Dunnett Contrasts
## 
## 
## Fit: aov(formula = flipper_length_mm ~ species, data = dat)
## 
## Linear Hypotheses:
##                         Estimate Std. Error t value Pr(>|t|)    
## Adelie - Gentoo == 0    -27.2333     0.8067  -33.76   <1e-10 ***
## Chinstrap - Gentoo == 0 -21.3635     1.0036  -21.29   <1e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
par(mar = c(3, 8, 3, 3))
plot(post_test)

从上面的结果,我们得出结论,在鳍状肢长度方面与Gentoo种类有显着不同(调整后 p - 价值< 1e-10).

请注意,即使您的学习没有与其他组可以比较的参考组,仍然更好地做了一些研究问题决定的比较,而不是进行全部成对齐鲁风采群英会。通过减少HOC的比较数量,仅对必要的比较,而且更多地,您最大限度地提高了统计功率。6

其他 p-Values调整方法

对于感兴趣的读者,请注意您可以使用其他 p-Values调整方法 by using the pairwise.t.test() function:

pairwise.t.test(dat$flipper_length_mm, dat$species,
  p.adjust.method = "holm"
)
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  dat$flipper_length_mm and dat$species 
## 
##           Gentoo  Adelie 
## Adelie    < 2e-16 -      
## Chinstrap < 2e-16 3.8e-09
## 
## P value adjustment method: holm

By default, the Holm method is applied but other methods exist. See ?p.adjust for all available options.

在同一地块上可视化ANOVA和HOC后的齐鲁风采群英会

如果您有兴趣包括ANOVA的结果和同一地区的HOC齐鲁风采群英会(直接在BOXPLOTS上),这是一段代码可能对您感兴趣(由自己编辑基于此内部的代码 文章):

# Edit from here
x <- which(names(dat) == "species") # name of grouping variable
y <- which(
  names(dat) == "flipper_length_mm" # names of variables to test
)
method1 <- "anova" # one of "anova" or "kruskal.test"
method2 <- "t.test" # one of "wilcox.test" or "t.test"
my_comparisons <- list(c("Chinstrap", "Adelie"), c("Gentoo", "Adelie"), c("Gentoo", "Chinstrap")) # comparisons for post-hoc tests
# Edit until here


# Edit at your own risk
library(ggpubr)
for (i in y) {
  for (j in x) {
    p <- ggboxplot(dat,
      x = colnames(dat[j]), y = colnames(dat[i]),
      color = colnames(dat[j]),
      legend = "none",
      palette = "npg",
      add = "jitter"
    )
    print(
      p + stat_compare_means(aes(label = paste0(..method.., ", p-value = ", ..p.format..)),
        method = method1, label.y = max(dat[, i], na.rm = TRUE)
      )
      + stat_compare_means(comparisons = my_comparisons, method = method2, label = "p.format") # remove if p-value of ANOVA or Kruskal-Wallis test >= alpha
    )
  }
}

正如您在上面的绘图上看到的那样,物种的boxplots一起呈现 p - ANOVA和HOC齐鲁风采群英会的值。

除了它将可视化表示和结果组合在同一绘图上的事实中,此代码还具有您可以一次执行多个ANOVA齐鲁风采群英会的优势。查看更多信息 文章.

概括

在本文中,我们审查了 目标和假设 一个ANOVA,什么是 假设 在能够信任结果之前需要验证(即独立,正常和同质性),然后显示出来 如何在r中进行ANOVA 以及如何 解释结果.

关于Anova的一篇文章在没有讨论的情况下都不会完整 后HOC齐鲁风采群英会,特别是 Tukey HSD. - 比较所有组 - 以及 邓恩特的 齐鲁风采群英会 - 将参考组与所有其他组进行比较。

最后但并非最不重要的是,我们展示了如何 可视化 数据和ANOVA的结果和HOC在同一绘图中的齐鲁风采群英会结果。

谢谢阅读。

一如既往,如果您有问题或与本文所涵盖的主题相关的建议,请将其添加为评论,以便其他读者可以从讨论中受益。


  1. 请注意,它被称为 单程 或者 单因素 ANOVA,因为该装置涉及单个独立变量的不同模式,或因子。↩︎

  2. 残差(表示 \(\ epsilon \))是从属变量的观察值之间的差异(\(y \))和预测值(\(\ hat {y} \))。在ANOVA的上下文中,残差对应于观察到的值与该组的所有值的差异。↩︎

  3. 只要你使用kruskal-wallis齐鲁风采群英会, fine,比较组,不需要同性恋。如果您想比较中位数,Kruskal-Wallis齐鲁风采群英会需要同性恋。查看有关此差异的更多信息 文章.↩︎

  4. 请注意,您原则上可能将Bonferroni校正应用于所有齐鲁风采群英会。例如,在上面的例子中,具有3个齐鲁风采群英会和全局所需的显着性水平 \(\α\) = 0.05,如果如果是,我们只会拒绝NULL假设 p-价值is less than \(\ frac {0.05} {3} \) = 0.0167。然而,这种方法已知是非常保守的,导致潜在的虚假底层率。↩︎

  5. p调整值以使全局意义水平保持到所需的水平。↩︎

  6. 谢谢迈克尔友好的这个建议。↩︎



喜欢这篇文章?

获取更新 每次发布新文章。
任何垃圾邮件都没有任何垃圾邮件。
分享: