R中的统计检验

R 作为数据分析平台,应该对各种统计测试有很好的支持。在这篇文章中,你将看到如何使用 R 的内置函数来运行统计测试。具体来说,你将学习:

  • 什么是 t 检验以及如何在 R 中进行
  • 什么是 F 检验以及如何在 R 中进行

让我们开始吧。

R 中的统计测试。
图片来源:Louis Reed。部分权利保留。

概述

这篇博文分为三部分;它们是:

  • 它们相同吗?
  • 双样本 t 检验(用于检验均值相等)
  • 其他统计测试

它们相同吗?

让我们考虑这样一个场景:你有一个回归问题,并且构建了两个回归模型。通过输入一些测试数据,你注意到模型**从不**完美匹配预期结果,但足够接近而可用。然而,是否存在一个模型比另一个模型更准确呢?

回归模型的准确性指标是误差,即模型的预测值与实际值之间的差距。通过比较两个模型的均方误差 (MSE),你可以判断 MSE 较低的模型更好。

但是,这里存在一个问题:任何指标的平均值都会受到样本集的影响,而这种随机性是不可避免的。因此,通常情况下,你不能期望两个模型的平均值相同。仅仅凭指标的微小差异就声称一个模型比另一个模型更好,这是不稳健的。

在统计学中,做出声明的严谨方法如下:首先假设一个假设,称为**零假设**。然后,假设一个与零假设不同的**备择假设**。接下来,根据数据证明零假设不成立;因此,你必须接受备择假设。

这是统计测试的典型工作流程。

双样本 t 检验(用于检验均值相等)

以下展示了如何在 R 中比较两组数据以判断它们的均值是否相等

这正式称为**双样本 t 检验**,因为你提供了两个数字向量 `a` 和 `b`。`t.test(a,b)` 函数的结果如下:

此检验的零假设是两个样本的真实均值相等。但从上面的结果可以看出,p 值非常小(低于 $2.2\times 10^{-16}$)。因此,你应该接受备择假设,即真实均值不相等。“真实均值”这个术语之所以被使用,是因为这是你无法确定,只能通过样本数据来近似的。

在这种情况下,哪个的均值更高?不幸的是,t 检验不会告诉你。但是 `t.test()` 函数的输出通过提供样本估计的均值来帮助你确定这一点。在本例中,第二个(向量 `b`)的均值为 30.48,更高。

这通常就是你应该使用 t 检验的方式。作为另一个例子,你可以对合成数据运行 t 检验

在上面的代码中,你可以看到你生成了随机数到向量 a 和 b 中,它们的均值略有不同。t 检验的结果如下:

尽管你知道这些数字是以不同的均值生成的,但由于差异如此之小且样本量不够大,t 检验的结果给出了 p 值为 0.1282,这不足以拒绝零假设。

通常,你会期望 p 值低于 0.05(有时是 0.01)才能拒绝零假设。这就是为什么设计零假设和备择假设很重要:它们不仅影响测试的计算方式,还让你倾向于零假设,直到有足够的证据可以排除它。

其他统计测试

上面的检验称为“双样本 t 检验”,因为你提供了两个样本。还有一个**单样本 t 检验**,如下所示:

上述代码的输出如下:

在这里,你可以看到该检验排除了零假设,因为它报告了一个小的 p 值。这意味着你不应该假设向量 `a` 中的数字均值为 0.5(因为你将 `mu=0.5` 传递给了 `t.test()` 函数)。R 在报告末尾显示均值约为 0.1。但这只是样本均值,是不可观测的真实均值的近似值。t 检验告诉你,真实均值为 0.5 的可能性很小。

单样本 t 检验有助于不比较两组数据,而是确认你的数据是否符合你的预期。

除了 t 检验,另一个相关且同样有用的检验是 F 检验。以下是一个示例:

上述代码的输出如下:

t 检验比较均值,而 F 检验比较方差。在 R 中,它使用 `var.test()` 函数执行。例如,当两个回归模型产生相似的 MSE 时,方差较小的模型更好,因为它在最坏的情况下更准确。

请注意,F 检验假设数据呈正态分布。在实践中,这种情况很常见。但如果此假设不成立,结果可能会失真。

在上面的示例中,向量 `a` 和 `b` 中的数据大小不同,并且使用 R 中的高斯随机数生成器生成,标准差不同但均值相同。F 检验结果可以发现它们不同,报告的 p 值为 0.00198,足以拒绝零假设。正式来说,F 检验的零假设是两组数据的方差比为 1:1。因此,你可以在输出末尾看到报告的方差比。

作为练习,你可以修改上面的程序,尝试生成不同大小的数据集,看看这些检验的表现如何。通常,如果你提供更多数据,统计检验会更有信心。因此,数据太少时,你会发现检验很难拒绝零假设。

进一步阅读

您可以从以下来源了解有关上述主题的更多信息:

网站

书籍

总结

在这篇文章中,你学习了如何在 R 中执行统计测试。具体来说,你学习了:

  • 统计学中的零假设和备择假设是什么
  • 如何使用 p 值来拒绝零假设
  • 如何使用 t 检验和 F 检验来比较两个数据集的均值和方差

6 条对“R 中的统计测试”的回复

  1. George 2023年9月13日下午5:29 #

    嗨,Jason!

    我想问你。在第二个例子中,

    a <- rnorm(100, mean=0, sd=1)
    b <- rnorm(150, mean=0.2, sd=1)
    print(t.test(a,b))

    你说

    "p 值为 0.1282,不足以拒绝零假设。"

    所以,我们必须接受零假设。我们为什么不接受它呢?

    • Adrian Tam
      Adrian Tam 2023年9月16日上午4:45 #

      你好 George,

      你默认应该接受零假设,除非你有强有力的证据来拒绝它。这就是统计测试通常期望你做的方式。因此,设计零假设及其备择假设很重要。此外,你必须设定一个关于需要多强证据的阈值。通常,我们期望 p 值低于 0.05 才算强。

      希望这有帮助。

  2. Rimitti 2023年9月22日下午5:30 #

    为什么使用 % 管道(例如在 Keras 中…)。
    Python 程序员会发现几乎相似的代码。

  3. SLC 2023年9月25日下午7:32 #

    @Rimitti

    但是,作者正在解释如何在 R 中操作。我相信在许多不同的语言中都有类似的方法来完成这些各种事情。

  4. Yaswanth 2023年10月25日下午2:53 #

    富有洞察力

  5. Vyde 2023年10月25日下午2:54 #

    有用的资源

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。