

# 15 比较均值
我们已经遇到了许多关注样本均值问题的案例。 在本章中，我们将更深入地研究比较不同组均值的各种方法。


## 15.1 测试单个平均值

对于平均值，我们或许最想知道的是它是否有一个特定的值。假设我们想测试 NHANES 数据集中成年人的平均舒张压值是否高于 80，根据美国心脏病学会的规定，这是高血压的临界值。为了抛出这个问题，我们选取了 200 名成年人作为样本；每个成年人都测量了三次血压，我们使用这些血压的平均值进行测试。

测试这种差异的一种简单方法是使用一种称为*符号测试*的测试，它关注实际值和假设值之间的差异是否是偶然性的。为此，我们取每个数据点和假设平均值之间的差值，并计算它们的符号。如果数据是正态分布的，并且实际平均值等于假设平均值，那么高于(或低于)假设平均值的值的比例应该是 0.5，这样正差异的比例也应该是 0.5。在我们的样本中，我们看到 19.0%的人舒张压高于 80。然后，我们可以使用二项式测试来询问正差异的比例是否大于 0.5，使用我们统计软件中的二项式测试功能:

```
## 
##  Exact binomial test
## 
## data:  npos and nrow(NHANES_sample)
## number of successes = 38, number of trials = 200, p-value = 1
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
##  0.15 1.00
## sample estimates:
## probability of success 
##                   0.19
```

这里我们看到，在$p \le 0.5$的零假设下，血压偏高的个体比例并不出乎我们的预期，鉴于观测值实际上小于$0.5$，这一点并不应该令我们感到惊讶。

我们也可以用学生的 t 检验来问这个问题，你在本书前面已经遇到过了。我们将平均数称为$\bar{X}$而假设的人口平均数称为$\mu$。然后，单个平均值的 t 检验为:
$$
t = \frac{\bar{X} - \mu}{SEM}
$$
SEM的简写为 Standard Error of Mean。使用下面的公式计算：

$$
SEM = \frac{\hat{\sigma}}{\sqrt{n}}
$$
本质上，t 统计量询问样本均值与假设数量的偏差相对于均值的抽样变异性有多大。

我们可以使用统计软件对 NHANES 数据集进行计算:

```
## 
##  One Sample t-test
## 
## data:  NHANES_adult$BPDiaAve
## t = -55, df = 4593, p-value = 1
## alternative hypothesis: true mean is greater than 80
## 95 percent confidence interval:
##   69 Inf
## sample estimates:
## mean of x 
##        70
```

这向我们表明，数据集中的平均舒张压(69.5)实际上远低于 80，因此我们对其是否高于 80 的测试远没有意义。

请记住，大的 p 值不会为我们提供支持零假设的证据，因为我们已经预计零假设一开始就是正确的。然而，正如我们在贝叶斯分析一章中所讨论的，我们可以使用贝叶斯因子来量化支持或反对零假设的证据:

```
ttestBF(NHANES_sample$BPDiaAve, mu=80, nullInterval=c(-Inf, 80))
```

```
## Bayes factor analysis
## --------------
## [1] Alt., r=0.707 -Inf<d<80    : 2.7e+16  ±NA%
## [2] Alt., r=0.707 !(-Inf<d<80) : NaNe-Inf ±NA%
## 
## Against denominator:
##   Null, mu = 80 
## ---
## Bayes factor type: BFoneSample, JZS
```

这里列出的第一个贝叶斯因子($2.73 * 10^{16}$)表示有极其有力的证据支持零假设而不是替代假设。





## 15.2 比较两种方法

统计学中经常出现的一个更常见的问题是，两个不同组的均值之间是否存在差异。假设我们想知道经常吸食大麻的人是否看更多的电视，我们也可以使用 NHANES 数据集来询问这个问题。我们从数据集中抽取了 200 个样本，测试每天看电视的小时数是否与经常使用大麻有关。图 [15.1](#fig:PotTVViolin) 的左图使用小提琴图对这些数据进行了可视化操作。

![Left: Violin plot showing distributions of TV watching separated by regular marijuana use. Right: Violin plots showing data for each group, with a dotted line connecting the predicted values for each group, computed on the basis of the results of the linear model.. ](img/file80.png)

图 15.1:左图:小提琴图显示了定期吸食大麻对看电视的影响。右图:显示各组数据的小提琴图，虚线连接各组的预测值，根据线性模型的结果进行计算。

我们也可以使用学生 t 检验来检验两组独立观察值之间的差异(正如我们在前面章节中看到的)；我们将在本章后面讨论观测值不独立的情况。提醒一下，比较两个独立组的 t 统计量计算如下:


$$
t = \frac{\bar{X_1} - \bar{X_2}}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}}
$$


其中$\bar{X}_1$ 和 $\bar{X}_2$是两组的均值， $S^2_1$ and $S^2_2$是两组的方差，而在均值间无差异的零假设下，该统计量根据 t 分布进行分布，自由度使用 Welch 检验(如前所述)进行计算，因为两组之间的样本数量不同。在这种情况下，我们从特定的假设开始，即吸食大麻与更多地看电视有关，因此我们将使用单尾检验。以下是我们的统计软件得出的结果:

```
## 
##  Welch Two Sample t-test
## 
## data:  TVHrsNum by RegularMarij
## t = -3, df = 85, p-value = 6e-04
## alternative hypothesis: true difference in means between group No and group Yes is less than 0
## 95 percent confidence interval:
##   -Inf -0.39
## sample estimates:
##  mean in group No mean in group Yes 
##               2.0               2.8
```

在这种情况下，我们看到，在预期的方向上，两组之间存在着统计学上的显著差异——经常吸食大麻的人看电视的时间更长。





## 15.3 将 t 检验作为线性模型

t 检验通常作为比较均值的专门工具，但它也可以被视为一般线性模型的应用。在这种情况下，模型将如下所示:

$$
\hat{TV} = \hat{\beta_1}*Marijuana + \hat{\beta_0}
$$
由于吸毒是一个二元变量，我们将其视为一个*虚拟变量*，就像我们在上一章中讨论的那样，对于吸烟者将其值设置为 1，对于不吸烟者将其值设置为 0。 既然如此，$\hat{\beta_1}$就是两组的均值之差，$\hat{\beta_0}$可以使用统计软件中的一般线性模型函数来拟合该模型，并看到它给出了与上述 t 检验相同的 t 统计量，只是在这种情况下它是正的，这是因为我们的软件排列组的方式:

```
## 
## Call:
## lm(formula = TVHrsNum ~ RegularMarij, data = NHANES_sample)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.2843 -1.0067 -0.0067  0.9933  2.9933 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        2.007      0.116   17.27  < 2e-16 ***
## RegularMarijYes    0.778      0.230    3.38  0.00087 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.4 on 198 degrees of freedom
## Multiple R-squared:  0.0546, Adjusted R-squared:  0.0498 
## F-statistic: 11.4 on 1 and 198 DF,  p-value: 0.000872
```

我们也可以图形方式查看线性模型结果(参见图 [15.1](#fig:PotTVViolin) 的右侧面板)。在这种情况下，不吸烟者的预测值是$\hat{\beta_0}$，而吸烟者的预测值是$\hat{\beta_0} +\hat{\beta_1}$

为了计算这种分析的标准误差，我们可以使用与线性回归完全相同的方程，因为这实际上是线性回归的另一个例子。事实上，如果您将上述 t 检验的 p 值与大麻使用变量的线性回归分析中的 p 值进行比较，您会发现线性回归分析的 p 值恰好是 t 检验的两倍，因为线性回归分析正在执行双尾检验。



### 15.3.1 比较两种方法的效果大小

比较两个均值最常用的效应大小是科恩的 d，它(你可能记得第 [10](#ci-effect-size-power) 章)是用标准差单位表示的效应大小。对于使用上述一般线性模型(即，使用单个虚拟编码变量)估计的 t 检验，这表示为:

$$
d = \frac{\hat{\beta_1}}{\sigma_{residual}}
$$

我们还可以计算出$r^2$，然后进行分析，它告诉我们吸食大麻的人在看电视的人中占了多大比例。这个值(在上面的线性模型分析总结的底部报告)是 0.05，这告诉我们，虽然这种影响在统计上可能是显著的，但它在看电视的变化中占相对较小的比例。







## 15.4 均值差异的贝叶斯因子

正如我们在贝叶斯分析一章中所讨论的，贝叶斯因子提供了一种更好地量化支持或反对无差异零假设的证据的方法。我们可以对相同数据进行分析:

```
## Bayes factor analysis
## --------------
## [1] Alt., r=0.707 0<d<Inf    : 0.041 ±0%
## [2] Alt., r=0.707 !(0<d<Inf) : 61    ±0%
## 
## Against denominator:
##   Null, mu1-mu2 = 0 
## ---
## Bayes factor type: BFindepSample, JZS
```

由于数据的组织方式，第二行显示了本次分析的相关贝叶斯因子，即 61.4。这向我们表明，反对零假设的证据是相当有力的。





## 15.5 比较成对观察值

在实验研究中，我们经常使用*受试者内*设计，在这种设计中，我们在多个测量值上比较同一个人。来自这种设计的测量通常被称为*重复测量*。例如，在 NHANES 数据集中，血压被测量三次。假设我们有兴趣测试样本中个体间第一次和第二次测量的平均收缩压存在差异(图 [15.2](#fig:BPfig) )。

![Left: Violin plot of systolic blood pressure on first and second recording, from NHANES. Right: Same violin plot with lines connecting the two data points for each individual.](img/file81.png)

图 15.2:左图:NHANES 第一次和第二次记录的收缩压小提琴图。右图:同样的小提琴图，用线条连接每个人的两个数据点。

我们看到，第一次和第二次测量的平均血压(大约一点)似乎没有太大的差异。首先，让我们使用独立样本 t 检验来测试差异，这忽略了数据点对来自相同个体的事实。

```
## 
##  Two Sample t-test
## 
## data:  BPsys by timepoint
## t = 0.6, df = 398, p-value = 0.5
## alternative hypothesis: true difference in means between group BPSys1 and group BPSys2 is not equal to 0
## 95 percent confidence interval:
##  -2.1  4.1
## sample estimates:
## mean in group BPSys1 mean in group BPSys2 
##                  121                  120
```

这一分析显示没有显著差异。然而，这种分析是不恰当的，因为它假设两个样本是独立的，而事实上它们不是，因为数据来自相同的个体。我们可以为每个人绘制一条线来显示这些数据(见图 [15.2](#fig:BPfig) 中的右图)。

在这种分析中，我们真正关心的是每个人的血压在两次测量之间是否系统性的发生了变化，因此另一种表示数据的方法是计算每个人在两个时间点之间的差异，然后分析这些差异值，而不是分析个体测量。在图 [15.3](#fig:BPDiffHist) 中，我们展示了这些差异值的直方图，蓝色线条表示平均差异。

![Histogram of difference scores between first and second BP measurement. The vertical line represents the mean difference in the sample.](img/file82.png)

图 15.3:第一次和第二次血压测量的差值直方图。垂直线代表样本的平均差异。



### 15.5.1 标志测试

测试差异的一个简单方法是使用*符号测试*。为此，我们取差值并计算其符号，然后我们使用二项式检验来询问正号的比例是否不同于 0.5。

```
## 
##  Exact binomial test
## 
## data:  npos and nrow(NHANES_sample)
## number of successes = 96, number of trials = 200, p-value = 0.6
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.41 0.55
## sample estimates:
## probability of success 
##                   0.48
```

这里我们看到在$p=0.5$的零假设下，有正符号的个体比例(0.48)并没有大到离谱。然而，符号测试的一个问题是，它丢弃了关于差异大小的信息，因此可能会丢失一些信息。





### 15.5.2 配对 t 检验

更常见的策略是使用*配对 t 检验*，这相当于对每个样本内部测量值之间的平均差异是否为零的单样本 t 检验。我们可以使用我们的统计软件进行计算，告诉它数据点是成对的:

```
## 
##  Paired t-test
## 
## data:  BPsys by timepoint
## t = 3, df = 199, p-value = 0.007
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  0.29 1.75
## sample estimates:
## mean difference 
##               1
```

通过这种分析，我们看到实际上两个测量值之间存在显著差异。让我们计算贝叶斯因子，看看结果提供了多少证据:

```
## Bayes factor analysis
## --------------
## [1] Alt., r=0.707 : 3 ±0.01%
## 
## Against denominator:
##   Null, mu = 0 
## ---
## Bayes factor type: BFoneSample, JZS
```

观察到的贝叶斯因子 2.97 告诉我们，尽管在配对 t 检验中效果显著，但它实际上提供了非常弱的证据来支持替代假设。

配对 t 检验也可以根据线性模型来定义；有关这方面的更多详细信息，请参见附录。







## 15.6 比较两个以上均值

我们经常想要比较两个以上的平均数，以确定它们之间是否有任何不同。假设我们正在分析一项高血压疗效的数据。在这项研究中，志愿者被随机分配到三种情况中的一种:药物1、药物2、安慰剂。让我们生成一些数据并绘制它们(见图 [15.4](#fig:DrugTrial)

![Box plots showing blood pressure for three different groups in our clinical trial.](img/file83.png)

图 15.4:箱线图显示了我们临床试验中三个不同组的血压。



### 15.6.1 差异分析

我们首先要测试所有组的平均值相等的零假设，也就是说，与安慰剂相比，两种高血压药都没有疗效。我们可以使用一种叫做*方差分析* (ANOVA)的方法来做到这一点。这是心理统计学中最常用的方法之一，在这里我们浅尝辄止。方差分析背后的基本思想是我们在一般线性模型一章中已经讨论过的，事实上方差分析只是这种模型的一个特定版本的名称。
记得上一章，我们可以将数据中的总方差（$SS_{total}$）划分为两部分：模型解释的方差（$SS_{model}$）和非模型解释的方差（$SS_{ error}$)。 然后，我们可以让它们除以它们的自由度来计算它们中的每一个的*均方*； 对于错误，这是 $N - p$（其中 $p$ 是我们计算的均值数），对于模型，这是 $p - 1$，用公式表示为：


$$
MS_{model} =\frac{SS_{model}}{df_{model}}= \frac{SS_{model}}{p-1}
$$

$$
MS_{error} = \frac{SS_{error}}{df_{error}} = \frac{SS_{error}}{N - p}
$$

使用 ANOVA，我们希望在均值间无差异的零假设下，测试模型解释的方差是否大于我们随机预期的方差。而对于 t 分布，在零假设下期望值为零，但这里不是这样，因为平方和总是正数。幸运的是，有另一种理论分布描述了在零假设下平方和的比率是如何分布的:分布 *F* (见图 [15.5](#fig:FDist) )。这种分布有两个自由度，分别对应于分子(本例中为模型)和分母(本例中为误差)的自由度。

![F distributions under the null hypothesis, for different values of degrees of freedom.](img/file84.png)

图 15.5:不同自由度值的零假设下的 f 分布。

为了创建 ANOVA 模型，我们扩展了您在上一章中遇到的*虚拟编码*的概念。请记住，对于比较两个平均值的 t 检验，我们创建了一个虚拟变量，其中一个条件的值为 1，其他条件的值为 0。在这里，我们通过创建两个虚拟变量来扩展这一思想，一个编码药物 1 的条件，另一个编码药物 2 的条件。就像在 t 检验中一样，我们将有一个条件(在这种情况下，安慰剂)没有虚拟变量，因此代表了与其他条件进行比较的基线；它的平均值定义了模型的截距。使用药品1和药品2的虚拟编码，我们可以使用与上一章相同的方法来拟合模型:

```
## 
## Call:
## lm(formula = sysBP ~ d1 + d2, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -29.084  -7.745  -0.098   7.687  23.431 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   141.60       1.66   85.50  < 2e-16 ***
## d1            -10.24       2.34   -4.37  2.9e-05 ***
## d2             -2.03       2.34   -0.87     0.39    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.9 on 105 degrees of freedom
## Multiple R-squared:  0.169,  Adjusted R-squared:  0.154 
## F-statistic: 10.7 on 2 and 105 DF,  p-value: 5.83e-05
```

这个命令的输出为我们提供了两个信息。首先，它向我们展示了每个虚拟变量的 t 检验结果，这基本上告诉我们每个条件是否分别不同于安慰剂；似乎药物 1 有，而药物 2 没有。但是，请记住，如果我们想要解释这些测试，我们需要校正 p 值，以说明我们已经进行了多重假设测试的事实；我们将在下一章看到如何做到这一点的例子。

请记住，我们开始想要测试的假设是，任何条件之间是否有任何差异；我们称之为*综合*假设检验，它是由 F 统计提供的检验。F 统计量基本上告诉我们，我们的模型是否优于只包含截距的简单模型。在这种情况下，我们看到 f 检验非常显著，与我们的印象一致，即两组之间似乎确实存在差异(事实上我们知道存在差异，因为我们创建了数据)。







## 15.7 学习目标

阅读本章后，您应该能够:

*   描述符号测试背后的基本原理
*   描述如何使用 t 检验来比较一个平均值和一个假设值
*   使用双样本 t 检验比较两个配对或非配对组的平均值
*   描述如何使用方差分析来检验两个以上平均数之间的差异。





## 15.8 附录



### 15.8.1 作为线性模型的成对t检验

我们也可以根据一般的线性模型来定义成对t检验。为此，我们将每个受试者的所有测量结果作为数据点包含在内(在一个整洁的数据框内)。然后，我们在模型中包含一个变量，该变量对每个人的身份进行编码(在本例中，ID 变量包含每个人的主题 ID)。这被称为*混合模型*，因为它包括独立变量的影响以及个人的影响。标准的模型拟合过程`lm()`无法做到这一点，但我们可以使用一个流行的 R 包 *lme4* 中的`lmer()`函数来做到这一点，该包专门用于估计混合模型。公式中的`(1|ID)`告诉`lmer()`为`ID`变量的每个值(即数据集中的每个个体)估计一个单独的截距(这就是`1`所指的截距)，然后估计一个与 BP 时间点相关的公共斜率。

```
# compute mixed model for paired test

lmrResult <- lmer(BPsys ~ timepoint + (1 | ID), 
 data = NHANES_sample_tidy)
summary(lmrResult)
```

```
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: BPsys ~ timepoint + (1 | ID)
##    Data: NHANES_sample_tidy
## 
## REML criterion at convergence: 2895
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3843 -0.4808  0.0076  0.4221  2.1718 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  ID       (Intercept) 236.1    15.37   
##  Residual              13.9     3.73   
## Number of obs: 400, groups:  ID, 200
## 
## Fixed effects:
##                 Estimate Std. Error      df t value Pr(>|t|)    
## (Intercept)      121.370      1.118 210.361  108.55   <2e-16 ***
## timepointBPSys2   -1.020      0.373 199.000   -2.74   0.0068 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## tmpntBPSys2 -0.167
```

您可以看到，这向我们显示了一个 p 值，它非常接近使用`t.test()`函数计算的配对 t 检验的结果。





