快乐方法学贝叶斯统计学-全-
快乐方法学贝叶斯统计学(全)
原文:
zh.annas-archive.org/md5/8a82bd96d926949bee96683f442068ce译者:飞龙
前言

生活中几乎所有的事情在某种程度上都是不确定的。这听起来可能有些夸张,但为了验证这一点,你可以做一个简单的实验。在一天开始时,写下你认为在接下来的半小时、一小时、三小时和六小时内会发生的事情。然后看看这些事情是否按你想象的那样发生。你会很快意识到,你的一天充满了不确定性。即使是像“我会刷牙”或“我会喝一杯咖啡”这样的可预测的事情,也可能由于某些原因而不如你预期那样发生。
对于生活中的大多数不确定性,我们通过计划一天的活动能够很好地应对。例如,尽管交通可能使你的早晨通勤时间比平时更长,但你可以相当准确地估计出需要几点钟离开家才能准时到达工作地点。如果你有一个非常重要的早会,你可能会早点出发以应对延误。我们都有一种与生俱来的本能,知道如何处理不确定的情况并推理不确定性。当你以这种方式思考时,你就开始以概率的方式思考了。
为什么要学习统计学?
本书的主题——贝叶斯统计学,帮助我们更好地推理不确定性,就像在学校学习逻辑帮助我们发现日常思维中的逻辑错误一样。正如我们刚才讨论的,几乎每个人在日常生活中都会面临不确定性,因此本书的受众相当广泛。已经使用统计学的数据科学家和研究人员将从对这些工具如何运作的更深入理解和直觉中受益。工程师和程序员将学到很多如何更好地量化他们必须做出的决策(我甚至曾使用贝叶斯分析来识别软件错误的原因!)。市场营销人员和销售人员可以在进行 A/B 测试、尝试理解他们的受众以及更好地评估机会的价值时,应用本书中的理念。任何做出高层决策的人都应该至少具备基本的概率意识,这样他们就能快速做出关于不确定决策的成本和收益的粗略估算。我希望这本书能成为 CEO 们在飞行途中学习的内容,以便在他们着陆时,能够打下足够扎实的基础,更好地评估涉及概率和不确定性的选择。
我真心相信,每个人都能从以贝叶斯方式思考问题中受益。通过贝叶斯统计,你可以利用数学来建模不确定性,这样在信息有限的情况下,你就能做出更好的选择。例如,假设你需要准时参加一个特别重要的会议,而你有两条不同的路线可选择。第一条路线通常较快,但经常会发生交通拥堵,可能导致巨大的延误。第二条路线一般较慢,但不太容易发生交通堵塞。你应该选择哪条路线?你需要什么样的信息来做出决定?你能有多大的把握做出正确的选择?即使只是稍微复杂一点的情况,也需要额外的思考和技巧。
通常,当人们想到统计学时,他们会想到科学家在研究一种新药,经济学家在跟踪市场趋势,分析师在预测下一次选举,棒球经理通过复杂的数学来组建最强的队伍,等等。虽然这些无疑是统计学的迷人应用,但理解贝叶斯推理的基础可以在日常生活的更多领域帮助你。如果你曾经对新闻中报道的某些新发现表示怀疑,熬夜在网上浏览,担心自己是否得了罕见疾病,或者与亲戚争论他们对世界的非理性看法,学习贝叶斯统计将帮助你更好地进行推理。
什么是“贝叶斯”统计?
你可能会好奇这些“贝叶斯”到底是什么。如果你曾经上过统计学课,那很可能是基于频率派统计学。频率派统计学基于一个观点,即概率表示某件事发生的频率。如果抛硬币正面朝上的概率是 0.5,那意味着在一次抛硬币的过程中,我们可以预期抛出一半个硬币的正面(如果抛两次硬币,我们可以预期得到一个正面,这样更有意义)。
另一方面,贝叶斯统计关注的是概率如何表示我们对一条信息的不确定性。从贝叶斯的角度来看,如果抛硬币正面朝上的概率是 0.5,那意味着我们对硬币正反面出现的概率是完全不确定的。像抛硬币这样的问题,频率派和贝叶斯方法似乎都合理,但当你在量化自己对下次选举中最喜欢的候选人获胜的信心时,贝叶斯的解释就显得更有意义。毕竟,选举只有一次,因此讨论最喜欢的候选人会有多频繁地获胜并没有太大意义。在进行贝叶斯统计时,我们只是在尽力准确描述在已知信息的基础上我们对世界的看法。
贝叶斯统计有一个特别好的特点,那就是因为我们可以简单地将其视为对不确定事物的推理,所以贝叶斯统计的所有工具和技巧都直观易懂。
贝叶斯统计学是关于观察你面临的问题,弄清楚你想如何用数学描述它,然后利用推理来解决它。没有神秘的测试给出你不确定的结果,没有必须记住的分布,也没有必须完美复制的传统实验设计。无论你想弄清楚一个新的网页设计是否能带来更多客户,还是你最喜欢的运动队是否会赢得下一场比赛,或者我们是否真的在宇宙中孤单,贝叶斯统计学都能让你通过简单的几条规则和一种新的问题解决方式,开始用数学推理来思考这些问题。
本书内容概览
下面是本书内容的简要概述。
第一部分:概率简介
第一章:贝叶斯思维与日常推理 本章介绍了贝叶斯思维,并展示了它与日常情况下批判性思考方法的相似性。我们将探讨根据你已经知道和相信的世界知识,窗外夜晚的亮光是 UFO 的概率。
第二章:衡量不确定性 在这一章中,你将通过抛硬币的例子来为你的不确定性分配实际的概率值:一个从 0 到 1 的数字,表示你对某件事情的信念的确定程度。
第三章:不确定性的逻辑 在逻辑学中,我们使用“与(AND)”、“非(NOT)”和“或(OR)”操作符来组合真假事实。事实证明,概率也有类似的这些操作符的概念。我们将研究如何推理选择最佳的交通方式去赴约,以及你收到交通罚单的几率。
第四章:创建二项概率分布 使用概率规则作为逻辑,在这一章中,你将构建自己的概率分布——二项分布,这可以应用于许多具有相似结构的概率问题。你将尝试预测在一个扭蛋卡牌游戏中,获得一张特定著名统计学家收藏卡的概率。
第五章:贝塔分布 在这一章中,你将了解你的第一个连续概率分布,并初步了解统计学与概率学的区别。统计学的实践涉及根据数据来推测未知的概率。在本章的例子中,我们将研究一个神秘的硬币投放盒以及赚的钱比你损失的钱多的几率。
第二部分:贝叶斯概率与先验概率
第六章:条件概率 在本章中,你将根据已有的信息来调整概率。例如,知道某人是男性还是女性,可以帮助我们估算他是否可能是色盲。你还将接触到贝叶斯定理,它可以帮助我们反转条件概率。
第七章:利用乐高理解贝叶斯定理 在这里,你将通过推理乐高积木的例子来更好地理解贝叶斯定理!本章将让你对贝叶斯定理在数学上的作用有一个空间上的直观理解。
第八章:贝叶斯定理的先验、似然与后验 贝叶斯定理通常被分为三部分,每一部分都在贝叶斯推理中发挥自己的作用。在本章中,你将了解它们的名称以及如何使用它们,探索一个看似入室盗窃的事件,分析它是否真的犯罪,或仅仅是几次巧合。
第九章:贝叶斯先验与概率分布 本章探讨如何利用贝叶斯定理来更好地理解《星球大战:帝国反击战》中的经典小行星场景,从而让你更深入理解贝叶斯统计中的先验概率。你还将看到如何将整个分布作为你的先验。
第三部分:参数估计
第十章:平均法与参数估计介绍 参数估计是我们用来为不确定值做出最佳猜测的方法。参数估计中最基本的工具就是简单地对你的观察结果求平均。在本章中,我们将通过分析降雪量来了解为什么这种方法有效。
第十一章:衡量数据的分布 找到均值是估计参数的有用第一步,但我们还需要一种方法来衡量我们的观察数据有多分散。在本章中,你将接触到平均绝对偏差(MAD)、方差和标准差,这些都是衡量观察数据分散程度的方法。
第十二章:正态分布 通过结合我们的均值和标准差,我们得到了一个非常有用的分布,用于进行估计:正态分布。在本章中,你将学习如何利用正态分布来不仅估计未知值,还能知道你对这些估计的确定性有多高。你将运用这些新技能来计算银行抢劫时的逃脱时间。
第十三章:参数估计工具:PDF、CDF 与分位数函数 在这里,你将学习 PDF、CDF 和分位数函数,帮助你更好地理解你所做的参数估计。你将使用这些工具来估算电子邮件转化率,并观察每个工具提供的见解。
第十四章:带有先验概率的参数估计 改进参数估计的最佳方法是包含先验概率。在这一章中,你将看到如何通过添加有关电子邮件点击率的先前成功信息来帮助我们更好地估计新电子邮件的真实转化率。
第十五章:从参数估计到假设检验:构建贝叶斯 A/B 测试 现在我们可以估计不确定的值,我们需要一种方法来比较两个不确定的值,从而检验一个假设。你将创建一个 A/B 测试来确定你对新电子邮件营销方法的信心。
第四部分:假设检验:统计学的核心
第十六章:贝叶斯因子与后验赔率简介:思想的竞争 曾经熬夜上网,怀疑自己可能得了一种超级罕见的疾病吗?这一章将介绍另一种测试思想的方法,帮助你确定自己应该有多担心!
第十七章:暮光区中的贝叶斯推理 你有多相信超能力?在这一章中,你将通过分析经典剧集暮光区中的一个情境,发展你自己的读心术。
第十八章:当数据不能说服你时 有时候,数据似乎不足以改变某人对信念的看法,或者帮助你赢得辩论。了解你如何改变朋友对你们意见不合问题的看法,以及为什么和你那好斗的叔叔争论不值得浪费时间!
第十九章:从假设检验到参数估计 在这一章中,我们将通过比较一系列假设,重新回到参数估计。你将用我们为简单假设检验所学的工具推导出第一个统计学例子——贝塔分布,用来分析一个特定游乐场游戏的公平性。
附录 A:R 语言快速入门 这个简短的附录将教你 R 编程语言的基础知识。
附录 B:足够的微积分以应付本书内容 在这里,我们将涵盖足够的微积分知识,让你对书中使用的数学感到舒适。
阅读本书的背景
本书的唯一要求是基础的高中代数。如果你翻到后面,会看到一些数学内容,但并不特别繁琐。我们将使用一些用 R 编程语言编写的代码,我会提供并讲解,所以无需提前学习 R 语言。我们也会涉及到微积分,但同样不要求有任何先前经验,附录部分将提供足够的信息来涵盖你所需的内容。
换句话说,本书的目标是帮助你以数学的方式思考问题,而无需过多的数学背景。当你读完本书后,你可能会发现自己不自觉地开始写下方程式来描述日常生活中的问题!
如果你恰好有扎实的统计学背景(即使是贝叶斯统计),我相信你仍然会在阅读本书时感到有趣。我一直认为,理解一个领域的最佳方式就是一次次地重温基础知识,每次都以不同的角度来看待。即使是作为本书的作者,在写作过程中我也发现了许多让我惊讶的事情!
现在开始你的冒险!
正如你很快就会看到的,除了非常有用之外,贝叶斯统计也可以非常有趣!为了帮助你学习贝叶斯推理,我们将通过乐高积木、阴阳魔界、星际大战等来进行探索。你会发现,一旦你开始用概率的思维方式来看待问题,你会发现在很多场合都在运用贝叶斯统计。本书旨在提供一个快速而愉快的阅读体验,翻开下一页,让我们一起开始贝叶斯统计的冒险吧!
第一部分
概率简介
第一章:贝叶斯思维与日常推理

在本章的第一部分,我将给你介绍贝叶斯推理,这一正式的过程帮助我们在观察到数据后更新我们对世界的信念。我们将通过一个情景进行讲解,探索如何将我们的日常经验映射到贝叶斯推理中。
好消息是,即使在拿起这本书之前,你已经是一个贝叶斯推理者了!贝叶斯统计学与人们自然使用证据来创造新信念并推理日常问题的方式密切相关;困难的部分是将这种自然的思维过程分解成一个严格的数学过程。
在统计学中,我们使用特定的计算和模型来更准确地量化概率。然而现在,我们暂时不使用任何数学或模型;我们只会帮助你熟悉基本概念,并通过直觉来确定概率。然后,在下一章中,我们将为概率赋予具体的数字。在本书的其余部分,你将学到如何利用严格的数学技巧正式建模并推理我们将在本章中讨论的概念。
推理关于奇怪的经历
一天晚上,你被窗外的一道强光惊醒。你从床上跳起来,望向窗外,看到天空中有一个巨大的物体,只能形容为飞碟形状。你通常是一个怀疑主义者,从来不相信外星人相遇,但被窗外的景象完全困惑,你不禁想,这会是 UFO 吗?!
贝叶斯推理涉及在面对某种情境时,逐步回顾你的思维过程,以识别何时你在做出概率假设,然后利用这些假设来更新你对世界的信念。在 UFO 的情境中,你已经完成了一次完整的贝叶斯分析,因为你:
-
观察到的数据
-
形成假设
-
基于数据更新你的信念
这种推理通常发生得非常迅速,以至于你没有时间分析自己的思维过程。你在没有质疑的情况下创造了一个新的信念:之前你并不相信 UFO 的存在,但在事件发生后,你更新了你的信念,现在认为自己看到了一架 UFO。
在本章中,你将专注于构建你的信念以及创造这些信念的过程,以便你可以更正式地审视它,我们将在接下来的章节中量化这一过程。
让我们逐步查看每一个推理步骤,从观察数据开始。
观察数据
基于数据建立信念是贝叶斯推理的关键组成部分。在你得出任何关于场景的结论之前(例如声称你看到的是 UFO),你需要理解你正在观察的数据,在这种情况下:
-
窗外的一个极其明亮的光点
-
空中悬停的飞碟形物体
根据你过去的经验,你会将看到的窗外景象描述为“令人惊讶”。用概率术语来说,我们可以将其写成:
P(窗外明亮的光点,天空中的飞碟形状物体) = 非常低
其中 P 代表 概率,而两个数据项列在括号内。你可以读这个公式为:“看到窗外明亮的光点和天空中飞碟形状物体的概率是非常低的。”在概率论中,当我们研究多个事件的联合概率时,会用逗号来分隔事件。请注意,这些数据并不包含任何关于 UFO 的具体内容;它们仅仅是你所观察到的现象——这将在后面变得很重要。
我们也可以考察单一事件的概率,表示为:
P(下雨) = 可能
这个公式可以读作:“下雨的概率是可能的。”
在我们的 UFO 情景中,我们正在确定两个事件同时发生的概率。这两个事件单独发生的概率会完全不同。例如,仅仅是明亮的光点就很可能是路过的车,所以单独发生这个事件的概率比与看到飞碟形状物体同时发生的概率要大(即便是看到飞碟形状物体,它本身仍然是令人惊讶的)。
那么我们是如何确定这个概率的呢?目前我们依赖的是直觉——也就是我们对这些事件发生的可能性的一般感知。在下一章中,我们将看到如何为我们的概率得出确切的数字。
保持先验信念和条件概率
你能够早晨醒来,泡一杯咖啡,开车去上班,而不需要做大量的分析,因为你对世界的运作有着先验信念。我们的先验信念是我们一生经历(即观察数据)中逐步建立起来的信念集合。你相信太阳会升起,因为自你出生以来,太阳每天都会升起。同样,你可能也有一个先验信念,那就是在十字路口,当对面交通的红灯亮起,而你的绿灯亮时,你可以安全地通过路口。如果没有先验信念,我们每晚都会惊恐地上床睡觉,担心太阳明天可能不会升起,并且在每个路口都会停下来仔细检查来车情况。
我们的先验信念认为,在地球上,同时看到窗外的明亮光点和飞碟形状的物体是一种罕见的现象。然而,如果你生活在一个远离地球的星球上,那里有大量的飞碟,并且经常有星际访客,那么在天空中看到光点和飞碟形状物体的概率会大大增加。
在一个公式中,我们在数据之后输入先验信念,用“|”分隔,如下所示:

我们可以读这个公式为:“根据我们在地球上的经验,看到窗外明亮的光点和天空中飞碟形状物体的概率是非常低的。”
概率结果被称为条件概率,因为我们正在条件化某个事件发生的概率,基于其他事件的存在。在这种情况下,我们是根据我们的先验经验对观察结果的概率进行条件化。
就像我们用P表示概率一样,我们通常用更短的变量名来表示事件和条件。如果你不熟悉阅读方程式,刚开始可能会觉得它们太简洁。不过,过一段时间后,你会发现,短的变量名有助于提高可读性,帮助你理解方程如何推广到更广泛的问题类别。我们将所有的数据赋值给一个变量,D:
D = 窗外的明亮光线,天上的飞碟形状物体
所以从现在开始,当我们提到数据集的概率时,我们会简单地说,P(D)。
同样,我们用变量X来表示我们的先验信念,如下所示:
X = 地球上的经验
我们现在可以将这个方程写作P(D | X)。这样写更简洁,也不改变其含义。
条件化多个信念
如果有多个变量会显著影响概率,我们也可以添加多条先验知识。假设今天是 7 月 4 日,你住在美国。从先前的经验来看,你知道烟花在独立日(7 月 4 日)是常见的。考虑到你在地球上的经验并且今天是 7 月 4 日,看到天空中有光的概率就不那么低,甚至飞碟形状的物体可能与某些烟花展示有关。你可以将这个方程改写为:

考虑到这两种经历,我们的条件概率从“非常低”变为“低”。
在实践中假设先验信念
在统计学中,我们通常不会显式地为我们所有现有的经验包含条件,因为这可以被假设。出于这个原因,在本书中我们不会为这个条件单独设置变量。然而,在贝叶斯分析中,重要的是要记住,我们对世界的理解总是基于我们之前在世界上的经验。因此,在本章剩余部分,我们会保留“地球上的经验”这一变量,提醒我们这一点。
形成假设
到目前为止,我们有了数据D(我们看到了一束明亮的光和一个飞碟形状的物体)和先验经验X。为了说明你所看到的,你需要形成某种假设——一种关于世界如何运作的模型,并做出预测。假设可以有多种形式。我们对世界的所有基本信念都是假设:
-
如果你相信地球自转,你会预测太阳会在特定时间升起和落下。
-
如果你认为你最喜欢的棒球队是最棒的,你会预测他们会赢得比其他队伍更多的比赛。
-
如果你相信占星学,你会预测星星的排列将描述人们和事件。
假设也可以更加正式或复杂:
-
一位科学家可能会假设某种治疗方法能够减缓癌症的生长。
-
一名金融领域的量化分析师可能有一个模型,用于预测市场的行为。
-
一个深度神经网络可能会预测哪些图像是动物,哪些是植物。
所有这些例子都是假设,因为它们有某种方式来理解世界,并利用这种理解来预测世界将如何运作。当我们在贝叶斯统计中思考假设时,我们通常关心的是它们如何预测我们观察到的数据。
当你看到证据并想到 UFO! 时,你正在形成一个假设。这个 UFO 假设很可能是基于你在先前经验中看过的无数电影和电视节目。我们可以将我们的第一个假设定义为:
H[1] = 一个 UFO 出现在我的后院!
但这个假设在预测什么呢?如果我们倒过来思考这个情境,或许会问:“如果你的后院真有一个 UFO,你会预期看到什么?”你可能会回答:“亮光和一个碟形物体。”因为 H[1] 预测了数据 D,当我们根据我们的假设来观察数据时,数据的概率增加了。正式地,我们将其写作:
P(D| H[1],X) >> P(D| X)
这个方程式说:“根据我相信这是一个 UFO 且基于我的先前经验,看到亮光和碟形物体出现在天上的概率,要比单纯看到亮光和碟形物体却没有任何解释的概率高得多[由双大于符号 >> 表示]。”在这里,我们使用了概率的语言来表明我们的假设解释了这些数据。
在日常语言中识别假设
很容易看出我们日常语言和概率之间的关系。例如,说某事是“令人惊讶的”,可能就意味着根据我们先前的经验,这件事的发生概率较低。说某事“合乎逻辑”,可能表明根据我们先前的经验,这件事的发生概率较高。尽管一旦指出来可能显得很明显,但概率推理的关键在于仔细思考如何解读数据、构建假设,并且在普通的日常场景中调整你的信念。如果没有 H[1],你会陷入困惑,因为你无法解释你所观察到的数据。
收集更多证据并更新你的信念
现在你有了数据和一个假设。然而,鉴于你作为一个怀疑论者的先前经验,这个假设仍然显得相当荒谬。为了提高你的知识状态并得出更可靠的结论,你需要收集更多的数据。这是统计推理的下一步,也是你直觉思维的下一步。
为了收集更多数据,我们需要进行更多的观察。在我们的情境中,你会透过窗户观察,看看能发现什么:
当你望向外面的明亮光线时,你注意到周围有更多的灯光。你还看到那个大型飞碟形状的物体是通过电线悬挂的,并且看到了一组摄影机团队。你听到一声响亮的拍手声和一个人喊道:“卡!”
你很可能已经瞬间改变了你对这个场景发生了什么的看法。你之前的推测是你可能目击到了飞碟。现在,有了这个新证据,你意识到看起来更像是有人在附近拍电影。
通过这种思考过程,你的大脑瞬间再次进行了复杂的贝叶斯分析!让我们分解一下你头脑中发生了什么,以便更仔细地推理事件。
你从最初的假设开始:
H[1] = 飞碟降落了!
单独来看,基于你的经验,这个假设极不可能:
P(H[1] | X) = 非常非常低
然而,鉴于你拥有的数据,这曾是你能想出来的唯一合理解释。当你观察到额外的数据时,你立刻意识到有另一种可能的假设——那就是附近正在拍摄电影:
H[2] = 在你窗外正在拍摄电影
单独来看,这个假设的概率也是直观上非常低的(除非你恰好住在电影制片厂附近):
P(H[2] | X) = 非常低
注意到我们将H[1]的概率设置为“非常非常低”,而将H[2]的概率设置为“非常低”。这与你的直觉相符:如果有人在没有任何数据的情况下走到你面前,问你:“你觉得哪个更可能,晚上在你附近出现飞碟,还是隔壁正在拍摄电影?”你会说拍电影的情景比飞碟出现更可能。
现在我们只需要一种方法来在改变信念时考虑新数据。
比较假设
你一开始接受了飞碟假设,尽管它不太可能,因为你最初没有其他解释。然而,现在有了另一种可能的解释——正在拍摄电影——因此你形成了一个替代假设。考虑替代假设的过程就是用你拥有的数据比较多种理论。
当你看到电线、摄影团队和更多的灯光时,你的数据发生了变化。你更新后的数据是:

在观察到这些额外的数据后,你改变了关于发生了什么的结论。让我们将这个过程分解为贝叶斯推理。你最初的假设H[1]给了你一种解释数据并结束困惑的方法,但随着你观察到更多数据,H[1]再也无法很好地解释这些数据了。我们可以这样写:
P(D[updated] | H[1], X) = 非常非常低
现在你有了一个新的假设H[2],它能更好地解释数据,写成如下:
P(D[updated] | H[2], X) >> P(D[updated] | H[1], X)
这里的关键是要明白,我们是在比较这些假设解释观察到的数据的程度。当我们说:“在第二个假设下,数据的概率比第一个假设大得多”时,我们的意思是我们观察到的情况由第二个假设解释得更好。这将我们带入贝叶斯分析的真正核心:你信念的考验是它们解释世界的能力。我们说一个信念比另一个信念更准确,因为它能更好地解释我们观察到的世界。
数学上,我们将这个概念表示为两种概率的比率:

当这个比率是一个大数字,比如 1,000 时,它意味着“H[2]比H[1]更能解释数据 1,000 倍”。因为H[2]比另一个H[1]更能解释数据,我们会把信念从H[1]更新到H[2]。这正是当你改变对你所观察到的现象可能解释时发生的事情。你现在相信你所看到的是窗外正在拍摄电影,因为这是一个更有可能解释你所观察到的所有数据。
数据启发信念;信念不应影响数据
最后需要强调的一点是,在所有这些例子中,唯一绝对不变的是你的数据。你的假设会改变,你对世界的经验,X,可能与其他人的不同,但数据,D,是所有人共享的。
考虑以下两个公式。第一个是我们在本章中一直使用的公式:
P(D | H,X)
我们可以理解为:“在给定我的假设和世界经验的情况下,数据的概率”,或者更简单地说,“我的信念如何解释我所观察到的情况。”
但在日常思维中常见的情况是相反的,通常是:
P(H | D,X)
我们可以这样理解:“在给定数据和我的世界经验的情况下,我的信念的概率”,或者更简单地说,“我所观察到的情况如何支持我的信念。”
在第一个情况下,我们根据收集到的数据和我们对世界的观察来改变我们的信念,这些数据和观察能更好地描述世界。在第二个情况下,我们收集数据来支持我们已有的信念。贝叶斯思维是关于改变自己的想法,并更新你对世界的理解。我们观察到的数据才是唯一真实的,因此我们的信念最终需要发生变化,直到它们与数据一致。
在生活中,你的信念也应该始终是可以改变的。
当摄制组收拾行李时,你注意到所有的面包车上都有军事标志。摄制组脱下外套,露出了军用制服,你听到有人说:“嗯,那应该能骗过任何看见的人……不错的想法。”
随着新证据的出现,你的信念可能会再次发生变化!
总结
让我们回顾一下你所学到的内容。你的信念始于你对世界的现有经验,X。当你观察到数据,D,它要么与你的经验一致,P(D | X) = 非常高,要么它让你感到惊讶,P(D | X) = 非常低。为了理解这个世界,你依赖于你对观察到事物的信念或假设,H。通常,一个新的假设可以帮助你解释那些让你感到惊讶的数据,P(D | H, X) >> P(D | X)。当你收集到新数据或提出新想法时,你可以创建更多的假设,H[1],H[2],H[3],……。当一个新的假设能比旧假设更好地解释数据时,你就会更新你的信念:

最后,你应该更加关注数据如何改变你的信念,而不是确保数据支持你的信念,P(H | D)。
在这些基础设置完成后,你已经准备好开始将数字引入混合中。在接下来的第一部分中,你将通过数学建模来精确确定你何时以及如何改变自己的信念。
练习
尝试回答以下问题,看看你对贝叶斯推理的理解有多好。解决方案可以在nostarch.com/learnbayes/找到。
-
使用你在本章中学到的数学符号,将以下陈述重写为方程:
-
下雨的概率很低
-
给定天阴的情况下,下雨的概率很高
-
给定下雨的情况下,你带伞的概率要远高于你一般带伞的概率。
-
-
将你在以下情境中观察到的数据组织成数学符号,使用我们在本章中讨论的技巧。然后,提出一个假设来解释这些数据:
你下班回家,发现前门开着,侧窗破了。当你走进屋内时,你立刻注意到你的笔记本电脑不见了。
-
以下情景为之前的情景添加了数据。展示这些新信息如何改变你的信念,并提出第二个假设来解释这些数据,使用你在本章中学到的符号。
一个邻里的孩子跑到你面前,连声道歉,说自己不小心把石头扔破了你的窗户。他们声称看到笔记本电脑后,不想让它被盗,于是打开了前门拿走它,而你的笔记本电脑现在安全地在他们家。
第二章:测量不确定性

在第一章中,我们回顾了一些直观使用的基本推理工具,用于理解数据如何影响我们的信念。我们留下了一个关键问题没有解决:我们如何量化这些工具?在概率论中,除了使用像非常低和高这样的术语描述信念,我们需要给这些信念分配真实的数字。这使我们能够创建关于我们对世界理解的定量模型。通过这些模型,我们可以看到证据如何改变我们的信念,决定何时应当改变我们的思维方式,并深入理解我们当前的知识状态。在本章中,我们将应用这一概念来量化一个事件的概率。
什么是概率?
概率的概念在我们日常语言中根深蒂固。每当你说类似“这似乎不太可能!”或者“如果这不是真的,我会很惊讶”或者“我不确定”,你实际上是在表达一个关于概率的观点。概率是我们对世界的信念有多强烈的度量。
在上一章中,我们使用了抽象的定性术语来描述我们的信念。为了真正分析我们如何发展和改变信念,我们需要通过更正式地量化P(X)来定义概率的具体含义——也就是我们有多强烈地相信X。
我们可以将概率看作是逻辑的延伸。在基本的逻辑中,我们有两个值,真和假,它们对应着绝对的信念。当我们说某事是真的时,这意味着我们完全确信它是正确的。虽然逻辑对许多问题有用,但我们很少会认为任何事情是绝对正确或绝对错误的;在我们做出的每个决定中,几乎总是存在某种程度的不确定性。概率让我们能够将逻辑扩展到处理真与假之间的不确定值。
计算机通常将真表示为 1,将假表示为 0,我们也可以使用这个模型来处理概率。P(X) = 0 相当于说X = 假,P(X) = 1 相当于X = 真。在 0 和 1 之间,我们有无限的可能值。一个更接近 0 的值意味着我们更确信某事是假的,而一个更接近 1 的值意味着我们更确信某事是真的。值得注意的是,0.5 的值意味着我们完全不确定某事是真的还是假的。
逻辑的另一个重要部分是否定。当我们说“不是正确的”时,我们的意思是错误的。同样地,说“不是错误的”就意味着正确的。我们希望概率的工作方式也相同,因此我们确保X的概率和X的否定概率之和为 1(换句话说,值要么是X,要么不是X)。我们可以通过以下公式来表达这一点:
P(X) + ¬P(X) = 1
注意
¬ 符号表示“否定”或“不是”。
使用这种逻辑,我们可以通过将其从 1 中减去来始终找到P(X)的否定。因此,例如,如果P(X) = 1,则其否定,1 - P(X),必须等于 0,符合我们的基本逻辑规则。如果P(X) = 0,则其否定 1 - P(X) = 1。
下一个问题是如何量化这种不确定性。我们可以任意选择值:比如 0.95 表示非常确定,0.05 表示非常不确定。然而,这并不比我们之前使用的抽象术语更有助于确定概率。相反,我们需要使用正式的方法来计算我们的概率。
通过计数事件结果来计算概率
计算概率最常见的方法是计数事件结果。我们有两组重要的结果。第一组是事件的所有可能结果。对于硬币抛掷来说,这将是“正面”或“反面”。第二组是您感兴趣的结果的计数。如果您决定正面意味着您赢了,那么您关心的结果就是涉及正面的那些(在单次硬币抛掷的情况下,只有一个事件)。您感兴趣的事件可以是任何事情:抛硬币并得到正面,感染流感,或者 UFO 降落在您卧室外。鉴于这两组结果——您感兴趣的和您不感兴趣的——我们只关心的是我们感兴趣的结果与所有可能结果的比率。
我们将使用硬币抛掷的简单示例,其中唯一可能的结果是硬币落在正面或落在反面。第一步是计算所有可能事件的数量,这种情况下只有两种:正面或反面。在概率理论中,我们使用Ω(大写希腊字母 omega)来表示所有事件的集合:
Ω = {正面, 反面}
我们想知道在单次硬币抛掷中得到正面的概率,写作P(正面)。因此,我们看我们关心的结果数,即 1,并将其除以总可能结果数,即 2:

对于单次硬币抛掷,我们可以看到,在两个可能结果中,我们关心的一个结果。因此,得到正面的概率只是:

现在让我们问一个更复杂的问题:当我们抛两枚硬币时,至少得到一个正面的概率是多少?我们的可能事件列表更加复杂;不仅仅是{正面, 反面},而是所有可能的正面和反面的对:
Ω = {(正面, 正面),(正面, 反面),(反面, 反面),(反面, 正面)}
要弄清楚至少得到一个正面的概率,我们看看我们的对数有多少与我们的条件匹配,这种情况下是:
{(正面, 正面),(正面, 反面),(反面, 正面)}
如您所见,我们关心的事件集合有 3 个元素,而我们可以获得 4 个可能的对。这意味着P(至少一个正面) = 3/4。
这些是简单的例子,但如果你能计数你关心的事件和所有可能的事件,你可以得出一个快速简便的概率。正如你所想的那样,随着例子变得更复杂,手动计算每个可能的结果变得不可行。解决这类更难的概率问题通常涉及一个叫做组合学的数学领域。在第四章中,我们将看到如何使用组合学来解决一个稍微复杂的问题。
将概率计算为信念的比例
计数事件对于物理对象很有用,但对于我们可能遇到的大多数现实生活中的概率问题来说,它并不是那么有效,比如:
-
“明天会下雨的概率有多大?”
-
“你觉得她是公司的总裁吗?”
-
“那是 UFO 吗!?”
几乎每天你都在根据概率做出无数决策,但如果有人问你“你认为自己能准时赶上火车的概率有多大?”你是无法使用刚才提到的方法来计算的。
这意味着我们需要另一种概率方法,用来推理这些更抽象的问题。举个例子,假设你正在和朋友闲聊随机话题。你的朋友问你是否听说过曼德拉效应,由于你没有听说过,他继续告诉你:“这是一种奇怪的现象,很多人错误地记得一些事件。例如,许多人记得纳尔逊·曼德拉在 80 年代死于监狱。但奇怪的是,他从监狱被释放,成为南非总统,并且直到 2013 年才去世!”你怀疑地转向你的朋友,说:“那听起来像是互联网流行心理学。我不认为有人真的记错了这个;我敢打赌,甚至连维基百科上都没有这个条目!”
在这种情况下,你想要衡量P(没有关于曼德拉效应的维基百科条目)。假设你处于一个没有手机信号的区域,因此无法快速验证答案。你对自己相信没有这样的条目充满信心,因此你想为这个信念分配一个高概率,但你需要通过给它分配一个从 0 到 1 之间的数字来形式化这个概率。你该从哪里开始呢?
你决定把你的钱放在你的嘴上,对你的朋友说:“这不可能是真的。这样吧:如果曼德拉效应没有条目,你给我 5 美元,如果有,我给你 100 美元!”打赌是一种实用的方式,可以表达我们对信念的强烈程度。你相信这个条目的存在是如此不可能,以至于如果你错了你会给朋友 100 美元,而如果你是对的则只从他们那里拿到 5 美元。因为我们在讨论的是关于我们信念的定量值,所以我们可以开始为你认为没有曼德拉效应维基百科条目的信念确定一个确切的概率。
使用赔率来确定概率
你朋友的假设是关于曼德拉效应有一篇维基百科文章:H[有冠词]。而你的替代假设是:H[无冠词]。
我们目前还没有具体的概率值,但你的赌注通过给出赌注的赔率,表达了你对假设的信心。赔率是表达信念的一种常见方式,表示如果你对事件结果判断错误,你愿意支付多少,而如果判断正确,你希望得到多少回报。例如,假设一匹马赢得比赛的赔率是 12 比 1。这意味着如果你支付$1 来下注,赛道方将在马匹获胜时支付你$12。虽然赔率通常表示为“m比n”,我们也可以将其看作一个简单的比率:m/n。赔率和概率之间存在直接关系。
我们可以将你的赌注表示为“100 比 5”。那么我们如何将其转换为概率呢?你的赔率代表了你认为没有文章的信心,比你认为有文章的信心要强多少倍。我们可以将其表示为你对没有文章的信心P(H[无冠词]),与朋友对有文章的信心P(H[有冠词])的比率,如下所示:

从这两个假设的比率中,我们可以看出,你对没有文章的假设的信心是你对朋友有文章假设的信心的 20 倍。我们可以利用这一事实,通过一些高中代数计算出你假设的确切概率。
求解概率
我们开始根据你的假设的概率来编写方程,因为这是我们感兴趣的部分:
P(H[无冠词]) = 20 × P(H[有冠词])
我们可以这样理解这个方程:“没有文章的概率是有文章概率的 20 倍。”
只有两种可能性:要么曼德拉效应有一篇维基百科文章,要么没有。因为我们的两个假设涵盖了所有的可能性,所以我们知道有冠词的概率就是 1 减去无冠词的概率,因此我们可以用P(H[无冠词])的值来替代P(H[有冠词]),如下面所示:
P(H[无冠词]) = 20 × (1 – P(H[有冠词]))
接下来,我们可以通过将括号内的两个部分都乘以 20 来展开 20 × (1 – P(H[无冠词])),得到:
P(H[无冠词]) = 20 – 20 × P(H[无冠词])
我们可以通过在方程两边都加上 20 × P(H[无冠词])来消去方程右侧的P(H[无冠词])项,从而将P(H[无冠词])单独留在方程左侧:
21 × P(H[无冠词]) = 20
然后我们可以将方程两边同时除以 21,最终得到:

现在,您有一个明确的、介于 0 和 1 之间的值,可以将其作为一个具体的、定量的概率,赋予您对曼德拉效应没有文章这一假设的信念。我们可以使用以下公式来概括将赔率转换为概率的过程:

在实际操作中,当你面临为一个抽象信念分配概率时,考虑你会为这个信念下注多少是非常有帮助的。你可能会以 1 比 10 亿的赔率下注太阳明天会升起,但你可能会为你最喜欢的棒球队获胜下注更低的赔率。无论哪种情况,你都可以使用我们刚才讲过的步骤计算该信念的精确概率。
抛硬币中的信念衡量
现在我们有了一种使用赔率确定抽象概念概率的方法,但这种方法的真正考验是它是否仍然适用于我们通过计数结果来计算的抛硬币。与其将抛硬币看作一个事件,不如将问题重新表述为“我有多强烈地相信下一次抛硬币是正面?”现在我们讨论的不是P(正面),而是关于抛硬币的假设或信念,P(H[正面])。
就像之前一样,我们需要一个替代假设来与我们的信念进行比较。我们可以说,替代假设就是不出现正面H[¬heads],但出现反面H[tails]的选项更接近我们的日常语言,所以我们将使用它。归根结底,我们最关心的还是合理性。然而,在这个讨论中,必须承认:
H[反面] = H[¬正面],并且P(H[反面]) = 1 – P(H[正面])
我们可以将如何建模我们的信念视为这些竞争假设之间的比率:

记住,我们希望将其理解为“我相信结果是正面比相信结果是反面要强多少倍?”就赌注而言,由于每个结果的概率相同,唯一公平的赔率是 1 比 1。当然,只要两个值相等,我们可以选择任何赔率:2 比 2,5 比 5,或 10 比 10. 这些赔率的比率都是相同的:

鉴于这些比率始终相同,我们可以简单地重复计算曼德拉效应没有维基百科文章的概率时所用的过程。我们知道正面和反面的概率之和必定为 1,并且我们知道这两个概率的比率也是 1。因此,我们有两个描述我们概率的方程:

如果你按照我们在推理曼德拉效应时所用的过程,解答 P(H[正面]) 问题,你应该会发现这个问题唯一的解答是 1/2。这正是我们通过计算事件概率的第一种方法得到的结果,这也证明了我们计算信念概率的方法足够稳健,可以用于计算事件的概率!
有了这两种方法,我们可以合理地问,在什么情况下应该使用哪一种方法。好消息是,由于我们可以看到它们是等价的,所以你可以根据具体问题选择最简单的方法。
总结
在本章中,我们探讨了两种不同类型的概率:事件的概率和信念的概率。我们将概率定义为我们关心的结果与所有可能结果的比例。
尽管这是概率的最常见定义,但它在信念上应用起来比较困难,因为大多数实际的日常概率问题没有明确的结果,因此不能直观地赋予离散的数值。
因此,为了计算信念的概率,我们需要确定我们对一个假设的信念比另一个假设强多少。一个很好的测试方法是你愿意为你的信念下注多少——例如,如果你和朋友打赌,如果朋友能证明 UFO 存在,你给他们 1000 美元,而如果朋友能证明 UFO 不存在,他们只需要给你 1 美元。在这种情况下,你是在说你相信 UFO 不存在的程度是你相信 UFO 存在的 1000 倍。
拿到这些工具后,你可以计算许多不同问题的概率。在下一章中,你将学习如何将逻辑的基本运算符 AND 和 OR 应用于我们的概率。但在继续之前,尝试运用本章所学的知识完成以下练习。
练习
尝试回答以下问题,以确保你理解我们如何将 0 到 1 之间的实际值分配给我们的信念。问题的解答可以在 nostarch.com/learnbayes/ 找到。
-
投掷两个六面骰子,得到大于 7 的值的概率是多少?
-
投掷三个六面骰子,得到大于 7 的值的概率是多少?
-
洋基队正在与红袜队比赛。你是个铁杆红袜队粉丝,并且赌朋友红袜队会赢这场比赛。如果红袜队输,你将支付朋友 30 美元,如果红袜队赢,你的朋友只需要支付你 5 美元。你直观上认为红袜队赢的概率是多少?
第三章:不确定性逻辑**

在第二章中,我们讨论了概率是逻辑中真值和假值的扩展,并且它们表现为介于 1 和 0 之间的值。概率的强大之处在于它能够表达在这些极端之间的无限多种可能的值。在本章中,我们将讨论基于这些逻辑运算符的逻辑规则如何也适用于概率。在传统逻辑中,有三个重要的运算符:
-
AND
-
OR
-
NOT
通过这三个简单的运算符,我们可以推理传统逻辑中的任何论点。例如,考虑以下陈述:如果下雨并且我出门,我需要带伞。这个陈述包含了一个逻辑运算符:AND。因为有了这个运算符,我们知道,如果下雨是真的,并且我出门也是真的,那么我就需要带伞。
我们也可以用其他运算符来表达这个陈述:如果没有下雨或者我没有出门,那么我就不需要带伞。在这种情况下,我们使用基本的逻辑运算符和事实来做出决定,判断何时需要和不需要带伞。
然而,这种类型的逻辑推理只有在我们的事实具有绝对的真或假值时才有效。这个案例是关于决定我是否现在需要带伞,因此我们可以确定它是否正在下雨,是否我要出门,从而很容易判断是否需要伞。假设我们改为问:“我明天需要带伞吗?”在这种情况下,我们的事实变得不确定,因为天气预报只给出了明天下雨的概率,而我可能不确定是否需要外出。
本章将解释我们如何扩展三个逻辑运算符以适应概率,使我们能够像在传统逻辑中推理事实一样推理不确定的信息。我们已经看到了如何为概率推理定义 NOT:
¬P(X) = 1 – P(X)
在本章的其余部分,我们将看到如何使用剩下的两个运算符——AND 和 OR,来结合概率,从而提供更准确和有用的数据。
将概率与 AND 结合
在统计学中,我们使用 AND 来谈论事件组合的概率。例如,概率为:
-
掷骰子得到 6 并且投掷硬币得到正面
-
它正在下雨并且你忘记了带伞
-
中头奖并且被闪电击中
为了理解如何为概率定义 AND,我们将从一个简单的例子开始,涉及到硬币和六面骰子。
求解两个概率的组合
假设我们想知道投掷硬币得到正面并且掷骰子得到 6 的概率。我们知道,每个事件单独发生的概率分别是:

现在我们想知道这两件事同时发生的概率,写成如下形式:
P(正面,六点) = ?
我们可以像在第二章中一样计算:我们数出我们关心的结果,并将其除以总结果数。
对于这个例子,假设这些事件是依次发生的。当我们投币时,我们有两个可能的结果,正面和反面,如图 3-1 所示。

图 3-1:将投币的两种可能结果可视化为不同路径
现在,对于每一个可能的投币结果,我们有六种可能的掷骰子结果,如图 3-2 所示。

图 3-2:将投币和掷骰子的可能结果可视化
使用这个可视化方法,我们可以直接数出可能的解答。投币和掷骰子一共可能有 12 种结果,而我们只关心其中的一种结果,所以:

现在我们为这个特定问题找到了一个解决方案。然而,我们真正想要的是一个通用规则,能够帮助我们计算任意数量的概率组合。让我们看看如何扩展我们的解决方案。
应用概率的乘法规则
我们将使用相同的问题进行这个例子:投币正面朝上并掷出 6 点的概率是多少?首先,我们需要找出投币正面朝上的概率。通过观察我们的分支路径,我们可以计算出在给定概率下有多少条路径分裂开来。我们只关心那些包含正面的路径。因为正面朝上的概率是 1/2,所以我们将一半的可能性排除掉。然后,如果我们只看剩下的正面路径,我们可以看到要获得我们想要的结果:在六面骰子上掷出 6 点的概率是 1/6。在图 3-3 中,我们可以将这个推理过程可视化,并看到只有一个我们关心的结果。

图 3-3:可视化正面朝上和掷出 6 点的概率
如果我们将这两个概率相乘,我们可以看到:

这正是我们之前得到的答案,但我们并没有计算所有可能的事件,而是只计算了我们关心的事件的概率,通过沿着分支进行计算。对于这样一个简单的问题,通过视觉呈现是相当容易的,但展示这个过程的真正价值在于它阐明了一个关于将概率与“且”(AND)结合的通用规则:
P(A,B) = P(A) × P(B)
因为我们在相乘结果,也叫做取这些结果的乘积,我们称之为概率的乘积规则。
这个规则可以扩展以包括更多的概率。如果我们将P(A,B)看作是一个单一的概率,我们可以通过重复这个过程,将其与第三个概率P(C)结合起来:
P(P(A,B),C) = P(A,B) × P(C) = P(A) × P(B) × P(C)
所以我们可以使用乘积法则将无限多的事件组合起来,以得到最终的概率。
示例:计算迟到的概率
让我们看一个使用乘积法则的例子,这比掷骰子或抛硬币稍微复杂一些。假设你答应和朋友在城对面 4:30 见面喝咖啡,并打算乘坐公共交通工具。现在是 3:30。幸运的是,你所在的车站既有火车也有公交车可以带你去目的地:
-
下一班公交车将在 3:45 到达,并需要 45 分钟才能带你到咖啡店。
-
下一班火车将在 3:50 到达,30 分钟后会把你送到离目的地步行 10 分钟的地方。
火车和公交车都会在 4:30 准时到达。因为时间很紧张,任何延误都会导致你迟到。好消息是,由于公交车比火车早到,如果公交车晚点而火车准时,你仍然可以按时到达。如果公交车准时而火车晚点,你也能按时到达。唯一会导致你迟到的情况是火车和公交车都晚点到达。你如何计算迟到的概率呢?
首先,你需要确定火车晚点和公交车晚点的概率。假设当地的公共交通部门发布了这些数据(在本书后面,你将学会如何从数据中估算这些概率)。
P(迟到[火车]) = 0.15
P(迟到[公交车]) = 0.2
已发布的数据告诉我们,火车 15%的时间会迟到,公交车 20%的时间会迟到。由于你只有在火车和公交车都迟到的情况下才会迟到,因此我们可以使用乘积法则来解决这个问题:
P(迟到) = P(迟到[火车]) × P(迟到[公交车]) = 0.15 × 0.2 = 0.03
尽管公交车或火车迟到的概率相当合理,但它们都迟到的概率要低得多,仅为 0.03。我们也可以说,两者都迟到的概率为 3%。通过这个计算,你可以稍微放松一点,不必那么担心迟到。
用 OR 组合概率
逻辑中另一个重要的规则是用 OR 组合概率,以下是一些例子:
-
感冒 或 得流感
-
抛硬币正面朝上 或 投骰子得到 6 点
-
爆胎 或 没油
一个事件或另一个事件发生的概率稍微复杂一些,因为事件可以是互斥的,也可以不是互斥的。如果一个事件发生意味着其他事件不能发生,那么这些事件就是互斥的。例如,掷骰子的结果是互斥的,因为一次掷骰子不能同时得到 1 和 6。但是,假设一场棒球比赛如果下雨或教练生病就会取消;这些事件不是互斥的,因为完全有可能教练生病并且下雨。
计算互斥事件的 OR 概率
结合两个事件使用“或”的过程在逻辑上是直观的。如果有人问你:“掷硬币得到正面或反面的概率是多少?”你会回答:“1。”我们知道:

直观地,我们可能会将这些事件的概率相加。我们知道这样做是有效的,因为正面和反面是唯一的可能结果,而所有可能结果的概率必须加起来等于 1。如果所有可能事件的概率加起来不等于 1,那么就会有缺失的结果。那么我们如何知道如果总和小于 1,必定会有缺失的结果呢?
假设我们知道正面概率是P(正面) = 1/2,但有人声称反面的概率是P(反面) = 1/3。我们还知道,从之前的内容来看,不出现正面的概率必须是:

由于不出现正面的概率是 1/2,而声称反面概率只有 1/3,要么缺少了某个事件,要么我们对于反面的概率计算是错误的。
从这里我们可以看出,只要事件是互斥的,我们可以将每个可能事件的概率相加,从而得到任一事件发生的概率,即计算一个事件或另一个事件的概率。另一个例子是掷骰子。我们知道掷出 1 的概率是 1/6,掷出 2 的概率也是 1/6:

所以我们可以执行相同的操作,将两个概率相加,并看到掷出 1 或 2 的综合概率是 2/6,或者说 1/3:

这再次是合乎直觉的。
这个加法规则仅适用于互斥事件的组合。从概率学的角度来看,互斥意味着:
P(A) 和 P(B) = 0
也就是说,正面和反面同时发生的概率是 0。我们看到这个例子适用:
-
不可能一次投掷一枚硬币既得到正面又得到反面。
-
在一次掷骰子中,不可能同时掷出 1 和 2。
要真正理解如何结合“或”运算的概率,我们需要看看事件不是互斥的情况。
使用非互斥事件的加法规则
继续使用掷骰子和抛硬币的例子,我们来看掷出正面或掷出 6 的概率。许多概率初学者可能天真地认为在这种情况下加法规则也适用。既然我们知道P(正面) = 1/2 和 P(六) = 1/6,一开始似乎很合理地认为这两事件发生的概率就是 4/6。然而,当我们考虑到掷出正面或掷出小于 6 的数字时,情况就变得明显不对了。因为P(小于六) = 5/6,将这些概率加在一起得到 8/6,显然大于 1!由于概率必须介于 0 和 1 之间,这就违反了概率的基本规则,所以我们肯定在某处犯了错误。
问题在于掷出正面和掷出 6 并不是互斥事件。正如我们在本章早些时候所知道的,P(正面, 六) = 1/12。因为这两事件同时发生的概率不为 0,所以它们根据定义不是互斥事件。
对于非互斥事件来说,概率加法不起作用的原因是,这样做会重复计算那些两者同时发生的事件。作为重复计算的一个例子,我们来看所有包含正面的掷硬币和掷骰子的结果:
正面 — 1
正面 — 2
正面 — 3
正面 — 4
正面 — 5
正面 — 6
这些结果代表了 12 种可能结果中的 6 种,这是我们所预期的,因为P(正面) = 1/2。现在让我们看看所有包含掷出 6 的结果:
正面 — 6
反面 — 6
这些结果代表了 12 种可能结果中的 2 种,将导致我们掷出 6,这也是我们所预期的,因为P(六) = 1/6。由于有六种结果满足抛出正面的条件,且有两种满足掷出 6 的条件,我们可能会认为有八种结果代表得到正面或掷出 6。然而,我们会重复计算,因为正面 — 6出现在两个列表中。实际上,只有 12 种结果中有 7 种是唯一的。如果我们天真地将P(正面)和P(六)相加,就会导致重复计算。
为了纠正我们的概率计算,我们必须将所有概率加起来,然后减去两事件同时发生的概率。这就引出了我们用“或”结合非互斥事件概率的规则,称为概率的和法则:
P(A) 或 P(B) = P(A) + P(B) – P(A,B)
我们将每个事件发生的概率相加,然后减去两事件同时发生的概率,以确保我们不会重复计算这些概率,因为它们同时属于P(A)和P(B)。因此,使用我们的掷骰子和抛硬币例子,掷出小于 6 的数字或抛出正面的概率是:

让我们来看一个最终的“或”例子,来真正理解这个概念。
例子:计算收到重罚的概率
想象一下一个新的情境。你在公路旅行时因为超速被拦下。你意识到自己已经有一段时间没有被拦下了,可能忘记把新注册证或新保险卡放进手套箱。如果这两样东西中有任何一件丢失,你将会收到更贵的罚单。在你打开手套箱之前,你如何给自己赋予一个概率,表示你可能忘记了其中一张卡,并因此收到更高的罚单?
你对自己把注册证放进车里很有信心,所以你给注册证在车里的概率赋值为 0.7。然而,你也相当确定自己把保险卡留在了家里的柜台上,所以你认为新保险卡在车里的几率只有 0.2。因此,我们知道:
P(registration) = 0.7
P(insurance) = 0.2
然而,这些值是你确实把这些东西放进手套箱里的概率。你担心的是它们是否丢失。为了计算物品丢失的概率,我们只需要使用否定:
P(Missing[reg]) = 1 – P(registration) = 0.3
P(Missing[ins]) = 1 – P(insurance) = 0.8
如果我们试图使用加法法则,而不是完整的加法规则来计算联合概率,我们会看到我们的概率大于 1:
P(Missing[reg]) + P(Missing[ins]) = 1.1
这是因为这些事件是非互斥的:完全有可能你两张卡都忘了。因此,使用这种方法我们会重复计算。也就是说,我们需要找出两张卡都丢失的概率,这样我们才能减去它。我们可以使用乘积法则来做到这一点:
P(Missing[reg], Missing[ins]) = 0.24
现在我们可以使用加法法则来确定其中一张卡丢失的概率,就像我们计算掷硬币正面朝上或掷骰子得到 6 点的概率一样:
P(Missing) = P(Missing[reg]) + P(Missing[ins]) – P(Missing[reg], Missing[ins]) = 0.86
在手套箱中有 0.86 的概率丢失某一重要文件,你应该在迎接警察时表现得格外友好!
总结
在这一章中,你通过添加“与”运算和“或”运算结合概率的规则,开发出了一个完整的不确定性逻辑。让我们回顾一下到目前为止我们所覆盖的逻辑规则。
在第二章中,你学到概率是按 0 到 1 的尺度来衡量的,0 表示假(肯定不会发生),而 1 表示真(肯定会发生)。接下来的重要逻辑规则涉及将两个概率通过“与”运算结合起来。我们使用乘积法则,它简单地指出,要计算两个事件同时发生的概率 P(A) 和 P(B),只需要将它们相乘:
P(A,B) = P(A) × P(B)
最后的规则涉及通过求和规则来合并概率。求和规则的难点在于,如果我们加上了非互斥的概率,就会对同时发生的情况进行重复计算,因此必须减去两者同时发生的概率。求和规则通过乘积规则来解决这个问题(记住,对于互斥事件,P(A, B) = 0):
P(A OR B) = P(A) + P(B) – P(A,B)
这些规则,以及第二章中涉及的规则,使我们能够表达广泛的概率问题。在本书的剩余部分,我们将以这些规则为基础进行概率推理。
练习
尝试回答以下问题,确保你理解概率逻辑规则的应用。解答可以在 nostarch.com/learnbayes/ 找到。
-
在一次 20 面骰的投掷中,连续三次掷到 20 的概率是多少?
-
天气预报说明天有 10%的降雨几率,而你出门时有一半的机会忘带雨伞。那么你明天在没有带伞的情况下遇到雨的概率是多少?
-
生鸡蛋有 1/20,000 的概率含有沙门氏菌。如果你吃了两个生鸡蛋,吃到含有沙门氏菌的生鸡蛋的概率是多少?
-
在两次投掷硬币时翻到两个正面,或者在三次六面骰掷骰时掷到三个 6 的概率是多少?
第四章:创建一个二项概率分布

在第三章中,你学习了与常见逻辑运算符:与(AND)、或(OR)和非(NOT)对应的一些基本概率规则。在本章中,我们将使用这些规则构建我们的第一个概率分布,一种描述所有可能事件及其发生概率的方式。概率分布通常通过可视化来帮助更广泛的观众理解统计学。我们将通过定义一个泛化特定概率问题组的函数来得到我们的概率分布,这意味着我们将创建一个分布来计算一系列情境的概率,而不仅仅是某个特定的案例。
我们通过观察每个问题的共性元素并将其抽象化来进行泛化。统计学家使用这种方法来使解决各种问题变得更加容易。当问题非常复杂,或者一些必要的细节可能未知时,这种方法尤其有用。在这些情况下,我们可以使用已知的概率分布作为我们无法完全理解的现实世界行为的估计。
概率分布对于提出关于可能值范围的问题也非常有用。例如,我们可能会使用概率分布来确定一个顾客年收入在 30,000 到 45,000 美元之间的概率,成人身高超过 6 英尺 10 英寸的概率,或者访问某个网页的用户中,25%到 35%的人会注册账户的概率。许多概率分布涉及非常复杂的方程,可能需要一些时间才能习惯。然而,所有的概率分布方程都是从前面章节中涵盖的基本概率规则推导出来的。
二项分布的结构
你将在这里学习的分布是二项分布,用于计算在给定试验次数和成功结果的概率下,某个成功结果出现的概率。术语二项中的“bi”指的是我们关心的两种可能结果:事件发生和事件不发生。如果有超过两种结果,则该分布称为多项式分布。遵循二项分布的示例问题包括:
-
在三次掷硬币中掷出两次正面
-
购买 100 万张彩票并至少中一次
-
在 10 次掷 20 面骰子中掷出少于三个 20
这些问题都具有相似的结构。事实上,所有二项分布都涉及三个参数:
k 我们关心的结果数
n 总试验次数
p 事件发生的概率
这些参数是我们分布的输入。例如,当我们计算在三次掷硬币中出现两次正面的概率时:
-
k = 2,我们关心的事件数,在此例中为翻到正面
-
n = 3,硬币投掷的次数
-
p = 1/2,投掷硬币时翻到正面的概率
我们可以构建一个二项式分布来泛化这种类型的问题,从而轻松解决任何涉及这三个参数的问题。表达此分布的简写符号如下:
B(k;n, p)
对于三个硬币投掷的例子,我们可以写作 B(2; 3, 1/2)。其中 B 是 二项式 分布的简称。注意,k 与其他参数之间用分号分隔。这是因为当我们讨论一个值的分布时,通常关注的是固定 n 和 p 下所有 k 的值。因此,B(k; n, p) 表示我们分布中的每一个值,但整个分布通常仅用 B(n, p) 来表示。
让我们更仔细地看看,看看如何构建一个函数,使我们能够将所有这些问题泛化到二项式分布中。
理解并抽象化我们问题的细节
看到如何通过创建分布来简化概率计算是最好的方法之一,首先从一个具体的例子入手并尝试解决它,然后抽象出尽可能多的变量。我们将继续以计算三次硬币投掷中翻到两个正面的概率为例。
由于可能的结果数量较小,我们可以仅通过纸和笔快速计算出我们关心的结果。在三次投掷中有三种可能的结果是两个正面:
HHT,HTH,THH
现在,可能会有冲动通过列举所有其他可能的结果并将我们关心的结果数除以可能结果的总数(在此例中为 8)来解决这个问题。这种方法对于仅仅解决这个问题是可行的,但我们在这里的目标是解决任何涉及从若干次试验中期望一组结果的概率问题。如果我们不进行泛化,而只解决这个问题实例,那么改变这些参数将意味着我们必须重新解决新的问题。例如,仅仅问,“在 四 次硬币投掷中获得两个正面的概率是多少?”就意味着我们需要提出另一个独特的解决方案。相反,我们将使用概率规则来推理这个问题。
为了开始泛化,我们将把这个问题分解成可以立即解决的小部分,并将这些部分转化为可管理的方程式。在构建方程时,我们将它们结合起来创建一个二项式分布的通用函数。
首先需要注意的是,我们关心的每一个结果将具有 相同 的概率。每个结果只是其他结果的 排列,或重新排序:
P({正面,正面,反面}) = P({正面,反面,正面}) = P({反面,正面,正面})
由于这一点,我们将简单地称之为:
P(期望结果)
有三个结果,但只有一个可能发生,我们不关心是哪一个。而且由于只有一个结果可能发生,我们知道这些结果是互斥的,表示为:
P({正面,正面,反面},{正面,反面,正面},{反面,正面,正面}) = 0
这使得使用概率的加法规则变得简单。现在我们可以将其总结为:
P({正面,正面,反面} 或 {正面,反面,正面} 或 {反面,正面,正面}) = P(期望结果) + P(期望结果) + P(期望结果)
当然,把这三者加起来就等于:
3 × P(期望结果)
我们已经找到了一个简洁的方式来表示我们关心的结果,但就推广而言,问题在于值 3 是特定于此问题的。我们可以通过简单地将 3 替换为一个叫做N[结果]的变量来解决这个问题。这样,我们得到了一个相当不错的推广:
B(k;n, p) = N[结果] × P(期望结果)
现在我们需要解决两个子问题:如何计算我们关心的结果数量,以及如何确定单个结果的概率。一旦我们弄清楚这些问题,就大功告成了!
使用二项系数计数我们的结果
首先,我们需要弄清楚给定的k(我们关心的结果)和n(试验次数)有多少种结果。对于小的数字,我们可以简单地进行计数。如果我们看四次正面出现在五次抛硬币中的情况,我们知道我们关心的结果有五种:
HHHHT, HTHHH, HHTHH, HHHTH, HHHHT
但这并不需要太长时间就变得难以手动完成——例如,“在三次掷骰子中掷出两个 6 点的概率是多少?”
这仍然是一个二项问题,因为只有两个可能的结果:掷出 6 点或未掷出 6 点,但有更多事件可以算作“未掷出 6 点”。如果我们开始列举,很快就会发现,这对一个仅涉及三次骰子投掷的小问题来说也变得繁琐:
6 – 6 – 1
6 – 6 – 2
6 – 6 – 3
. . .
4 – 6 – 6
. . .
5 – 6 – 6
. . .
很明显,列举所有可能的解法对于即使是相对简单的问题也无法扩展。解决方案是组合数学。
组合数学:使用二项系数进行高级计数
如果我们查看一个叫做组合数学的数学领域,我们可以对这个问题有些见解。这只是一个高级计数的名称。
在组合数学中,有一个特殊的运算,叫做二项系数,它表示计算从n中选择k的方式数量——也就是从总试验次数中选择我们关心的结果。二项系数的表示法如下:

我们读这个表达式为“n选择k”。所以,对于我们的例子,“在三次掷骰子中选择两个正面”的表示方式是:

这个运算的定义是:

!表示 阶乘,它是从 1 到包含符号“!”之前所有数字的积,因此 5! = (5 × 4 × 3 × 2 × 1)。
大多数数学编程语言使用 choose() 函数表示二项式系数。例如,在数学语言 R 中,我们可以使用以下调用来计算三次抛硬币中出现两个正面的二项式系数:
choose(3,2)
>>3
通过这种通用的运算方式来计算我们关心的结果数,我们可以像这样更新我们的通用公式:

回想一下,P(期望结果) 是在三次抛硬币中获得两个正面的所有组合的概率。在前面的方程中,我们将这个值作为占位符使用,但我们实际上并不知道如何计算这个值。我们拼图中的唯一缺失部分是求解 P(单一结果)。之后,我们将能够轻松推广到一个完整的问题类别!
计算期望结果的概率
我们需要弄清楚的就是 P(期望结果),即我们关心的所有可能事件的概率。到目前为止,我们一直将 P(期望结果) 作为一个变量来帮助组织我们对这个问题的解答,但现在我们需要确切知道如何计算这个值。让我们看看五次抛硬币中出现两个正面的概率。我们将专注于符合此条件的单一结果:HHTTT。
我们知道,在单次抛硬币中,正面朝上的概率是 1/2,但为了推广这个问题,我们将其表示为 P(正面),这样我们就不会被固定的概率值限制住。利用上一章的乘积法则和否定法则,我们可以将这个问题描述为:
P(正面, 正面, 不是正面, 不是正面, 不是正面)
或者,更冗长地说:“抛出正面,正面,非正面,非正面,非正面的概率。”
否定法则告诉我们,“不是正面”可以表示为 1 – P(正面)。然后,我们可以使用乘积法则来解决其余部分:
P(正面, 正面, 不是正面, 不是正面, 不是正面) = P(正面) × P(正面) × (1 – P(正面)) × (1 – P(正面)) × (1 – P(正面))
让我们通过使用指数来简化乘法运算:
P(正面)² × (1 – P(正面))³
如果我们把这些都结合起来,我们可以看到:
(五次抛硬币中有两个正面) = P(正面)² × (1 – P(正面))³
你可以看到,P(正面)² 和 1 – P(正面)³ 的指数正好是该情景中正面和非正面的数量。这些等同于 k,我们关心的结果数,以及 n – k,即实验次数减去我们关心的结果数。我们可以将所有这些结合起来,创建一个更加通用的公式,消除特定于此案例的数字:

现在让我们将其推广到任何概率,而不仅仅是正面,通过将P(正面)替换为p。这样我们就得到了k的通用解,即我们关心的结果数;n,实验次数;以及p,单个结果的概率:

现在我们有了这个方程,就可以解决任何与抛硬币结果相关的问题。例如,我们可以计算 24 次抛硬币中恰好得到 12 个正面的概率,计算方法如下:

在你学习二项分布之前,解决这个问题会困难得多!
这个公式是二项分布的基础,称为概率质量函数(PMF)。名称中的质量部分来源于我们可以使用它来计算任何给定k值的概率大小,使用固定的n和p,因此这就是我们概率的“质量”。
例如,我们可以将 10 次抛硬币中所有可能的k值代入我们的概率质量函数(PMF)并可视化所有可能值下的二项分布,如图 4-1 所示。

图 4-1:条形图显示了在 10 次抛硬币中得到 k 的概率
我们还可以查看相同的分布,了解在掷一个六面骰子 10 次时得到 6 的概率,如图 4-2 所示。

图 4-2:掷一个六面骰子 10 次得到 6 的概率
如你所见,概率分布是一种概括整个问题类别的方法。现在我们已经有了分布,我们就拥有了一种强大的方法来解决广泛的问题。但请始终记住,我们是根据简单的概率规则推导出这个分布的。让我们来验证一下。
示例:抽卡游戏
抽卡游戏是一种特别在日本流行的手机游戏类型,玩家可以用游戏内货币购买虚拟卡片。问题在于所有卡片都是随机发放的,因此当玩家购买卡片时,他们无法选择收到哪张卡片。由于并非所有卡片都同样有吸引力,玩家会被鼓励继续从卡堆中抽卡,直到抽到他们想要的卡片,这种玩法与老丨虎丨机类似。我们将看到二项分布如何帮助我们在一个虚拟的抽卡游戏中决定是否承担某个风险。
这是一个情境。你有一款新的手机游戏,贝叶斯战士。当前你可以从中抽取的卡池称为卡池。卡池中包含一些普通卡片和一些价值更高的特色卡片。正如你可能猜到的,贝叶斯战士中的所有卡片都是著名的概率学家和统计学家。这个卡池中的顶级卡片如下,每张卡片都有其相应的抽中概率:
-
Thomas Bayes: 0.721%
-
E. T. Jaynes: 0.720%
-
Harold Jeffreys: 0.718%
-
Andrew Gelman: 0.718%
-
John Kruschke: 0.714%
这些特色卡片只占总概率的 0.03591。由于概率总和必须为 1,抽到那些不太受欢迎的卡片的机会就是另外的 0.96409。此外,我们将从中抽取的卡片堆视为几乎无限大,这意味着抽取一张特定卡片不会改变抽到其他卡片的概率——你抽到的卡片不会从卡片堆中消失。这与从一副未洗牌的实体卡牌中抽取卡片的情况不同。
你真的想要得到 E. T. Jaynes 卡片,以完成你的精英贝叶斯团队。不幸的是,你需要购买游戏内货币——贝叶斯币,才能抽卡。抽一张卡需要花费一枚贝叶斯币,但现在有一个特别优惠,允许你以仅 10 美元购买 100 枚贝叶斯币。这是你愿意在这款游戏上花费的最大金额,仅仅在你至少有 50%的机会抽到你想要的卡片时才会购买。这意味着你只有在获得那张精彩的 E. T. Jaynes 卡的概率大于或等于 0.5 时,才会购买贝叶斯币。
当然,我们可以将获得 E. T. Jaynes 卡的概率代入我们的二项分布公式中,看看结果如何:

我们的结果小于 0.5,因此我们应该放弃。但等等——我们忘记了一件非常重要的事情!在前面的公式中,我们计算的只是得到恰好一张E. T. Jaynes 卡的概率。但我们可能会抽到两张 E. T. Jaynes 卡,甚至三张!所以我们真正想知道的是得到一张或更多张的概率。我们可以将其写成:

以此类推,对于你可以用贝叶斯币抽取的 100 张卡片,但这个过程会变得非常繁琐,因此我们使用了特殊的数学符号Σ(希腊字母大写 Sigma):

Σ是求和符号;底部的数字表示我们开始的值,顶部的数字表示我们结束的值。所以,前面的方程式实际上是对每个从 1 到n的k值,使用p为 0.00720 的二项分布进行求和。
我们已经使得写下这个问题变得更简单,但现在我们需要实际计算这个值。与其拿出计算器解决这个问题,现在正是开始使用 R 语言的好时机。在 R 中,我们可以使用pbinom()函数自动求和我们 PMF 中所有k的值。图 4-3 展示了如何使用pbinom()来解决我们的具体问题。

图 4-3:使用 pbinom()函数解决我们的贝叶斯战士问题
pbinom()函数需要三个必选参数和一个可选的第四个参数lower.tail(默认为TRUE)。当第四个参数为TRUE时,第一个参数会计算所有小于或等于该参数的概率。当lower.tail设置为FALSE时,它会计算严格大于第一个参数的概率。通过将第一个参数设置为0,我们是在计算获得一个或多个 E. T. Jaynes 卡片的概率。我们将lower.tail设置为FALSE,因为这意味着我们希望得到大于第一个参数的值(默认情况下,我们得到的是小于第一个参数的值)。下一个值表示n,即试验次数,第三个参数表示p,即成功的概率。
如果我们将我们的数字代入,并如图 4-3 所示,将lower.tail设置为FALSE,R 将为你的 100 贝叶斯币计算出获得至少一个E. T. Jaynes 卡片的概率:

尽管获得恰好一个E. T. Jaynes 卡片的概率只有 0.352,但获得至少一个E. T. Jaynes 卡片的概率足够高,值得一试。所以,花 10 美元完成你的精英贝叶斯学者卡片收藏吧!
总结
在本章中,我们看到可以通过使用概率规则(结合组合学中的一个技巧)创建一个通用规则,解决一个类别的问题。任何涉及想要确定在n次试验中出现k次结果的概率的问题,其中结果的概率为p,我们都可以通过二项分布轻松解决:

可能令人惊讶的是,这条规则实际上只涉及计数和应用我们的概率规则。
练习
尝试回答以下问题,以确保你完全掌握了二项分布。解答可以在nostarch.com/learnbayes/找到。
-
如果我们掷 12 次 20 面骰子,求掷出 1 或 20 的概率,二项分布的参数是什么?
-
一副 52 张的扑克牌中有四张王牌。如果你抽一张牌,放回去再洗牌,接着再抽一张牌,那么在五次抽牌中,只有一张王牌的抽取方式有多少种?
-
对于问题 2 中的例子,在 10 次抽牌中抽到 5 张王牌的概率是多少(记得每次抽牌后将卡片放回并洗牌)?
-
当你在找工作时,拥有多个工作机会总是有帮助的,这样你可以在谈判中使用它们。如果你在面试时有 1/5 的机会收到工作邀请,而你一个月内面试了七家公司,那么到月底你至少会收到两个竞争性邀请的概率是多少?
-
你收到了大量招聘人员的电子邮件,并发现自己在接下来的一个月内安排了 25 场面试。不幸的是,你知道这样会让你精疲力尽,如果你很累,拿到 offer 的概率将降到 1/10。除非你至少有两倍的机会获得至少两个竞争 offer,否则你真的不想去参加这么多面试。如果你参加 25 场面试,还是只参加 7 场,你更有可能获得至少两个 offer?
第五章:贝塔分布**

本章建立在前一章二项分布的基础上,介绍了另一种概率分布——贝塔分布。你使用贝塔分布来估算一个事件的概率,前提是你已经观察到了一些试验和成功结果的数量。例如,你可以用它来估算掷硬币时正面朝上的概率,如果到目前为止你已经观察了 100 次投掷,其中有 40 次是正面朝上。
在探索贝塔分布的过程中,我们还将研究概率与统计的区别。在许多概率学的教材中,我们通常会显式地给出事件的概率。然而,在现实生活中,这种情况是非常罕见的。相反,我们通常得到的是数据,然后用这些数据来估算概率。这就是统计学的作用:它允许我们利用数据来估算我们正在处理的概率。
一个奇怪的情景:获取数据
这是本章的情景。一天,你走进了一家好奇心商店。店主向你打招呼,在你浏览了一会儿后,他问你有没有什么特别想看的东西。你回答说,想看看他有的最奇怪的东西。他笑了笑,从柜台后面拿出一样东西。你接过一个黑色的盒子,差不多是魔方的大小,似乎异常沉重。你感到好奇,问:“它是做什么的?”
店主指出盒子顶部有一个小缝隙,底部也有一个。“如果你把一个 25 美分硬币放入顶部,”他说,“有时候会有两个从底部出来!”你很兴奋地想试试看,便从口袋里拿出一个硬币放进去。你等待了一会儿,但什么也没发生。然后店主说:“有时候它会吞掉你的硬币。我这个东西已经用了很久了,至今我从没见过它硬币用完或者满到无法再放进去!”
对此感到困惑,但又急于运用新学的概率技能,你问:“拿到两个硬币的概率是多少?”店主困惑地回答:“我不知道。正如你所看到的,这只是一个黑色的盒子,没有说明书。我只知道它的表现。有时你会拿到两个硬币,有时它会吞掉你的硬币。”
区分概率、统计与推理
尽管这是一个稍显不寻常的日常问题,但它实际上是一个极为常见的概率问题。在到目前为止的所有例子中,除了第一章,我们都知道所有可能事件的概率,或者至少知道我们愿意对它们下注的多少。在现实生活中,我们几乎从未确定任何事件的确切概率;相反,我们只有观察和数据。
这通常被视为概率与统计学之间的划分。在概率论中,我们完全知道所有事件发生的概率,我们关心的是某些观察结果的可能性。例如,我们可能被告知公平掷硬币正面朝上的概率是 1/2,然后想知道 20 次掷硬币中恰好出现 7 次正面朝上的概率。
在统计学中,我们会倒过来看这个问题:假设你观察到 20 次掷硬币中有 7 次正面朝上,那么得到正面朝上的概率是多少?如你所见,在这个例子中,我们并不知道概率是什么。从某种意义上讲,统计学就是概率的反向过程。根据数据推算概率的任务叫做推断,它是统计学的基础。
收集数据
统计推断的核心是数据!到目前为止,我们只从这个奇怪的盒子里获取了一个样本:你投了一枚硬币,没有任何回报。此时我们所知道的只是丢失钱币的可能性。店主说你可以赢,但我们还不确定这一点。
我们想要估计神秘盒子返还两个硬币的概率,为此,我们首先需要观察你在多次尝试后获胜的频率。
店主告诉你,他和你一样好奇,愿意慷慨捐赠一卷硬币——包含价值 10 美元的硬币,即 40 枚硬币——前提是你把任何获胜的硬币归还给他。你投了一枚硬币,结果高兴地发现又弹出了两枚硬币!现在我们有了两条数据:神秘盒子确实有时会付出奖励,有时也会吞掉硬币。
根据我们的两次观察,一次是你失去了硬币,另一次是你赢了,你可能天真地猜测P(两个硬币) = 1/2。但由于我们的数据非常有限,仍然有一系列的概率我们可以考虑,作为这个神秘盒子返还两个硬币的真实速率。为了收集更多数据,你将使用卷中的其余硬币。最终,包括你第一次投入的硬币,你得到:
14 次获胜
27 次失败
如果不做进一步分析,你可能直观地想更新你的猜测,将P(两个硬币) = 1/2 更新为P(两个硬币) = 14/41。但你的原始猜测呢——你的新数据是否意味着 1/2 是不可能的真实概率?
计算概率的概率
为了帮助解决这个问题,我们来看一下两种可能的概率。这些只是我们关于神奇盒子返还两个硬币的速率的假设:

为了简化,我们将给每个假设分配一个变量:

直观上,大多数人会说H[2]更有可能,因为这正是我们观察到的,但我们需要通过数学证明这一点来确保。
我们可以从每个假设解释我们所看到的情况的角度来看待这个问题,简单来说:“如果H[1]为真,与H[2]为真相比,我们观察到的现象的概率有多大?”事实证明,我们可以使用第四章中的二项分布轻松计算这一点。在这种情况下,我们知道n = 41,k = 14,暂时假设p = H[1]或H[2]。我们将D作为数据的变量。当我们将这些数字代入二项分布时,我们得到以下结果(回想一下,你可以使用第四章中的二项分布公式来进行计算):

换句话说,如果H[1]为真且得到两个硬币的概率是 1/2,那么在 41 次试验中观察到 14 次得到两个硬币的概率大约是 0.016。然而,如果H[2]为真且从盒子中得到两个硬币的真实概率是 14/41,那么观察到相同结果的概率大约是 0.130。
这告诉我们,鉴于数据(在 41 次试验中观察到 14 次得到两个硬币),H[2]的可能性几乎是H[1]的 10 倍!然而,它也表明,任何一个假设都不是不可能的,当然,也有很多其他假设我们可以基于数据提出。例如,我们可能会将数据解读为H[3] P(两个硬币) = 15/42。如果我们想寻找一个模式,我们也可以选择从 0.1 到 0.9 的每一个概率,按 0.1 的增量进行计算;在每个分布中计算观察到的数据的概率;并由此发展我们的假设。图 5-1 展示了在后一种情况下每个值的样子。

图 5-1:关于获取两个硬币概率的不同假设的可视化
即使有这么多假设,我们也无法覆盖所有可能的结果,因为我们并不是在处理有限数量的假设。所以让我们通过测试更多的分布来获取更多的信息。如果我们重复上一个实验,从 0.01 开始,按 0.01 的增量测试每一个可能性,一直到 0.99,得到的结果如图 5-2 所示。

图 5-2:当我们查看更多假设时,我们看到一个明确的模式正在出现。
我们可能无法测试所有可能的假设,但很明显,已经出现了一个模式:我们看到的某些东西看起来像是一个分布,代表我们认为黑盒子的行为。
这看起来是有价值的信息;我们可以很容易地看到概率最高的地方。然而,我们的目标是建模我们对所有可能假设的信念(即我们信念的完整概率分布)。但我们的方法还有两个问题。首先,由于有无限多的可能假设,通过越来越小的增量来递增并不能准确地表示所有可能性——我们总是遗漏了无限多的部分。在实践中,这不是一个大问题,因为我们通常不关心像 0.000001 和 0.0000011 这样的极端值,但如果我们能更准确地表示这一无限的可能范围,数据会更有用。
其次,如果你仔细观察图表,可能会注意到一个更大的问题:现在有至少 10 个点在 0.1 之上,而我们还有无穷多个点要添加。这意味着我们的概率加起来不等于 1!根据概率规则,我们知道所有可能假设的概率必须加起来为 1。如果它们不等,说明有些假设没有被涵盖。如果加起来大于 1,那就违反了概率必须在 0 到 1 之间的规则。尽管这里有无穷多的可能性,我们仍然需要它们加起来为 1。这就是贝塔分布的作用。
贝塔分布
为了解决这两个问题,我们将使用贝塔分布。不同于二项分布,它把离散值分解得很好,贝塔分布表示的是连续范围的值,这使我们能够表示出我们可能的无限假设。
我们通过概率密度函数(PDF)来定义贝塔分布,这与我们在二项分布中使用的概率质量函数非常相似,但它是为连续值定义的。以下是贝塔分布的 PDF 公式:

现在这个公式看起来比我们二项分布的公式更加可怕!但其实它并没有那么不同。我们不会像构建概率质量函数那样完全从头开始构建这个公式,而是先分析一下这里发生的事情。
解析概率密度函数
首先来看一下我们的参数:p、α(小写希腊字母阿尔法)和β(小写希腊字母贝塔)。
p 表示事件发生的概率。这对应于我们关于黑箱的不同假设,表示可能的概率。
α 表示我们观察到一个我们关心的事件的次数,例如从箱子里得到两个硬币。
β 表示我们关心的事件没有发生的次数。在我们的例子中,这是黑箱吃掉硬币的次数。
总的试验次数是α + β。这与二项分布不同,后者中我们关注的是k个观测值,以及有限的n次总试验。
PDF 函数的顶部部分应该看起来很熟悉,因为它几乎与二项分布的概率质量函数(PMF)相同,如下所示:

在 PDF 中,与p^k × (1 – p)(*n*–*k*)不同,我们有*p*(α–1) × (1 – p)^(β–1),在这里我们从指数项中减去 1。我们方程的分母中还有另一个函数:beta函数(注意是小写),即贝塔分布的名称来源。我们从指数中减去 1,并使用贝塔函数来归一化我们的值——这一部分确保我们的分布总和为 1。贝塔函数是从 0 到 1 的积分,即p^(α–1) × (1 – p)^(β–1)。我们将在下一节讨论积分,但你可以将其理解为当p是介于 0 和 1 之间的每个数字时,所有可能的p^(α–1) × (1 – p)^(β–1)的总和。关于如何通过从指数中减去 1 并通过贝塔函数除以来归一化我们的值的讨论超出了本章的范围;现在,你只需要知道这能让我们的值总和为 1,从而给我们一个可操作的概率。
最终我们得到的是一个函数,用来描述在已观察到α个一种结果和β个另一种结果的情况下,我们对于从箱子中得到两个正面朝上的硬币的真实信念的每个可能假设的概率。记住,我们通过比较不同二项分布(每个分布都有自己的概率p)如何描述我们的数据,从而得到了贝塔分布。换句话说,贝塔分布表示所有可能的二项分布如何描述观察到的数据。
将概率密度函数应用于我们的问题
当我们将黑盒子数据的值代入并可视化贝塔分布时,如图 5-3 所示,我们看到它看起来像图 5-2 中图形的平滑版本。这说明了 Beta(14,27)的 PDF。

图 5-3:可视化我们关于黑盒子数据的贝塔分布
如你所见,大部分图形的密度小于 0.5,这符合预期,因为我们的数据表明,放入黑盒子中的四分之一硬币中,少于一半返回了两个正面朝上的硬币。
图表还显示了,黑色箱子至少在一半时间内返回两个硬币的可能性非常小,而这正是我们持续投币时实现盈亏平衡的临界点。我们已经搞清楚了,通过这个箱子,我们更有可能亏钱而不是赚钱,同时又不会丢掉太多硬币。虽然我们可以通过查看图表来看到我们的信念分布,但我们仍然希望能够量化我们对“箱子返回两个硬币的真实概率小于 0.5”的信念有多强。为此,我们只需要一点微积分(和一些 R 语言)。
通过积分量化连续分布
贝塔分布与二项分布的根本不同在于,二项分布中我们关注的是k,即我们关心的结果的数量,它总是一个可以计数的值。而贝塔分布则关注的是p,它有无限多个可能的值。这就引出了一个有趣的问题,如果你以前学过微积分,可能会觉得这个问题很熟悉(但如果没有学过也没关系!)。对于我们举的α=14 和β=27 的例子,我们想知道:得到两个硬币的机会是 1/2 的概率是多少?
虽然在二项分布中,由于其有限的结果数量,我们很容易问出某个具体值的概率,但在连续分布中这是一个非常棘手的问题。我们知道概率的基本规则是所有值的总和必须为 1,但每一个具体值的概率是无限小的,这意味着实际上任何具体值的概率都是 0。
如果你对微积分中的连续函数不熟悉,这可能显得有些奇怪,简单解释一下:这是由无限多个小块组成的事物所带来的逻辑结果。例如,假设你把一块 1 磅重的巧克力(挺大的!)分成两块,那么每一块的重量就是 1/2 磅。如果你将其分成 10 块,每块的重量就是 1/10 磅。随着你将巧克力分成越来越多的块,每一块变得如此之小,以至于你根本看不见它。对于将巧克力分成无限多块的情况,最终这些块就会消失!
虽然单独的小块消失了,但我们仍然可以谈论区间。例如,即使我们将 1 磅重的巧克力分成无限多块,我们仍然可以计算巧克力一半的重量。同样,在讨论连续分布的概率时,我们也可以求出某些区间的概率和。但如果每一个具体的值的概率是 0,那么总和不也是 0 吗?
这就是微积分派上用场的地方:在微积分中,有一种叫做积分的特殊方法,用来求和无限小的值。如果我们想知道盒子返回硬币的概率是否小于 0.5(也就是说,值介于 0 和 0.5 之间),我们可以这样求和:

如果你对微积分有些生疏,拉长的S是连续函数的等价物,用于离散函数的∑。它只是表达我们想要将函数中的所有小部分加总起来的一种方式(参见附录 B 了解微积分基本原理的快速概述)。
如果这些数学看起来让你感到害怕,别担心!我们会使用 R 来帮我们计算。R 包括一个叫做dbeta()的函数,它是 beta 分布的概率密度函数。这个函数有三个参数,对应于p、α和β。我们将其与 R 的integrate()函数结合使用,以自动执行这个积分。这里我们计算了,给定数据,得到两枚硬币的概率为 0.5 的可能性:
> integrate(function(p) dbeta(p,14,27),0,0.5)
结果如下:
0.9807613 with absolute error < 5.9e-06
“绝对误差”信息出现的原因是计算机无法完美地计算积分,因此总会存在一些误差,尽管通常这些误差太小,不值得我们担心。R 的这个结果告诉我们,鉴于我们的证据,得到两枚硬币的真实概率小于 0.5 的概率为 0.98。这意味着继续往盒子里投入硬币并不是一个好主意,因为你很可能不会打平。
反向工程扭蛋游戏
在现实生活中,我们几乎从来不知道事件的真实概率。这就是为什么 beta 分布是我们理解数据时最强大的工具之一。在第四章的扭蛋游戏中,我们知道每张卡片的抽取概率。实际上,游戏开发者很不可能提供这些信息给玩家,原因有很多(比如不希望玩家计算自己抽到想要卡片的可能性)。现在假设我们正在玩一个新的扭蛋游戏,名为频率主义战士!,它也有著名的统计学家角色。这次,我们在抽布拉德利·埃弗龙卡片。
我们不知道卡片的赔率,但我们真的很想得到那张卡片——如果可能的话,还想得到多张。我们花了大量的钱,结果从 1200 张卡片中,我们只得到了 5 张布拉德利·埃弗龙卡片。我们的朋友在考虑是否要为游戏花钱,但前提是拉到布拉德利·埃弗龙卡片的概率超过 0.7,且每次拉到该卡片的概率大于 0.005。
我们的朋友让我们判断是否应该花钱抽卡。我们的数据告诉我们,在 1200 张卡片中,只有 5 张是布拉德利·埃弗龙卡片,因此我们可以将其表示为 Beta(5,1195),如图 5-4 所示(记住,总共抽到的卡片数是α + β)。

图 5-4:给定我们的数据,获取 Bradley Efron 卡片的 beta 分布
从我们的可视化中,我们可以看到几乎所有的概率密度都低于 0.01。我们需要知道有多少概率密度在 0.005 之上,这是我们的朋友关心的值。我们可以像之前那样,通过在 R 中对 beta 分布进行积分来解决这个问题。
integrate(function(x) dbeta(x,5,1195),0.005,1)
0.29
这告诉我们,在我们观察到的证据下,拉到 Bradley Efron 卡片的概率大于等于 0.005 的概率只有 0.29。我们的朋友只有在概率大约为 0.7 或更高时才会抽这张卡片,因此,根据我们从数据收集得到的证据,我们的朋友 不应 试试运气。
总结
在本章中,你学习了 beta 分布,它与二项分布密切相关,但表现得截然不同。我们通过观察越来越多的二项分布如何解释我们的数据,逐步构建出了 beta 分布。由于我们的假设数量是无限的,我们需要一个能够描述所有假设的连续概率分布。beta 分布使我们能够表示我们对观察到的数据中所有可能概率的信心程度。这使我们能够通过确定我们可能赋予某个事件的概率及我们对每个概率的信心程度来进行统计推断:一种概率的概率。
beta 分布与二项分布之间的主要区别在于,beta 分布是一个 连续 的概率分布。因为在分布中有无限多个值,我们不能像在离散概率分布中那样直接对结果进行求和。相反,我们需要使用微积分来求和一系列的值。幸运的是,我们可以使用 R 而不是手动解决复杂的积分问题。
练习
尝试回答以下问题,以确保你理解如何使用 Beta 分布来估计概率。解答可以在 nostarch.com/learnbayes/ 找到。
-
你想使用 beta 分布来确定你手中的硬币是否是公平的——意味着硬币正反面出现的概率相等。你抛硬币 10 次,结果是 4 次正面,6 次反面。使用 beta 分布,硬币在未来抛掷中出现正面的概率超过 60% 的概率是多少?
-
你再抛硬币 10 次,现在总共得到了 9 次正面和 11 次反面。根据我们定义的公平标准,硬币是公平的概率是多少,误差范围在 5% 以内?
-
数据是增强你对自己断言信心的最佳方式。你再抛硬币 200 次,结果是 109 次正面,111 次反面。那么,硬币是公平的概率是多少,误差范围在 5% 以内?
第二部分
贝叶斯概率与先验概率
第六章:条件概率**

到目前为止,我们只处理了独立概率。概率是独立的,当一个事件的结果不影响另一个事件的结果时。例如,抛硬币出现正面并不影响掷骰子是否出现 6. 计算独立概率比计算非独立概率要容易得多,但独立概率往往无法反映现实生活。例如,闹钟不响的概率和你上班迟到的概率是不独立的。如果闹钟不响,你上班迟到的可能性比平时要大得多。
在本章中,你将学习如何推理条件概率,其中概率不是独立的,而是依赖于特定事件的结果。我还将向你介绍条件概率的一个重要应用:贝叶斯定理。
介绍条件概率
在我们第一个条件概率的例子中,我们将研究流感疫苗以及接种它可能带来的并发症。当你接种流感疫苗时,通常会收到一张纸,告知你与其相关的各种风险。一个例子是吉兰-巴雷综合症(GBS)的发病率增加,这是一种非常罕见的疾病,会导致身体的免疫系统攻击神经系统,进而可能引发危及生命的并发症。根据美国疾病控制与预防中心(CDC)的数据,某一年感染 GBS 的概率是 2/100,000。我们可以如下表示这个概率:

通常,流感疫苗只会略微增加你患 GBS 的概率。然而,在 2010 年,爆发了猪流感,如果你在那一年接种了流感疫苗,患 GBS 的概率上升到 3/100,000。在这种情况下,患 GBS 的概率直接取决于你是否接种了流感疫苗,因此它是一个条件概率的例子。我们将条件概率表示为P(A | B),或者给定 B 情况下 A 的概率。从数学上讲,我们可以将患 GBS 的概率表示为:

我们用英语这样读这个表达式:“接种流感疫苗后患 GBS 的概率是 3 万分之一。”
为什么条件概率很重要
条件概率是统计学的一个重要组成部分,因为它可以帮助我们展示信息如何改变我们的信念。在流感疫苗的例子中,如果你不知道某人是否接种了疫苗,你可以说他们患 GBS 的概率是 2/100,000,因为这是从人群中随机挑选出的任何人该年患 GBS 的概率。如果年份是 2010 年,而某人告诉你他们接种了流感疫苗,你就知道实际的概率是 3/100,000。我们还可以将这两个概率的比值表示为:

所以,如果你在 2010 年接种了流感疫苗,我们有足够的信息可以相信你比一个随机挑选的陌生人更有可能患 GBS,概率高出 50%。幸运的是,在个体层面上,患 GBS 的概率仍然非常低。但如果我们看的是整个群体,我们会预计,在接种了流感疫苗的人群中,GBS 的发病率会比一般人群高出 50%。
还有其他因素也可能增加患 GBS 的概率。例如,男性和老年人更容易患 GBS。通过使用条件概率,我们可以将所有这些信息加以考虑,从而更好地估计个体患 GBS 的可能性。
依赖性与修订后的概率规则
作为条件概率的第二个例子,我们将使用色盲——一种使人们难以辨认某些颜色的视力缺陷。在整个普通人群中,大约 4.25%的人是色盲。色盲的绝大多数案例都是遗传性的。色盲是由 X 染色体上的缺陷基因引起的。由于男性只有一条 X 染色体,而女性有两条,因此男性比女性更容易受到 X 染色体缺陷的负面影响,因此更可能是色盲。因此,尽管整个群体的色盲率为 4.25%,但女性仅为 0.5%,而男性则为 8%。在我们的所有计算中,我们将简化假设人口中的男女比例是完全 50/50。让我们将这些事实表示为条件概率:
P(色盲) = 0.0425
P(色盲 | 女性) = 0.005
P(色盲 | 男性) = 0.08
假设我们从人群中随机挑选一个人,那么他是男性且色盲的概率是多少?
在第三章中,我们学习了如何使用乘法规则将概率与“与”结合。根据乘法规则,我们可以预期我们问题的结果是:
P(男性, 色盲) = P(男性) × P(色盲) = 0.5 × 0.0425 = 0.02125
但是当我们使用乘法规则与条件概率时,会出现一个问题。如果我们尝试计算一个人是女性且色盲的概率,这个问题会变得更加清晰:
P(女性,色盲) = P(女性) × P(色盲) = 0.5 × 0.0425 = 0.02125
这是不对的,因为这两个概率是相同的!我们知道,虽然选中男性或女性的概率是相同的,但如果我们选中一位女性,她是色盲的概率应该比男性低得多。我们的公式应该考虑到这样一个事实:如果我们随机选择一个人,那么他们是色盲的概率取决于他们是男性还是女性。第三章中给出的乘积法则仅适用于概率独立的情况。性别(男性或女性)和色盲是相关的概率。
所以,发现一个色盲男性的真实概率是选中一个男性的概率乘以他是色盲的概率。从数学上来说,我们可以写成:
P(男性,色盲) = P(男性) × P(色盲 | 男性) = 0.5 × 0.08 = 0.04
我们可以将这个解法推广,重新编写我们的乘积法则如下:
P(A,B) = P(A) × P(B | A)
这个定义同样适用于独立的概率,因为对于独立的概率,P(B) = P(B | A)。当你考虑掷硬币和掷出 6 点时,这个定义直观地是有道理的;因为 P(六) 是 1/6,与掷硬币的结果无关,P(六 | 正面) 也是 1/6。
我们还可以更新我们对求和法则的定义,以考虑这一事实:
P(A 或 B) = P(A) + P(B) – P(A) × P(B | A)
现在,我们仍然可以轻松地使用第一部分中的概率逻辑规则来处理条件概率。
有关条件概率和依赖性的重要一点是,实际上,了解两个事件之间的关系通常是困难的。例如,我们可能会问某人拥有皮卡车并且通勤超过一个小时的概率。虽然我们可以提出许多理由来解释为什么一个事件可能依赖于另一个事件——也许拥有皮卡车的人往往住在更偏远的地方,通勤时间较短——但我们可能没有足够的数据来支持这一点。假设两个事件是独立的(即使它们很可能不是)在统计学中是一种非常常见的做法。但是,就像我们关于选中一个色盲男性的例子一样,这个假设有时会给我们带来错误的结果。尽管假设独立性通常是实践中的必要做法,但永远不要忘记依赖性可能带来的巨大影响。
逆向条件概率和贝叶斯定理
使用条件概率最令人惊讶的事情之一是反转条件来计算我们所依据事件的概率;也就是说,我们可以使用P(A | B)来得出P(B | A)。举个例子,假设你正在给一家销售色盲矫正眼镜的公司客服代表发邮件。眼镜有点贵,你向客服代表提到你担心它们可能不管用。客服代表回复说:“我也是色盲,我自己有一副——它们真的很好用!”
我们想要计算这个客服代表是男性的概率。然而,客服代表只提供了一个 ID 号,除此之外没有任何信息。那么我们该如何计算这个代表是男性的概率呢?
我们知道P(色盲 | 男性) = 0.08,并且P(色盲 | 女性) = 0.005,但我们该如何确定P(男性 | 色盲)呢?直觉上,我们知道客服代表是男性的可能性更大,但我们需要量化这个概率以确保准确。
幸运的是,我们拥有了解决这个问题所需的所有信息,并且我们知道我们正在计算一个人是男性的概率,前提是他们是色盲:
P(男性 | 色盲) = ?
贝叶斯统计的核心是数据,而现在我们只有一条数据(除了现有的概率):我们知道客服代表是色盲。我们的下一步是查看色盲在人群中的比例;然后,我们可以计算出这个子集中的男性比例。
为了帮助推理,我们引入一个新的变量N,它代表整个总人口。正如之前所述,我们首先需要计算整个色盲群体的子集。我们知道P(色盲),所以我们可以将这个方程写成这样:

接下来,我们需要计算既是男性又是色盲的人数。这很容易做,因为我们知道P(男性)和P(色盲 | 男性),并且我们有了修订后的乘法规则。所以我们只需将这个概率与总人口相乘:
P(男性) × P(色盲 | 男性) × N
所以,给定客服代表是色盲的前提下,代表是男性的概率为:

我们的人口变量N出现在分式的上下两部分,所以N被约去:

现在我们可以解决这个问题,因为我们知道了每一条信息:

根据计算,我们知道客服代表是男性的概率为 94.1%!
引入贝叶斯定理
在前面的公式中,实际上并没有什么特定于我们色盲案例的内容,所以我们应该能够将其推广到任何给定的A和B概率。如果我们这样做,我们就得到了本书中最基础的公式——贝叶斯定理:

为了理解贝叶斯定理为何如此重要,让我们看一下这个问题的一般形式。我们的信念描述了我们所知道的世界,因此当我们观察到某个现象时,其条件概率表示在我们相信某事的前提下,我们所看到的现象的可能性,或者:
P(观察到的 | 信念)
例如,假设你相信气候变化,因此你预期你居住的地区在 10 年期间将经历比平常更多的干旱。你的信念是气候变化正在发生,而你的观察是你所在地区的干旱次数;假设过去 10 年中发生了 5 次干旱。确定如果在这一期间存在气候变化,你是否会看到恰好 5 次干旱,可能会比较困难。解决这个问题的一种方法是咨询气候科学专家,询问他们基于气候变化假设模型下,发生干旱的概率。
到这个时候,你所做的只是问:“在我相信气候变化属实的前提下,我观察到的现象的概率是多少?”但你真正想要的是某种方法,来量化在观察到这些现象后,你相信气候变化确实在发生的程度。贝叶斯定理允许你反转你询问气候科学家时的P(观察到的 | 信念),并求解基于你观察到的现象,信念的可能性,即:
P(信念 | 观察到的)
在这个例子中,贝叶斯定理让你可以将观察到的 10 年内 5 次干旱转化为一个关于你在观察到这些干旱后对气候变化的信念强度的陈述。你需要的其他信息是 10 年内发生 5 次干旱的普遍概率(这可以通过历史数据估算),以及你对气候变化的初始信心。虽然大多数人对气候变化的初始概率不同,但贝叶斯定理使你能够精确量化数据如何改变任何信念。
例如,如果专家说,如果假设气候变化正在发生,那么 10 年内 5 次干旱是非常可能的,大多数人会稍微改变他们的信念,以支持气候变化,无论他们是否怀疑气候变化,还是像阿尔·戈尔那样坚定。
然而,假设专家告诉你,事实上,如果假设气候变化正在发生,那么 10 年内 5 次干旱是非常不可能的。在这种情况下,基于证据,你对气候变化的先前信念将稍微减弱。这里的关键要点是,贝叶斯定理最终使证据能够改变我们信念的强度。
贝叶斯定理允许我们将我们对世界的信念与数据结合,然后将这种结合转化为一个估计值,衡量我们根据所观察到的证据对信念的强度。我们的信念通常只是我们对某个想法的初步确信;这就是贝叶斯定理中的P(A)。我们经常争论一些话题,比如枪支管控是否能减少暴力,增加考试是否能提高学生表现,或是公共卫生保健是否能减少整体医疗成本。但我们很少考虑证据应该如何改变我们的想法,或者改变我们争论对象的想法。贝叶斯定理允许我们观察关于这些信念的证据,并精确量化这种证据如何改变我们的信念。
在本书后面,你将看到我们如何比较信念,以及在某些情况下数据可能出乎意料地未能改变信念(任何与亲戚在晚餐桌上争论过的人都可以证明这一点!)。
在下一章,我们将花更多时间讨论贝叶斯定理。我们将再次推导它,但这次使用乐高积木;这样,我们可以清楚地可视化它是如何运作的。我们还将探索如何从更具体的角度理解贝叶斯定理,建模我们现有的信念以及数据如何改变它们。
总结
在本章中,你学习了条件概率,即任何依赖于另一个事件的事件的概率。与独立概率相比,条件概率的计算更为复杂——我们不得不更新乘法规则以考虑依赖关系——但它们引导我们得出了贝叶斯定理,这是理解如何利用数据来更新我们对世界的认知的基础。
练习
尝试回答以下问题,看看你对条件概率和贝叶斯定理的理解有多深。答案可以在nostarch.com/learnbayes/ 找到。
-
为了使用贝叶斯定理来确定 2010 年某人患有 GBS 的同时也接种了流感疫苗,我们需要哪些信息?
-
从人群中随机挑选一个人,这个人是女性且不是色盲的概率是多少?
-
2010 年接种了流感疫苗的男性,患色盲或得了 GBS 的概率是多少?
第七章:贝叶斯定理与 LEGO**

在上一章中,我们介绍了条件概率,并引入了概率论中的一个非常重要的概念——贝叶斯定理,内容如下:

请注意,这里我们从第六章做了一个非常小的修改,写出了P(B | A)P(A),而不是P(A)P(B | A);这两者含义相同,但有时改变术语的顺序有助于阐明解决问题的不同方法。
使用贝叶斯定理,我们可以反转条件概率——所以当我们知道概率P(B | A)时,我们可以推算出P(A | B)。贝叶斯定理是统计学的基础,因为它允许我们从已知某个观察结果的概率来推导出基于该观察结果的信念强度。例如,如果我们知道打喷嚏的概率在你感冒的情况下,我们可以倒推,得出你感冒的概率,前提是你打了喷嚏。通过这种方式,我们利用证据来更新我们对世界的信念。
在本章中,我们将使用 LEGO 积木来可视化贝叶斯定理,并帮助你更好地理解数学内容。为此,让我们拿出一些 LEGO 积木,并对我们的方程提出一些具体问题。图 7-1 显示了一个 6 × 10 的 LEGO 积木区域;这是一个 60 颗积木的区域(积木是 LEGO 砖块上的圆柱形凸起部分,用于将砖块连接在一起)。

图 7-1:一个 6 × 10 积木的 LEGO 区域,帮助我们可视化可能事件的空间
我们可以将这个视为 60 种可能的、互斥事件的空间。例如,蓝色积木可以代表 40 个通过考试的学生,红色积木代表 20 个没通过考试的学生,这些学生来自一个 60 人的班级。在这 60 个积木的区域里,有 40 个蓝色积木,所以如果我们随机选一个点,触摸到蓝色砖块的概率是这样定义的:

我们可以通过以下方式表示触摸到红色砖块的概率:

触摸蓝色或红色砖块的概率,正如你所预期的,是 1:
P(蓝色) + P(红色) = 1
这意味着红色和蓝色砖块就可以描述我们所有可能事件的集合。
现在,让我们在这两块砖块上放置一块黄色砖块,代表另一种可能性——例如,那些熬夜学习没有睡觉的学生——它看起来像图 7-2 所示。

图 7-2:将一个 2 × 3 的 LEGO 砖块放置在 6 × 10 积木区域上方
现在,如果我们随机选取一个积木,触摸黄色砖块的概率是:

但如果我们将P(黄色)加到P(红色) + P(蓝色),我们会得到一个大于 1 的结果,而这是不可能的!
问题在于,所有黄色积木都位于红色和蓝色积木空间之上,因此获得一个黄色积木的概率是条件的,取决于我们是否处于蓝色或红色空间。正如我们在前一章中所知道的,我们可以将这种条件概率表示为P(黄 | 红),或者说是在红色条件下得到黄色的概率。根据我们之前的例子,这就是学生熬夜后未通过考试的概率。
通过视觉方式计算条件概率
让我们回到我们的乐高积木,并计算P(黄 | 红)的值。图 7-3 为我们提供了问题的视觉帮助。

图 7-3:可视化 P(黄 | 红)
让我们通过操作物理模型来演示如何确定P(黄 | 红)。
-
将红色区域与蓝色区域分开。
-
得到红色空间的总面积,它是一个 2 × 10 的积木区域,因此有 20 个积木钉子。
-
得到红色空间上黄色积木的面积,是 4 个积木钉子。
-
将黄色区域的面积除以红色区域的面积。
这给出了P(黄 | 红) = 4/20 = 1/5。
太好了——我们已经得出了条件概率黄给定红!到目前为止,一切顺利。那么如果我们反过来,问问P(红 | 黄)是多少呢?通俗来说,如果我们知道我们处于一个黄色的空间,那么在下面是红色的概率是多少?或者在我们的测试例子中,假设一个学生熬夜了,给定这个信息,学生没有通过考试的概率是多少?
看着图 7-3,你可能已经通过推理直观地得出了P(红 | 黄)的值:“有 6 个黄色的积木钉子,其中 4 个在红色积木上,所以选择一个在红色积木上的黄色积木的概率是 4/6。”如果你确实按照这个思路推理,那恭喜你!你已经独立发现了贝叶斯定理。但为了确保正确,我们接下来用数学来量化这个过程。
进行数学推导
从我们的直觉到贝叶斯定理的推导需要一点工作。让我们开始通过数学化我们的直觉来计算存在 6 个黄色积木的情况。我们的思维通过空间推理得出了这一结论,但我们需要用数学方法来解决。为此,我们只需将黄色积木的概率乘以积木的总数:

我们直觉推理的下一部分是,4 个黄色积木位于红色上方,这需要更多的工作才能通过数学证明。首先,我们必须确定红色积木的数量;幸运的是,这与计算黄色积木数量的过程相同:

我们也已经计算出了黄色积木覆盖的红色积木的比例,即P(黄 | 红)。为了将其转化为一个计数——而不仅仅是一个概率——我们将其乘以我们刚才计算出来的红色积木的数量:

最后,我们得到了黄色覆盖的红色凸起与黄色总数的比值:

这与我们的直觉分析一致。然而,它看起来并不像一个贝叶斯定理的方程式,贝叶斯定理应该具有以下结构:

为了达到这个目标,我们必须回过头来展开方程中的各项,如下所示:

我们知道我们是这样计算的:

最后,我们只需要从方程中消去 totalStuds,得到:

从直觉出发,我们回到了贝叶斯定理!
总结
从概念上讲,贝叶斯定理源于直觉,但这并不意味着贝叶斯定理的形式化是显而易见的。我们数学工作的好处在于,它能够从直觉中提取出推理。我们已经确认了我们原始的直觉信念是一致的,现在我们有了一个强大的新工具,可以处理比乐高砖块更复杂的概率问题。
在下一章,我们将学习如何使用贝叶斯定理来推理和通过数据更新我们的信念。
练习
尝试回答以下问题,看看你是否已经牢固理解了我们如何使用贝叶斯定理推理条件概率。解答可以在 nostarch.com/learnbayes/ 找到。
-
堪萨斯城,尽管名字如此,实际上位于美国两个州的边界:密苏里州和堪萨斯州。堪萨斯城大都市区包含 15 个县,其中 9 个在密苏里州,6 个在堪萨斯州。整个堪萨斯州有 105 个县,密苏里州有 114 个县。使用贝叶斯定理计算一个刚搬到堪萨斯城大都市区的亲戚住在堪萨斯州的县的概率。确保展示 P(堪萨斯)(假设你的亲戚要么住在堪萨斯州,要么住在密苏里州),P(堪萨斯城大都市区) 和 P(堪萨斯城大都市区 | 堪萨斯)。
-
一副扑克牌有 52 张牌,花色是红色或黑色。有四张王牌:两张红色的和两张黑色的。你从牌堆中抽出一张红色王牌并将牌洗匀。你的朋友抽到了一张黑牌。那么这张牌是王牌的概率是多少?
第八章:贝叶斯定理的先验、可能性和后验**

现在我们已经介绍了如何通过空间推理推导贝叶斯定理,让我们来看看如何使用贝叶斯定理作为一个概率工具,逻辑地推理不确定性。在本章中,我们将使用它来计算和量化我们信念的可能性,给定我们观察到的数据。为此,我们将使用定理的三个部分——后验概率、可能性和先验概率——这些将在你使用贝叶斯统计学和概率论的过程中频繁出现。
三个部分
贝叶斯定理让我们可以准确量化观察到的数据如何改变我们的信念。在这种情况下,我们想要了解的是:P(信念 | 数据)。用通俗的语言来说,我们希望量化在观察到的数据之后,我们的信念有多强烈。这个公式部分的技术术语是后验概率,我们将利用贝叶斯定理来解决这个问题。
为了解出后验概率,我们需要下一个部分:在我们关于数据的信念下,数据的概率,即 P(数据 | 信念)。这被称为可能性,因为它告诉我们,在我们信念的前提下,数据有多可能。
最后,我们想要量化我们最初信念的可能性,即 P(信念)。贝叶斯定理中的这一部分被称为先验概率,或简称“先验”,因为它代表了在看到数据之前我们信念的强度。可能性和先验结合起来产生后验概率。通常我们需要使用数据的概率,P(数据),来归一化后验,以便它准确反映从 0 到 1 的概率。然而,实际上我们并不总是需要P(数据),所以这个值没有特别的名称。
正如你现在所知道的,我们将我们的信念称为假设 H,而用变量 D 来表示我们的数据。图 8-1 展示了贝叶斯定理的每个部分。

图 8-1:贝叶斯定理的部分
在本章中,我们将调查一起犯罪案件,结合这些部分来推理案件情况。
调查犯罪现场
假设某天你下班回家,发现窗户被打破,前门敞开,笔记本电脑不见了。你最先的想法可能是“我被抢劫了!”但是,你是如何得出这个结论的?更重要的是,你如何量化这种信念?
你最初的假设是你被抢劫了,因此 H = 我被抢劫了。我们想要一个概率来描述你被抢劫的可能性,因此我们想要根据数据来求解的后验是:
P(被抢劫 | 窗户破裂,前门敞开,笔记本电脑失踪)
为了解决这个问题,我们将填补贝叶斯定理中的缺失部分。
解决可能性
首先,我们需要解决的是可能性,在这个案例中,就是在你被抢劫的情况下,观察到相同证据的概率——换句话说,就是证据与假设的契合度:
P(破窗、开门、丢失笔记本电脑 | 被抢劫)
我们在问的是,“如果你被抢劫了,那么你看到的证据有多大可能会是你所看到的这些?”你可以想象到很多情景,在这些情景中,抢劫发生时并不一定所有的证据都会出现。例如,一个聪明的小偷可能打开了你的门锁,偷走了你的笔记本电脑,然后锁好门离开,根本不需要打破窗户。或者他可能只是砸碎了窗户,拿走了笔记本电脑,然后从窗户爬出来。我们看到的这些证据直观上似乎在抢劫现场非常常见,因此我们假设如果你被抢劫了,回家时看到这些证据的概率为 3/10。
需要注意的是,尽管我们在这个例子中只是做了一个猜测,但我们也可以做一些研究来获得更好的估计。我们可以去当地警察局询问有关涉及抢劫的犯罪现场证据的统计数据,或者阅读最近抢劫案件的新闻报道。这将为我们提供一个更准确的估计,帮助我们判断如果你被抢劫了,你会看到这些证据的概率。
贝叶斯定理的神奇之处在于,我们可以用它来组织我们的日常信念,也可以用它来处理具有非常精确概率的大数据集。即使你认为 3/10 并不是一个好的估计值,你总是可以回到计算中——就像我们将要做的那样——看看在不同假设下这个值是如何变化的。例如,如果你认为在发生抢劫的情况下,看到这个证据的概率只有 3/100,你也可以很容易地返回并将这些数字代入。贝叶斯统计让人们可以以可度量的方式对信念产生分歧。因为我们是以定量的方式处理我们的信念,所以你可以重新计算本章中的所有内容,看看不同的概率是否对任何最终结果产生了实质性的影响。
计算先验
接下来,我们需要确定你被抢劫的概率。这是我们的先验。先验非常重要,因为它们允许我们利用背景信息来调整可能性。例如,假设之前描述的场景发生在一个荒岛上,你是唯一的居民。在这种情况下,你几乎不可能被抢劫(至少是被人类抢劫)。再举个例子,如果你住在一个犯罪率很高的社区,抢劫可能是经常发生的事情。为了简化问题,假设我们将被抢劫的先验设定为:

请记住,我们总是可以根据不同的证据在以后调整这些数字。
我们几乎具备了计算后验所需的所有信息;我们只需要归一化数据。那么,在继续之前,让我们看一下未经归一化的后验:

这个值非常小,这令人惊讶,因为直觉告诉我们,根据你观察到的证据,你的房子被抢劫的概率似乎非常非常高。但我们还没有考虑观察到我们证据的概率。
数据归一化
我们的方程中缺少的部分是你观察到的数据的概率,无论你是否被抢劫。在我们的例子中,这就是你观察到窗户破了,门开着,笔记本电脑丢失的概率,一次性发生,无论原因是什么。到目前为止,我们的方程看起来是这样的:

分子中的概率如此之低的原因是我们还没有用你会找到这些奇怪证据的概率来归一化它。
我们可以看到,当我们改变P(D)时,后验如何变化,见表 8-1。
表 8-1: P(D) 如何影响后验概率
| P(D)** | 后验概率 |
|---|---|
| 0.050 | 0.006 |
| 0.010 | 0.030 |
| 0.005 | 0.060 |
| 0.001 | 0.300 |
随着我们数据的概率减小,我们的后验概率增加。这是因为当我们观察到的数据变得越来越不太可能时,通常不太可能的解释更能解释事件的发生(见图 8-2)。

图 8-2: 随着数据概率的减少,后验概率增加。
考虑这个极端的例子:你朋友成为百万富翁的唯一方式是他们中了彩票或继承了某个你不知道的家庭成员的财产。因此,你朋友成为百万富翁的可能性是惊人地低的。然而,你发现你朋友确实成为了百万富翁。然后,他们中了彩票的可能性就变得更加可能,因为这是他们能成为百万富翁的仅有的两种方式之一。
被抢劫,当然,仅仅是你观察到的事情的一个可能解释,还有更多其他解释。然而,如果我们不知道证据的概率,我们就无法弄清楚如何归一化这些其他可能性。那么,我们的P(D)是多少呢?这就是棘手的部分。
关于P(D)的常见问题是,在许多现实世界的情况下,它很难准确计算。对于公式中的每个其他部分——尽管我们只是猜测了一个值用于本次练习——我们可以收集真实数据来提供更具体的概率。对于我们的先验P(被抢劫),我们可能只是查看历史犯罪数据,并确定某一天你街道上的某个房子被抢劫的概率。同样,我们也可以理论上调查过去的抢劫案件,并得出在抢劫的情况下观察到你所见证的证据的更准确的可能性。但我们怎么可能真正猜测P(破窗、开着的前门、丢失的笔记本电脑)呢?
我们可以不研究你所观察到数据的概率,而是尝试计算所有其他可能事件的概率,这些事件可能解释你所观察到的现象。因为这些事件的概率之和必须为 1,我们可以倒推,找到P(D)。但对于这条特定证据来说,可能性几乎是无穷无尽的。
在没有P(D)的情况下,我们有点困惑。在第六章和第七章中,我们分别计算了客户服务代表是男性的概率和选择不同颜色乐高积木的概率,我们有很多关于P(D)的信息。这使得我们能够根据我们观察到的情况,得出我们对假设的信念的确切概率。没有P(D),我们无法得出P(被抢劫 | 破窗、开着的前门、丢失的笔记本电脑)的值。然而,我们并不完全迷失。
好消息是,在某些情况下,我们不需要明确知道P(D),因为我们通常只想比较假设。在这个例子中,我们将比较你被抢劫的可能性与另一种可能的解释。我们可以通过查看我们未归一化的后验分布的比率来实现这一点。由于P(D)是一个常数,我们可以安全地将其去除,而不改变我们的分析。
所以,在本章剩余部分,我们将不再计算P(D),而是提出一个替代假设,计算其后验概率,然后将其与我们原始假设的后验概率进行比较。虽然这意味着我们无法得出抢劫是你所观察到的证据唯一可能解释的确切概率,但我们仍然可以使用贝叶斯定理来扮演侦探,调查其他可能性。
考虑替代假设
让我们提出一个新的假设,与原始假设进行比较。我们的新假设包含三个事件:
-
一名邻里的孩子打了一颗棒球,正好打破了前窗。
-
你把门忘了锁。
-
你忘记了你把笔记本电脑带到公司,实际上它还在那儿。
我们将简单地按列表中的编号引用这些解释,并将它们统称为H[2],使得P(H[2]) = P(1,2,3)。现在我们需要求解此数据的似然度和先验概率。
我们替代假设的可能性
回想一下,对于我们的可能性,我们想要计算在给定我们假设的情况下你所观察到的事件的概率,或者P(D | H[2])。有趣的是——正如你将看到的那样——这个解释的可能性结果是 1:P(D | H[2]) = 1
如果我们的假设中的所有事件都发生了,那么你对破窗、未锁的门和丢失的笔记本电脑的观察将是确定的。
我们替代假设的先验概率
我们的先验代表所有三件事情发生的可能性。这意味着我们需要先计算每个事件的概率,然后使用乘法法则来确定先验。对于这个例子,我们假设这些可能的结果是条件独立的。
我们假设的第一部分是一个邻里的孩子把棒球打穿了前窗。虽然这种情况在电影中很常见,但我个人从未听说过发生过这种事。我认识的被抢劫的人要多得多,所以我们假设棒球打穿窗户的概率是我们之前使用的被抢劫概率的一半:

我们假设的第二部分是你没有锁门。这是相当常见的;假设这种情况大约每个月发生一次,那么:

最后,让我们来看一下将笔记本电脑留在公司。虽然把笔记本电脑带到公司并把它留在那里可能很常见,但完全忘记自己一开始把它带进公司就不太常见了。也许这种情况每年发生一次:

由于我们已经为每个H[2]的部分赋予了概率,现在我们可以通过应用乘法法则来计算我们的先验概率:

如你所见,所有三件事件发生的先验概率极低。现在我们需要为每个假设计算后验概率以进行比较。
我们替代假设的后验概率
我们知道我们的可能性,P(D | H[2])等于 1,因此如果我们的第二个假设为真,我们就可以肯定地看到我们的证据。在第二个假设中没有先验概率的情况下,看来我们新假设的后验概率会比原始假设(即你被抢劫)的后验概率强得多(因为即使我们被抢劫了,我们看到数据的可能性也没有那么大)。我们现在可以看到,先验如何极大地改变了我们的非标准化后验概率:

现在我们想通过比率来比较我们的后验信念以及假设的强度。你会看到,我们不需要P(D)就可以做到这一点。
比较我们的非标准化后验概率
首先,我们想比较这两个后验的比率。比率告诉我们一个假设比另一个假设更可能的倍数。我们将我们的原假设定义为H[1],比率看起来像这样:

接下来,让我们对每个部分使用贝叶斯定理进行扩展。我们将贝叶斯定理写成 P(H) × P(D | H) × 1/P(D),这样在这种上下文中公式更易于阅读:

注意,分子和分母中都包含了 1/P(D),这意味着我们可以去掉它,保持比例关系。这就是为什么在比较假设时 P(D) 不重要的原因。现在我们有了一个未归一化的后验比例。因为后验概率告诉我们我们的信念有多强,这个后验的比例告诉我们 H[1] 比 H[2] 更好地解释我们的数据多少倍,而无需知道 P(D)。让我们去掉 P(D) 并代入我们的数字:

这意味着 H[1] 比 H[2] 更好地解释我们观察到的现象达 6,570 倍。换句话说,我们的分析表明,我们的原假设 (H[1]) 比我们的替代理论 (H[2]) 更好地解释了数据。这也很好地符合我们的直觉——根据你观察到的场景,抢劫显然是一个更可能的评估。
我们希望以数学方式表达这种未归一化后验的特性,以便将其用于比较。为此,我们使用以下版本的贝叶斯定理,其中符号 ∝ 表示“与……成比例”:
P(H | D) ∝ P(H) × P(D | H)
我们可以这样理解:“后验概率——也就是给定数据的假设概率——是与先验概率H相乘,再乘以给定H的数据显示的概率的比例。”
这种形式的贝叶斯定理非常有用,特别是在我们想要比较两个想法的概率,但又无法轻松计算 P(D) 的情况下。我们不能单独为我们的假设得出一个有意义的概率值,但我们仍然在使用贝叶斯定理的一个版本来比较假设。比较假设意味着我们可以清楚地看到一个解释我们观察到的现象的解释,比另一个更强。
总结
本章探讨了贝叶斯定理如何为我们提供一个框架,帮助我们基于已观察到的数据构建对世界的信念。对于贝叶斯分析,贝叶斯定理由三个主要部分组成:后验概率,P(H | D);先验概率,P(H);以及似然性,P(D | H)。
数据本身,或者 P(D),在这个列表中显著缺席,因为如果我们仅仅关心比较信念,我们通常不需要它来执行分析。
练习
尝试回答以下问题,看看你是否对贝叶斯定理的各个部分有一个扎实的理解。解决方案可以在 nostarch.com/learnbayes/ 找到。
-
如前所述,你可能不同意最初分配给可能性的概率:
![Image]()
这如何改变我们对 H[1] 相对于 H[2] 的信念强度?
-
你必须多么不可能相信自己会被抢劫——这是我们的先验概率 H[1]——才会使得 H[1] 与 H[2] 的比率相等呢?
第九章:贝叶斯先验和与概率分布的运用**

先验概率是贝叶斯定理中最具争议的部分,因为它们常常被认为是主观的。然而,在实际应用中,它们通常展示了如何将重要的背景信息应用于充分推理不确定的情况。
在本章中,我们将讨论如何使用先验来解决问题,以及如何使用概率分布来数值化描述我们的信念,将其表示为一系列可能的值,而非单一的值。使用概率分布而非单一值有两个主要原因。
首先,实际上我们可能拥有并考虑各种不同的信念。其次,表示概率范围使我们能够明确表达我们对一组假设的信心。当我们在第五章中研究神秘的黑匣子时,我们探讨了这两个例子。
C-3PO 对小行星带的怀疑
作为一个例子,我们将使用《星球大战:帝国反击战》中的一个经典统计分析错误。当韩·索罗试图避开敌方战机时,他驾驶着千年隼飞入了一片小行星带,知识渊博的 C-3PO 告诉韩,概率对他不利。C-3PO 说:“先生,成功穿越小行星带的可能性大约是 3720 比 1!”
“永远不要告诉我几率!”韩回应道。
表面上看,这只是一个有趣的电影片段,轻视“无聊”的数据分析,但实际上这里有一个有趣的难题。我们观众知道韩能做到,但我们可能也并不反对 C-3PO 的分析。即使是韩也认为这很危险,他说:“他们得疯了才会追我们。”而且,追击的 TIE 战机都没能通过,这为 C-3PO 的数字是否完全错误提供了相当强的证据。
C-3PO 在计算时忽略了一点,那就是韩·索罗是个狠角色!C-3PO 并不是错了,只是他忘记添加一些关键信息。现在的问题是:我们能否找到一种方法,避免 C-3PO 的错误,而不是像韩所提议的那样完全忽视概率?为了回答这个问题,我们需要建模 C-3PO 的思维方式,以及我们对韩的信念,然后通过贝叶斯定理将这些模型结合起来。
我们将在下一节开始讨论 C-3PO 的推理,然后再讨论韩的狠角色。
确定 C-3PO 的信念
C-3PO 不仅仅是在胡乱编数字。他精通超过 600 万种交流方式,而这需要大量的数据来支持,因此我们可以假设他有实际的数据来支撑他所说的“大约 3,720 比 1”的说法。因为 C-3PO 提供的是成功穿越小行星场的大致几率,我们知道他拥有的数据只能给出一系列可能的成功率范围,而不是一个代表概率的单一值。为了表示这一范围,我们需要查看一个关于成功概率的分布,而不是一个单一的值。
对 C-3PO 来说,唯一可能的结果就是成功穿越小行星场或失败。我们将根据 C-3PO 的数据,利用你在第五章中学到的贝塔分布来确定成功的各种可能概率。我们使用贝塔分布是因为它能够准确地建模给定成功和失败次数信息时,事件可能成功的概率范围。
回想一下,贝塔分布是通过一个α(观察到的成功次数)和一个β(观察到的失败次数)来进行参数化的:
P(成功率 | 成功和失败) = Beta(α,β)
这个分布告诉我们,根据已有的数据,哪些成功率最可能。
为了弄清楚 C-3PO 的信念,我们将假设他的数据来源。假设 C-3PO 有记录,显示 2 个人成功穿越了小行星场,而 7,440 个人则在一次辉煌的爆炸中结束了旅程!图 9-1 展示了一个概率密度函数图,表示 C-3PO 对成功率的真实信念。

图 9-1:一个贝塔分布,表示 C-3PO 相信汉会生还
对于任何一名普通飞行员来说,进入小行星场看起来都是不妙的。从贝叶斯的角度来看,C-3PO 基于观察数据估算的真实成功率,即 3,720:1,是似然,我们在第八章中讨论过。接下来,我们需要确定我们的先验。
解释汉·索罗的英雄气概
C-3PO 分析的问题在于,他的数据是基于所有飞行员的,但汉远不是普通飞行员。如果我们不能为汉的英雄气概量化一个数字,那么我们的分析就有问题——不仅仅是因为汉成功穿越了小行星场,更因为我们相信他能够成功。统计学是一种帮助和组织我们推理与信念的工具。如果我们的统计分析不仅与我们的推理和信念相矛盾,还未能改变这些信念,那么我们的分析就出了问题。
我们有一个先验信念,认为汉会成功穿越小行星场,因为到目前为止,汉已经成功地从每一个不可能的情境中生还。让汉·索罗成为传奇的原因在于,无论生还看起来多么不可能,他总是能够成功!
对于贝叶斯分析之外的数据分析师来说,先验概率常常是一个非常有争议的问题。很多人觉得,单纯“编造”一个先验并不是客观的。但是这个场景是一个关于为什么忽视我们先前信念更加荒谬的客观章节。试想第一次观看《星际帝国》,看到这一幕时,一个朋友真诚地告诉你:“好吧,汉已经死了。”你绝对不会认为这是真的。记住,C-3PO 并没有完全错关于生还的可能性:如果你的朋友说:“好吧,那些 TIE 战斗机已经死了”,你可能会笑着同意。
现在,我们有很多理由相信汉会生还,但没有数字来支持这一信念。让我们试着整理一些东西。
我们将从对汉·索洛强悍程度的某种上限开始。如果我们相信汉绝对不会死,那么电影将变得可预测且无聊。另一方面,我们相信汉会成功的程度,强于 C-3PO 认为他不会成功的程度,所以我们可以说我们认为汉会生还的概率是 20,000 比 1。
图 9-2 展示了我们认为汉会生还的先验概率分布。

图 9-2:表示我们对于汉·索洛生还的先验信念范围的 Beta 分布
这是另一种 Beta 分布,我们使用它有两个原因。首先,我们的信念非常粗略,所以我们需要承认生还率是变化的。其次,Beta 分布将使未来的计算更加简便。
现在,有了我们的可能性和先验,我们可以在下一节中计算我们的后验概率。
通过后验创造悬念
我们现在已经建立了 C-3PO 的信念(可能性),并且我们已经对自己关于汉的信念进行了建模(先验),但是我们需要一种方法来将这些结合起来。通过结合信念,我们创造了我们的后验分布。在这种情况下,后验模型了我们在从 C-3PO 那里得知可能性后产生的悬念:C-3PO 分析的目的部分是为了取笑他的分析思维,但也是为了制造一种真实的危险感。仅凭我们的先验,我们对汉毫不担心,但当我们根据 C-3PO 的数据调整它时,我们形成了一个新的信念,考虑到真实的危险。
后验概率的公式实际上非常简单且直观。由于我们只有可能性和先验,我们可以使用前一章讨论的贝叶斯定理的比例形式:
后验 ∝ 可能性 × 先验
请记住,使用贝叶斯定理的这个比例形式意味着我们的后验分布不一定会加和为 1。但我们很幸运,因为有一种简单的方法可以组合贝塔分布,当我们只有似然和先验时,它会给我们一个标准化的后验分布。通过这种方式结合我们的两个贝塔分布——一个代表 C-3PO 的数据(似然),另一个代表我们对汉能在任何情况下生还的先验信念——是相当简单的:
Beta (α[后验], β[后验]) = Beta(α[似然] + α[先验], β[似然] + β[先验])
我们只需将先验和后验的α值与先验和后验的β值相加,就可以得到一个标准化的后验分布。由于这非常简单,使用贝塔分布对于贝叶斯统计来说非常方便。为了确定汉能否穿越小行星带的后验概率,我们可以进行这个简单的计算:
Beta(20002,7401) = Beta(2 + 20000, 7400 + 1)
现在我们可以可视化我们数据的新的分布。图 9-3 展示了我们最终的后验信念。

图 9-3:将我们的似然与先验结合,给出了一个更有趣的后验分布。
通过将 C-3PO 的信念与我们认为汉能是个硬汉的信念结合起来,我们发现我们的立场更为合理。我们的后验信念显示生还的机会大约是 73%,这意味着我们仍然认为汉有很大的机会生还,但我们也仍然处于悬念之中。
其实最有用的是,我们不仅仅得到汉生还的可能性原始概率,而是得到一个完整的可能信念分布。书中的许多例子,我们一直简单地使用一个单一的概率值,但在实际应用中,使用完整的分布可以帮助我们在信念的强度上更加灵活。
总结
在这一章中,你学到了背景信息在分析面前数据时的重要性。C-3PO 的数据为我们提供了一个似然函数,这与我们对汉能力的先验理解不一致。我们并没有像汉在《星球大战:帝国反击战》中那样直接否定 C-3PO,而是将 C-3PO 的似然与我们的先验相结合,从而得出一个调整后的汉成功的可能性信念。在《星球大战:帝国反击战》中,这种不确定性对于场景所创造的紧张气氛至关重要。如果我们完全相信 C-3PO 的数据或我们自己的先验,我们就几乎肯定汉会死,或者几乎肯定他会毫无问题地生还。
你也看到了,可以使用概率分布,而不是单一的概率,来表达一系列可能的信念。在本书的后续章节中,你将更详细地研究这些分布,以更细致地探索你信念的不确定性。
练习
尝试回答以下问题,看看你是否理解如何将先验概率和似然分布结合起来,以得出一个准确的后验分布;问题的解答可以在 nostarch.com/learnbayes/ 找到。
-
一位朋友在地上发现一枚硬币,抛掷后连续得到了六个正面,接着是一个反面。给出描述这一现象的贝塔分布。使用积分方法确定抛出正面的真实概率在 0.4 到 0.6 之间的概率,反映出硬币是相当公平的。
-
给出一个先验概率,假设硬币是公平的。使用一个贝塔分布,使得硬币正面概率在 0.4 到 0.6 之间的真实概率至少有 95%的可能性。
-
现在,看看还需要多少个正面(没有更多的反面)才能说服你相信硬币不公平。在这种情况下,假设这意味着我们对硬币正面概率在 0.4 到 0.6 之间的信念降至 0.5 以下。
第三部分
参数估计
第十章:介绍:平均和参数估计

本章介绍了 参数估计,这是统计推断中的一个重要部分,利用我们的数据猜测一个未知变量的值。例如,我们可能想要估计网页访问者购买商品的概率、嘉年华糖果罐中糖果的数量,或者粒子的位置信息和动量。在这些情况下,我们都有一个未知值需要估算,并且可以利用我们观察到的信息做出猜测。我们将这些未知值称为 参数,而做出关于这些参数最佳猜测的过程称为参数估计。
我们将重点讨论 平均,这是最基本的参数估计形式。几乎每个人都知道,取一组观察值的平均值是估算真实值的最佳方法,但很少有人真正停下来问,这种方法为什么有效——它真的有效吗?我们需要证明我们可以信任平均值,因为在后面的章节中,我们将其构建为更复杂的参数估计形式。
估算降雪量
假设昨晚下了大雪,你想要准确计算你家院子里降雪的深度,单位为英寸。不幸的是,你没有一个可以提供精确测量的雪深计。你向外看,发现风把雪吹得四处飘散,意味着雪并不均匀地铺展。于是,你决定用尺子在院子里大约七个随机位置测量雪的深度。你得到了以下几个测量值(单位:英寸):
6.2、4.5、5.7、7.6、5.3、8.0、6.9
雪显然被吹动了很多,而你的院子也不完全平整,因此你的测量值都有些不同。鉴于这种情况,我们如何利用这些测量值来做出对实际降雪量的合理猜测呢?
这个简单的问题是参数估计的一个很好示例。我们正在估算的参数是前一晚实际的降雪深度。请注意,由于风将雪吹得四处飘散,而且你没有雪深计,我们永远无法知道降雪的 精确 数量。相反,我们有一组数据,可以使用概率将它们结合起来,确定每个观测值对我们估算的贡献,从而帮助我们做出最佳的猜测。
通过平均测量来最小化误差
你最初的直觉可能是将这些测量值求平均。在小学时,我们学习通过将元素加总并将总和除以元素的数量来求平均值。所以,如果有 n 个测量值,每个测量值标记为 m[i],其中 i 是第 i 个测量值,我们得到:

如果我们将数据代入,得到如下解:

所以,给定我们的七个观测值,我们最好的猜测是大约降了 6.31 英寸的雪。
平均值是我们从小就接受的技巧,因此将其应用于这个问题似乎显而易见,但实际上,很难推理为什么它有效以及它与概率的关系。毕竟,我们的每一项测量都不同,而且它们很可能与实际降雪量不同。几百年来,甚至伟大的数学家也害怕平均数据会把所有这些错误的测量加在一起,从而产生非常不准确的估计。
当我们估计参数时,理解为什么我们做出这个决策至关重要;否则,我们可能会使用一个无意中带有偏差或以其他方式系统性错误的估计。在统计学中,一个常见的错误是盲目应用程序而不理解它们,这常常导致将错误的解决方案应用于问题。概率是我们推理不确定性的工具,而参数估计可能是处理不确定性的最常见过程。让我们更深入地探讨一下平均值,看看是否能够更有信心地认为它是正确的路径。
解决我们问题的简化版
让我们简化一下我们的降雪问题:不再想象所有可能的雪深,而是想象雪落成均匀的块状,使得你的院子形成一个简单的二维网格。图 10-1 展示了这种完美均匀的 6 英寸深积雪,从侧面看的效果(而非鸟瞰图)。

图 10-1:可视化一个完全均匀的离散降雪
这是一个完美的场景。我们没有无限多个可能的测量值;相反,我们对六个可能的位置进行了抽样,每个位置只有一个可能的测量值——6 英寸。显然,在这种情况下,平均数是有效的,因为无论我们如何从这些数据中进行抽样,答案总是 6 英寸。
与此相比,图 10-2 展示了当我们考虑到风吹到你房子左侧的积雪时的数据。

图 10-2:表示被风吹移的积雪
现在,我们的问题不再是一个平滑的表面,而是引入了一些不确定性。当然,我们是在作弊,因为我们可以轻松地统计每一块雪并精确知道下了多少雪,但我们可以用这个例子来探索我们如何推理一个不确定的情况。让我们通过测量你院子里每一块积雪来开始调查我们的问题:
8, 7, 6, 6, 5, 4
接下来,我们希望为每个值关联一些概率。由于我们在作弊,并且知道实际的降雪量是 6 英寸,我们还会记录观察值与真实值之间的差异,这被称为误差值(参见表 10-1)。
表 10-1: 我们的观察值、它们的频率以及与真实值的差异
| 观测值 | 与真实值的差异 | 概率 |
|---|---|---|
| 8 | 2 | 1/6 |
| 7 | 1 | 1/6 |
| 6 | 0 | 2/6 |
| 5 | –1 | 1/6 |
| 4 | –2 | 1/6 |
看一下每个可能观测值与真实测量值之间的差异,我们可以看到,高估某个值的概率被低估某个值的概率所平衡。例如,有 1/6 的概率选择一个比真实值高 2 英寸的测量值,但同样也有相同的概率选择一个比真实值低 2 英寸的测量值。由此我们得出了第一个关键见解,为什么平均值有效:测量误差倾向于相互抵消。
解决一个更极端的案例
在这种平滑的误差分布下,之前的情境可能没有让你相信,在更复杂的情况下,误差会相互抵消。为了证明这种效果在其他情况下依然成立,让我们看一个更极端的例子。假设风将 21 英寸的雪吹到了六个方格中的一个,而其余方格的积雪仅为 3 英寸,如图 10-3 所示。

图 10-3:风将雪吹移的极端案例
现在我们有了一个非常不同的降雪分布。首先,与前面的例子不同,我们可以采样的值中没有任何一个代表真实的降雪量。此外,我们的误差不再是均匀分布的——我们有一堆低于预期的测量值,还有一个极高的测量值。表 10-2 显示了可能的测量值、与真实值的差异以及每个测量值的概率。
表 10-2: 我们极端案例的观测值、差异和概率
| 观测值 | 与真实值的差异 | 概率 |
|---|---|---|
| 21 | 15 | 1/6 |
| 3 | –3 | 5/6 |
很显然,我们不能简单地将一个观测值的误差值与另一个观测值的误差值匹配,然后让它们相互抵消。然而,我们可以利用概率来展示,即使在这种极端分布下,我们的误差依然能够相互抵消。我们可以通过把每个误差测量值看作是由我们的数据进行投票的结果来做到这一点。每个观察到的误差的概率就是我们对该误差的信任度。当我们想要结合这些观测值时,可以将观测值的概率看作是表示其对最终估计的投票强度的值。在这种情况下,–3 英寸的误差比 15 英寸的误差更可能出现五倍,因此–3 会被加权得更重。所以,如果我们进行投票,–3 会获得五票,而 15 只会获得一票。我们通过将每个值乘以其概率并将它们加在一起,来合并所有的投票,从而得到加权和。在极端情况下,当所有值都相同,我们只会将观察到的值乘以 1,结果就是该值本身。在我们的示例中,我们得到:

每个观测值中的误差相互抵消,结果为 0!所以,再次说明,无论是否没有任何可能的值是真实的测量,或者误差分布是否不均,关键是当我们根据对该观测值的信任度来加权观测时,误差往往会相互抵消。
通过加权概率估计真实值
我们现在相当确定,真实测量值的误差会相互抵消。但我们仍然面临一个问题:我们一直在处理真实观测的误差,但要使用这些误差,我们需要知道真实值。当我们不知道真实值时,我们唯一能使用的就是我们的观测值,所以我们需要看看当我们对原始观测值进行加权求和时,误差是否仍然能够相互抵消。
为了证明我们的方法有效,我们需要一些“未知”的真实值。让我们从以下的误差开始:
2, 1, –1, –2
由于真实测量值是未知的,我们用变量t表示它,然后加上误差。现在我们可以根据每个观测值的概率对这些观测值进行加权:

我们所做的只是将误差加到常数值t上,这个t表示我们的真实测量值,然后根据每个结果的概率对其加权。我们这样做是为了看看是否仍然能够让误差相互抵消,最终只留下t值。如果是这样的话,我们可以期待即使在仅仅对原始观测值进行平均时,误差也能相互抵消。
我们的下一步是将概率权重应用于我们的项中的值,得到一个长的求和式:

如果我们重新排列这些项,将所有误差放在一起,我们可以看到我们的误差仍然会相互抵消,且加权后的t值的总和就是我们未知的真实值t:

这表明,即使我们将测量定义为一个未知的真实值t并添加一些误差值,误差仍然会相互抵消!最终我们只剩下t。即使我们不知道真实的测量值或真实的误差是什么,当我们对我们的值进行平均时,误差往往会相互抵消。
在实践中,我们通常无法对所有可能的测量空间进行采样,但我们拥有的样本越多,误差就越有可能被抵消,一般来说,我们的估计会越接近真实值。
定义期望、均值和平均数
我们在这里得到的正式称为数据的期望或均值。它只是每个值按其概率加权后的总和。如果我们将每个测量值表示为x[i],每个测量的概率表示为p[i],我们可以通过以下方式数学定义均值——通常用μ(希腊字母 mu 的小写)表示:

明确来说,这与我们在小学时学到的平均数计算完全相同,只是用符号将概率的使用更加明确。举个例子,为了对四个数字求平均,在学校里我们写作:

这与写作是相同的:

或者我们可以直接说p[i] = 1/4,并写成:

所以,尽管均值实际上只是每个人都熟悉的平均数,但通过从概率原理构建它,我们可以看到为什么对数据进行平均有效。不管错误是如何分布的,一个极端的错误概率会被另一个极端的概率所抵消。当我们获取更多样本时,平均值更有可能被抵消,我们开始接近我们所寻找的真实测量值。
测量的均值与总结的均值
我们一直在使用均值来从具有一些误差的观察分布中估计一个真实的测量值。但是,均值通常用来作为总结一组数据的方式。例如,我们可能会提到如下内容:
-
一个人的平均身高
-
房屋的平均价格
-
学生的平均年龄
在所有这些情况下,我们并不是将均值作为单个真实测量的参数估计;相反,我们是在总结一个总体的属性。准确来说,我们在估计这些总体的某个抽象属性的参数,这些总体可能甚至并不真实。尽管均值是一个非常简单且众所周知的参数估计,但它很容易被滥用,导致奇怪的结果。
当你在计算数据的平均值时,你应该始终问自己一个基本问题:“我到底在尝试测量什么,这个值到底意味着什么?”以我们的降雪例子为例,答案很简单:我们试图估算昨晚下了多少雪,直到风把雪吹得四处飘散。然而,当我们在测量“平均身高”时,答案就不那么明确了。没有所谓的“平均人”,我们观察到的身高差异不是误差——它们是真正的身高差异。一个人并不是 5’5”因为他们的身高部分“漂移”到了一个 6’3”人的身上!
如果你正在建造一个游乐园,并想知道应该对过山车设置什么样的身高限制,以便至少一半的游客能乘坐,那么你有一个真正的值在测量。然而,在这种情况下,均值突然变得不那么有用。更好的衡量标准是估算进入你游乐园的人身高超过 x 的概率,其中 x 是乘坐过山车的最低身高。
本章中我所做的所有假设都认为我们正在尝试测量一个特定的值,并使用平均值来抵消误差。也就是说,我们将平均值作为一种参数估计的方法,其中我们的参数是一个我们永远无法知道的实际值。虽然平均值对于总结大量数据集也有用,但我们不能再使用“误差抵消”的直觉,因为数据中的变异是真实且有意义的变异,而不是测量中的误差。
总结
在本章中,你学习到,你可以信任自己关于通过平均测量来估算未知值的直觉。之所以如此,是因为误差往往会被抵消。我们可以将这种平均的概念正式化为期望值或均值。当我们计算均值时,我们是通过观察这些数据的概率来加权我们的所有观察结果。最后,尽管平均是一种简单的工具来理解,但我们应始终明确我们通过平均想要确定的内容;否则,我们的结果可能会失效。
练习
尝试回答以下问题,看看你对通过平均来估算未知测量值的理解程度。答案可以在 nostarch.com/learnbayes/ 中找到。
-
可能会出现一些误差,这些误差并不会完全像我们希望的那样被抵消掉。在华氏温标中,98.6 度是正常体温,100.4 度是发烧的典型温度阈值。假设你正在照顾一个感到发热且看起来生病的孩子,但你多次从温度计上读取的结果都在 99.5 度到 100.0 度之间:发热,但还不到发烧。你自己尝试温度计,得到的读数在 97.5 度到 98 度之间。那么,温度计可能出了什么问题?
-
假设你感觉健康并且通常体温一直保持正常,如何调整 100、99.5、99.6 和 100.2 这些测量值来估算孩子是否发烧?
第十一章:衡量数据的分布

在本章中,您将学习三种不同的方法——平均绝对偏差、方差和标准差——用于量化观察值的分布,或是观察值的不同极端。
在上一章中,您学习到均值是猜测未知测量值的最佳方法,而我们的观察值越分散,我们对均值的估计就越不确定。举个例子,如果我们仅根据两辆车拖走后的残留碎片的分布来推测车祸发生的位置,那么碎片分布越广,我们就越不确定两辆车到底在什么地方发生了碰撞。
因为我们的观察值的分布与测量的不确定性相关,所以我们需要能够量化它,以便可以对我们的估计做出概率性的陈述(您将在下一章学习如何做这件事)。
往井里丢硬币
假设您和一个朋友在树林里闲逛,偶然发现一个看起来很奇怪的旧井。您往井里看,发现它似乎没有底。为了测试井的深度,您从口袋里拿出一枚硬币并把它丢进去,果然,几秒钟后您听到了水花的声音。由此,您得出结论,井很深,但并不是没有底。
排除超自然因素后,您和您的朋友现在都同样好奇井到底有多深。为了收集更多的数据,您从口袋里拿出五枚硬币并将它们投入井中,得到了以下几次测量结果(单位:秒):
3.02, 2.95, 2.98, 3.08, 2.97
正如预期的那样,您发现结果有一些变化;这主要是因为确保从相同的高度和时间丢下硬币,并且准确记录水花的过程充满挑战。
接下来,您的朋友也想试着进行一些测量。与其挑选五枚大小相近的硬币,他拿起了一些形状各异的物体,从小石子到树枝都有。将它们投入井中,您的朋友得到了以下测量结果:
3.31, 2.16, 3.02, 3.71, 2.80
这两个样本的均值(μ)大约都是 3 秒钟,但您的测量值和您朋友的测量值的分布程度不同。本章的目标是找出一种方法,量化您和您朋友测量值分布的差异。我们将在下一章中使用这个结果,来确定我们估计值的某些范围的概率。
在本章的其余部分,我们将用变量a表示第一组值(您的观察值),用变量b表示第二组值(您朋友的观察值)。对于每一组,每个观察值都会有一个下标;例如,a[2]表示组a中的第二个观察值。
寻找平均绝对偏差
我们将从测量每个观测值与均值(μ)之间的差异开始。组a和组b的均值都是 3。由于μ是我们对真实值的最佳估计,从均值到每个观测值的距离可以作为量化这两个数据分布差异的起点。表 11-1 显示了每个观测值及其与均值的距离。
表 11-1: 你和你朋友的观测值及其与均值的差异
| 观测值 | 与均值的差异 |
|---|---|
| 组a | |
| 3.02 | 0.02 |
| 2.95 | –0.05 |
| 2.98 | –0.02 |
| 3.08 | 0.08 |
| 2.97 | –0.03 |
| 组b | |
| 3.31 | 0.31 |
| 2.16 | –0.84 |
| 3.02 | 0.02 |
| 3.71 | 0.71 |
| 2.80 | –0.16 |
注意
与误差值不同,均值的距离是从真实值的距离,而真实值在这种情况下是未知的。
量化两个数据分布差异的初步方法可能是直接将它们与均值的差异相加。然而,当我们尝试这个方法时,我们发现两个观测集的差异和是完全相同的,这很奇怪,因为两个数据集的分布差异明显:

我们不能简单地将与均值的差异相加的原因与均值本身的作用有关:正如我们在第十章中所知,误差往往相互抵消。我们需要的是一种数学方法,确保我们的差异在不影响测量有效性的情况下不会相互抵消。
差异相互抵消的原因是一些是负值,一些是正值。所以,如果我们将所有差异转换为正数,我们可以在不影响数值有效性的情况下解决这个问题。
最明显的做法是取差异的绝对值;这是该数值与 0 之间的距离,因此 4 的绝对值为 4,–4 的绝对值也为 4。这样我们就得到了负数的正值,而没有改变它们的本质。表示绝对值时,我们将数值用竖线括起来,如| –6 | = | 6 | = 6。
如果我们取表 11-1 中差异的绝对值,并将这些数值代入计算,我们得到一个可以继续使用的结果:

尝试手动计算,应该能得到相同的结果。这是我们特定情况中更有用的方法,但仅适用于两个样本组大小相同的情况。
假设我们有更多 40 个数据点来自组a—假设 20 个数据点为 2.9,20 个数据点为 3.1。即使有了这些额外的观测数据,组a的数据看起来比组b的分布更集中,但组a的绝对和现在是 85.19,仅仅因为它有更多的观测数据!
为了纠正这一点,我们可以通过除以观测值的总数来标准化我们的值。不过,我们不会直接进行除法,而是通过乘以总数的倒数,这被称为乘以倒数,其形式如下:

现在我们有了一个不依赖于样本大小的分布度量!这个方法的推广如下:

在这里,我们已经计算了观测值与均值之间的绝对差异的均值。这意味着,对于组a,平均观测值距离均值为 0.04,对于组b,则大约为 0.416 秒。我们将这个公式的结果称为平均绝对偏差(MAD)。MAD 是一个非常有用且直观的衡量标准,用于表示观测值的分布情况。鉴于组a的 MAD 为 0.04,而组b大约为 0.4,我们现在可以说,组b的分布大约是组a的 10 倍。
求方差
另一种在不失真数据的情况下使所有差异为正值的数学方法是将其平方:(x[i] – μ)²。与使用 MAD 相比,这种方法至少有两个好处。
第一个好处有点学术性:平方值在数学上比取绝对值更容易处理。在本书中,我们不会直接利用这一点,但对数学家来说,绝对值函数在实践中可能会有些麻烦。
第二个,更实际的原因是,平方会产生指数惩罚,意味着与均值相差较远的测量值会受到更大的惩罚。换句话说,小的差异不像大的差异那样重要,这也是我们直观上能够感受到的。如果有人把你的会议安排在错误的房间,比如,如果你最终进入了离正确房间很近的房间,你可能不会太生气;但如果你被送到了另外一个城市的办公室,你几乎肯定会感到不满。
如果我们将绝对值替换为平方差,我们得到如下公式:

这个公式在概率学的研究中占有非常特殊的地位,它被称为方差。请注意,方差的公式与 MAD 完全相同,唯一的不同是,MAD 中的绝对值函数被替换为平方函数。由于方差具有更好的数学性质,因此在概率学的研究中,方差比 MAD 使用得更频繁。我们可以通过计算方差来看到我们的结果有多么不同:
Var(group a) = 0.002, Var(group b) = 0.269
然而,因为我们在进行平方运算,所以我们不再能直观地理解方差结果的含义。MAD 给出了一个直观的定义:这是与均值的平均距离。方差则说:这是平均平方差。回想一下,当我们使用 MAD 时,组 b 的分布大约比组 a 大 10 倍,但在方差的情况下,组 b 的分布现在是 100 倍!
求标准差
虽然理论上方差有许多使其有用的特性,但在实际应用中它可能很难解读结果。人们很难理解 0.002 秒平方的差异意味着什么。正如我们所提到的,MAD 的好处在于其结果非常符合我们的直觉。如果组 b 的 MAD 是 0.4,那就意味着任何给定观测值与均值之间的平均距离确实是 0.4 秒。但对平方差进行平均时,我们就很难像 MAD 那样理性地思考结果。
为了解决这个问题,我们可以对方差取平方根,以便将其缩放回更符合我们直觉的数值。方差的平方根叫做标准差,用希腊字母小写西格玛(σ)表示。它的定义如下:

标准差的公式并不像一开始看起来那么可怕。仔细看看所有不同的部分,考虑到我们的目标是通过数字表示数据的分散程度,我们可以看到:
-
我们想要的是数据与均值之间的差异,x[i] – μ。
-
我们需要将负数转换为正数,因此我们取平方,(x[i] – μ)²。
-
我们需要把所有的差值加起来:
![图片]()
-
我们不希望求和结果受到观测数量的影响,因此我们使用 1/n进行标准化。
-
最后,我们对所有的数值取平方根,这样数字就会更接近如果我们使用更直观的绝对距离时的数值。
如果我们查看两组的标准差,就会发现它与 MAD 非常相似。
σ(组 a) = 0.046, σ(组 b) = 0.519
标准差是 MAD 的直观性与方差的数学简便性之间的一个平衡。请注意,就像在 MAD 中一样,b和a之间的分布差异是 10 的倍数。标准差如此有用且无处不在,以至于在大多数概率和统计学文献中,方差通常仅定义为σ²,或称为西格玛平方!
现在我们有了三种不同的测量数据分布的方法。我们可以在表 11-2 中看到这些结果。
表 11-2: 按方法测量的分布
| 测量分布的方法 | 组 a | 组 b |
|---|---|---|
| 平均绝对偏差 | 0.040 | 0.416 |
| 方差 | 0.002 | 0.269 |
| 标准差 | 0.046 | 0.519 |
这些测量分布的方法没有哪个比其他更正确。迄今为止,最常用的值是标准差,因为我们可以结合均值使用它来定义正态分布,而正态分布反过来又允许我们为测量值的可能真实值定义明确的概率。在下一章中,我们将介绍正态分布,并看看它如何帮助我们理解对测量结果的信心水平。
总结
在这一章中,你学习了三种量化一组观察值分布的方法。最直观的分布测量方法是平均绝对偏差(MAD),它是每个观察值与均值的平均距离。虽然直观,但与其他方法相比,MAD 在数学上并不那么有用。
数学上首选的方法是方差,它是我们观察值的平方差。然而,当我们计算方差时,我们会失去对计算结果的直观理解。
我们的第三个选择是使用标准差,它是方差的平方根。标准差在数学上有用,并且能给出合理直观的结果。
习题
尝试回答以下问题,看看你对这些不同的分布测量方法理解得如何。解答可以在 nostarch.com/learnbayes/ 中找到。
-
方差的一个好处是,平方差异使得惩罚呈指数级增长。举一些例子,说明这种性质在什么情况下是有用的。
-
计算以下值的均值、方差和标准差:1, 2, 3, 4, 5, 6, 7, 8, 9, 10。
第十二章:正态分布

在前两章中,你学到了两个非常重要的概念:均值(μ),它使我们能够从多次观察中估算一个测量值;标准差(σ),它使我们能够衡量观察结果的分散程度。
每个概念单独来看都很有用,但结合在一起时,它们的威力更大:我们可以将它们作为最著名的概率分布——正态分布的参数。
在这一章中,你将学习如何使用正态分布来确定关于某个估算值的确切概率,看看它与其他估算值相比的可信度。参数估计的真正目标不仅仅是估算一个值,而是为一组可能值分配一个概率。这使得我们可以对不确定的值进行更复杂的推理。
在前一章中我们已经确定,均值是基于现有数据估算未知值的可靠方法,而标准差可以用来衡量数据的分散程度。通过衡量我们观察值的分散程度,我们可以确定对均值的信心水平。可以理解的是,观察值越分散,我们对均值的信心就越小。正态分布使我们能够精确量化在考虑到我们的观察结果时,我们在各种信念中有多么确定。
为了邪恶目的测量引线
想象一个留着胡子的卡通反派,他想引爆炸弹打破银行金库的门。不幸的是,他只有一颗炸弹,而且炸弹相当大。他知道,如果他离炸弹 200 英尺远,他就可以安全逃生。这需要他 18 秒钟的时间。如果他离炸弹太近,就有死亡的风险。
尽管反派只有一颗炸弹,但他有六根相同大小的引线,因此他决定测试其中五根引线,最后一根留给炸弹。这些引线大小相同,燃烧时间也应该相同。他点燃每根引线并测量燃烧的时间,以确保他有 18 秒钟的时间逃跑。当然,由于匆忙,测量结果有些不一致。以下是他记录的每根引线燃烧所需的时间(单位:秒):19、22、20、19、23。
到目前为止一切顺利:没有一根引线的燃烧时间少于 18 秒。计算均值得到μ = 20.6,计算标准差得到σ = 1.62。
但现在我们想要确定一个具体的概率,即根据我们观察到的数据,引线在少于18 秒内引爆的可能性。因为反派更重视自己的生命而非金钱,他希望自己有 99.9%的把握能在爆炸中生还,否则他就不会尝试抢劫。
在第十章中,你了解到均值是给定一组测量值时对真实值的良好估计,但我们尚未提出任何方法来表达我们对这个值的信任程度。
在第十一章中,你了解到可以通过计算标准差来量化观察值的分散程度。这似乎是合乎逻辑的,因为这也可能帮助我们弄清楚均值的替代值有多可能。例如,假设你打破了一个玻璃杯,它碎了。当你清理时,你可能会根据玻璃碎片的分散程度在相邻的房间进行搜索。如果,如图 12-1 所示,碎片非常接近,你会更有信心认为不需要检查下一个房间是否有玻璃碎片。

图 12-1:当碎片靠得很近时,你更能确定清理的地方。
然而,如果玻璃碎片分布广泛,如图 12-2 所示,即使你没有立即在下一个房间看到玻璃碎片,你也很可能会想要在下一个房间的入口附近进行清扫。同样,如果坏人的引信时间非常分散,即使他没有观察到任何引信在 18 秒以内燃烧,实际上也有可能引信在不到 18 秒的时间内燃尽。

图 12-2:当碎片分散开时,你无法确定它们可能在哪个位置。
当观察值在视觉上分散时,我们直观地感到,可能还有其他观察值存在于我们能够看到的极限之外。我们也对中心位置的确定不那么自信。在玻璃的例子中,如果你没有亲眼目睹玻璃掉落,并且玻璃碎片被广泛分散,那么就更难确定玻璃掉落的具体位置。
我们可以用最广泛研究和最著名的概率分布来量化这种直觉:正态分布。
正态分布
正态分布是一种连续的概率分布(类似于第五章中的贝塔分布),它最好地描述了在已知均值和标准差的情况下,不确定测量值的可能信度强度。它将 μ 和 σ(均值和标准差)作为其唯一的两个参数。均值 μ = 0 且标准差 σ = 1 的正态分布呈钟形,如图 12-3 所示。

图 12-3:一个均值 μ = 0 且标准差 σ = 1 的正态分布
如你所见,正态分布的中心是它的均值。正态分布的宽度由其标准差决定。图 12-4 和 12-5 分别展示了均值 μ = 0 和标准差 σ = 0.5 和 2 的正态分布。

图 12-4:一个均值 μ = 0 且标准差 σ = 0.5 的正态分布

图 12-5:一个均值为μ = 0,标准差为σ = 2 的正态分布
当标准差缩小时,正态分布的宽度也会缩小。
正态分布,正如我们所讨论的,反映了我们对均值的信任程度。因此,如果我们的观察值更加分散,我们会相信可能值的范围更广,并且对中心均值的信心较低。相反,如果我们的所有观察值差不多(即σ较小),我们会认为我们的估计相当准确。
当我们对一个问题知道的唯一信息仅仅是我们观察到的数据的均值和标准差时,正态分布是最诚实的信念状态的表示。
解决保险丝问题
回到我们最初的问题,我们有一个均值为μ = 20.6,标准差为σ = 1.62 的正态分布。除了记录的燃烧时间,我们实际上并不知道保险丝的其他特性,所以我们可以使用观察到的均值和标准差来模拟数据,使用正态分布(参见图 12-6)。

图 12-6:一个均值为μ = 20.6,标准差为σ = 1.62 的正态分布
我们要回答的问题是:根据已观察到的数据,保险丝持续 18 秒或更短时间的概率是多少?为了解决这个问题,我们需要使用概率密度函数(PDF),这是你在第五章首次接触的概念。正态分布的 PDF 是:

要得到概率,我们需要对小于 18 的值进行积分:

你可以将积分想象成简单地求出你感兴趣的区域下的曲线面积,如图 12-7 所示。

图 12-7:我们感兴趣的曲线下的区域
这一区域的面积表示保险丝在给定观察条件下持续 18 秒或更短时间的概率。注意,尽管观察到的所有值都不小于 18,但由于观察值的分布,图 12-6 中的正态分布仍然显示 18 秒或更短时间是可能的。通过对所有小于 18 的值进行积分,我们可以计算出保险丝不会持续到我们所需的时间的概率。
手动对这个函数进行积分并不是一项容易的任务。幸运的是,我们有 R 来为我们进行积分。
但在我们开始积分之前,我们需要确定从哪个数字开始积分。正态分布定义在从负无穷(–∞)到正无穷(∞)的所有可能值的范围内。所以从理论上讲,我们想要的是什么呢:

但显然,我们无法在计算机上从负无穷大积分我们的函数!幸运的是,正如你在图 12-6 和 12-7 中看到的,概率密度函数会非常迅速地变成一个极小的值。我们可以看到,PDF 中的线条在 10 附近几乎是平的,这意味着该区域几乎没有概率,因此我们可以从 10 积分到 18。我们也可以选择一个更低的值,比如 0,但由于该区域的概率几乎为零,这不会对我们的结果产生任何实质性的影响。在下一节中,我们将讨论一个启发式方法,它可以让选择下限或上限变得更加容易。
我们将使用 R 的integrate()函数和dnorm()函数(它只是 R 中用于正态分布 PDF 的函数)来对这个函数进行积分,并计算正态分布的 PDF,如下所示:
integrate(function(x) dnorm(x,mean=20.6,sd=1.62),10,18)
0.05425369 with absolute error < 3e-11
将值四舍五入,我们可以看到P(保险丝时间 < 18) = 0.05,告诉我们保险丝有 5%的几率在 18 秒或更短时间内烧断。即使是恶棍也珍惜自己的生命,在这种情况下,我们的恶棍只有在 99.9%确定自己能安全逃离爆炸时才会尝试银行抢劫。那么今天,银行是安全的!
正态分布的强大之处在于,我们可以以概率的方式推理均值的各种可能替代方案,从而让我们了解均值的现实性。每当我们只知道均值和标准差时,我们都可以使用正态分布来推理数据。
然而,这也是正态分布的危险所在。实际上,如果你在问题中有除了均值和标准差之外的信息,通常最好利用这些信息。我们将在后续的章节中看到这个例子。
一些技巧与直觉
尽管 R 使得积分正态分布比手工解积分要容易得多,但当你处理正态分布时,有一个非常有用的技巧,可以进一步简化问题。对于任何具有已知均值和标准差的正态分布,你可以通过σ来估算均值周围的曲线下的面积。
例如,从μ - σ(均值减去一个标准差)到μ + σ(均值加上一个标准差)范围内的曲线下的面积包含了分布的 68%的质量。
这意味着 68%的可能值落在均值的±一个标准差范围内,如图 12-8 所示。

图 12-8:68%的概率密度(曲线下的面积)位于均值的一个标准差范围内。
我们可以继续通过将均值的距离增加为σ的倍数。 表 12-1 给出了这些其他区域的概率。
表 12-1: 不同均值下的曲线下的面积
| 均值的距离 | 概率 |
|---|---|
| σ | 68 百分比 |
| 2σ | 95 百分比 |
| 3σ | 99.7 百分比 |
这个小技巧非常有用,可以快速评估即使在样本较小的情况下,一个值的可能性。你只需要一个计算器,就可以轻松算出μ和σ,这意味着你甚至在开会中也能做出相当准确的估算!
举个例子,在第十章中测量降雪量时,我们得到了以下数据:6.2、4.5、5.7、7.6、5.3、8.0、6.9。对于这些数据,均值是 6.31,标准差是 1.17。这意味着我们可以有 95% 的把握,真实的降雪量介于 3.97 英寸(6.31 - 2 × 1.17)和 8.65 英寸(6.31 + 2 × 1.17)之间。无需手动计算积分或启动计算机使用 R!
即使我们 确实 想用 R 来进行积分,这个技巧也可以帮助我们确定积分的最小值或最大值。例如,如果我们想知道反派的炸弹引线能持续超过 21 秒的概率,我们不想从 21 积分到无穷大。我们可以用什么作为我们的上界?我们可以从 21 积分到 25.46(即 20.6 + 3 × 1.62),这相当于距离均值 3 个标准差。从均值偏离 3 个标准差将涵盖我们总概率的 99.7%。剩下的 0.3% 位于分布的两侧,所以只有一半,也就是 0.15% 的概率密度,位于大于 25.46 的区域。因此,如果我们从 21 积分到 25.46,我们的结果将仅少量遗漏一些概率。显然,我们完全可以使用 R 从 21 积分到一个更安全的值,比如 30,但这个技巧帮助我们理解“真正安全”意味着什么。
“N Sigma” 事件
你可能听过用 sigma 事件 来描述某个事件,比如“股价下跌是一个八 sigma 事件。”这个表达的意思是,观察到的数据距离均值有八个标准差。从表 12-1 中我们看到,均值上下的一个、两个和三个标准差分别对应 68%、95% 和 99.7% 的概率。从这些数据你可以直观地理解,一个八 sigma 事件一定是极不可能发生的。实际上,如果你观察到的数据距离均值有五个标准差,那么很可能意味着你的正态分布没有准确地模拟基础数据。
为了展示随着 n sigma 增加事件的稀有性变化,假设你正在观察某一天可能会发生的事件。有些事件非常常见,比如醒来看到日出。其他则不那么常见,比如醒来发现今天是你的生日。表 12-2 显示了每增加一个 sigma,预期事件发生所需要的天数。
表 12-2: 事件的稀有性随着 n Sigma 增加而变化
| (–/+) 距离均值 | 预期每…… |
|---|---|
| σ | 3 天 |
| 2σ | 3 周 |
| 3σ | 1 年 |
| 4σ | 4 十年 |
| 5σ | 5000 年 |
| 6σ | 140 万年 |
所以,三西格玛事件就像是醒来发现今天是你的生日,而六西格玛事件则像是醒来发现一颗巨大的小行星正朝地球撞来!
贝塔分布与正态分布
你可能还记得在第五章中,贝塔分布让我们在观察到α个期望结果和β个非期望结果后估计真实的概率,其中总的结果数为α + β。基于这一点,你可能对以下观点提出质疑:正态分布真的是建模参数估计的最佳方法吗,尤其是在我们仅知道某个数据集的均值和标准差的情况下。毕竟,我们可以描述一个情形,其中α = 3,β = 4,只需观察到三个值为 1 的结果和四个值为 0 的结果即可。这将给我们μ = 0.43 和σ = 0.53。然后,我们可以将α = 3 和β = 4 的贝塔分布与μ = 0.43 和σ = 0.53 的正态分布进行比较,如图 12-9 所示。

图 12-9:比较贝塔分布与正态分布
很明显,这些分布是非常不同的。我们可以看到,对于这两种分布,质量中心大致位于同一位置,但正态分布的边界远远超出了我们图表的范围。这表明一个关键点:只有在你对数据一无所知,除了它的均值和方差时,才可以假设数据服从正态分布。
对于贝塔分布,我们知道我们所寻找的值必须位于 0 到 1 之间。正态分布定义从–∞到∞,这通常包括一些不可能存在的值。然而,在大多数情况下,这并不重要,因为在概率意义上,极端的测量值几乎是不可能的。但对于我们测量事件发生概率的例子来说,这些缺失的信息对建模我们的问题是重要的。
所以,尽管正态分布是一个非常强大的工具,但它无法替代对问题的更多信息的了解。
总结
正态分布是使用均值估计观察值的扩展。正态分布将均值和标准差结合起来,模拟我们的观察值与均值之间的分布。这一点很重要,因为它允许我们以概率的方式推理测量中的误差。我们不仅可以使用均值做出最佳猜测,还可以对估计值的可能范围做出概率性陈述。
练习
尝试回答以下问题,以了解你对正态分布的理解程度。解决方案可以在nostarch.com/learnbayes/找到。
-
观察到一个值比平均值大五个标准差或更多的概率是多少?
-
发热是指温度高于 100.4 华氏度。根据以下测量值,患者发热的概率是多少?
100.0, 99.8, 101.0, 100.5, 99.7
-
假设在第十一章中,我们尝试通过计时投掷硬币来测量井的深度,并得到了以下数值:
2.5, 3, 3.5, 4, 2
一个物体下落的距离可以通过以下公式计算(单位:米):
distance = 1/2 × G × time²
其中 G 为 9.8 米/秒²。井深超过 500 米的概率是多少?
-
没有井的概率是多少(即井的深度为 0 米)?你会注意到,这个概率比你预期的要高,考虑到你观察到确实有井。对于这个概率比预期高,有两个合理的解释。第一个是正态分布模型不适用于我们的测量;第二个是,在举例时我选择了你在现实生活中不太可能看到的数值。你认为哪个更有可能?
第十三章:参数估计的工具:PDF、CDF 和分位数函数**

目前为止,我们重点关注了正态分布的构建块及其在参数估计中的应用。在本章中,我们将深入探讨一些数学工具,帮助我们对参数估计做出更精确的推断。我们将通过一个实际问题,展示如何使用各种度量、函数和可视化方法从不同角度来解决它。
本章将深入讨论概率密度函数(PDF);介绍累积分布函数(CDF),它帮助我们更容易地确定值的范围概率;并介绍分位数,它将我们的概率分布分成具有相等概率的部分。例如,百分位数是 100 分位数,意味着它将概率分布分成 100 个相等的部分。
估计邮件注册列表的转化率
假设你经营一个博客,并想知道访问你博客的用户订阅你邮件列表的概率。从营销的角度来看,让用户执行一个期望的事件被称为转化事件,或简称转化,而用户订阅的概率就是转化率。
正如在第五章中讨论的那样,当我们知道订阅人数(k)和总访问人数(n)时,我们会使用贝塔分布来估计p,即订阅的概率。贝塔分布所需的两个参数是α,在本例中表示总的订阅人数(k),和β,表示未订阅的人数(n - k)。
当介绍贝塔分布时,你只了解了它的基本外观和行为方式。现在,你将看到如何将其作为参数估计的基础。我们不仅要为我们的转化率做出单一的估计,还要得出一个可能值范围,在这个范围内我们可以非常自信地认为真实的转化率落在其中。
概率密度函数
我们将使用的第一个工具是概率密度函数。到目前为止,我们在本书中已经多次见到过 PDF:在第五章中,我们讨论了贝塔分布;在第九章中,我们使用 PDF 来结合贝叶斯先验;在第十二章中,我们再次讨论了正态分布。PDF 是一个函数,它接受一个值并返回该值的概率。
在估计你邮件列表的真实转化率时,假设在前 40,000 个访问者中,你获得了 300 个订阅者。我们问题的 PDF 是贝塔分布,其中α = 300,β = 39,700:

我们花了很多时间讨论在给定一定不确定性的情况下,使用均值作为衡量标准的好处。大多数 PDF 都有一个均值,我们可以通过如下方法专门为贝塔分布计算均值:

这个公式相对直观:只需将我们关心的结果数(300)除以所有结果的总数(40,000)。这与如果我们将每封邮件看作是 1 的观测值,其他邮件看作是 0 的观测值并对它们求平均时得到的均值是一样的。
均值是我们估算真实转化率参数的第一次尝试。但我们仍然希望了解转化率的其他可能值。让我们继续探索 PDF,看看还能学到什么。
可视化和解读 PDF
PDF 通常是理解概率分布的首选方法。图 13-1 展示了博客转化率的贝塔分布的 PDF。

图 13-1:可视化我们对真实转化率的贝塔 PDF 的信念
这个 PDF 代表了什么?从数据中我们知道,博客的平均转化率就是

或者说,我们分布的均值。转化率恰好为 0.0075 的可能性似乎不大,而是比如 0.00751。我们知道,PDF 下的总面积必须加起来为 1,因为这个 PDF 代表了所有可能估计的概率。我们可以通过观察我们关心的范围内 PDF 下的面积,估算我们真实转化率的取值范围。在微积分中,这个曲线下的面积就是积分,它告诉我们,在我们感兴趣的 PDF 区域内,总概率有多少。这就像我们在前一章中用正态分布做积分一样。
鉴于我们对测量值有不确定性,并且我们已经有了均值,调查真实转化率比我们观察到的均值 0.0075 高或低 0.001 的可能性会很有用。这样做可以为我们提供一个可接受的误差范围(也就是说,我们对这个范围内的任何值都感到满意)。为此,我们可以计算实际转化率低于 0.0065 的概率,以及实际转化率高于 0.0085 的概率,然后进行比较。我们实际转化率远低于观察值的概率可以通过如下方式计算:

记住,当我们对一个函数进行积分时,我们实际上是在将函数的所有小部分相加。所以,如果我们对α为 300、β为 39,700 的贝塔分布从 0 到 0.0065 进行积分,我们实际上是在将这一范围内所有值的概率加起来,并确定我们真实的转化率位于 0 到 0.0065 之间的概率。
我们也可以提出有关另一个极端的问题,例如:我们是否有可能获得一个异常糟糕的样本,导致我们的真实转化率实际上更高,比如大于 0.0085(意味着转化率比我们预期的更好)?

在这里,我们从 0.0085 到最大可能值 1 进行积分,以确定我们的真实值落在这个范围内的概率。因此,在这个例子中,我们观察到的转化率高出 0.001 或更多的概率,实际上比它低于 0.001 或更糟的概率要大。这意味着,如果我们必须在有限的数据下做出决定,我们仍然可以计算出一个极端比另一个极端更可能的程度:

因此,我们的真实转化率大于 0.0085 的概率比低于 0.0065 的概率高出 50%。
在 R 中使用 PDF
在本书中,我们已经使用了两个 R 函数来处理 PDF(概率密度函数),分别是dnorm()和dbeta()。对于大多数常见的概率分布,R 支持一个等效的dfunction()函数来计算 PDF。
像dbeta()这样的函数也用于近似连续 PDF,例如,当你想快速绘制像这样的值时:
xs <- seq(0.005,0.01,by=0.00001)
xs.all <- seq(0,1,by=0.0001)
plot(xs,dbeta(xs,300,40000-300),type='l',lwd=3,
ylab="density",
xlab="probability of subscription",
main="PDF Beta(300,39700)")
注意
要理解绘图代码,请参阅附录 A。
在这个示例代码中,我们创建了一个值序列,每个值相差 0.00001——虽然很小,但不像在真正的连续分布中那样无限小。尽管如此,当我们绘制这些值时,我们看到的图形看起来足够接近一个真正的连续分布(如图 13-1 所示)。
引入累积分布函数
PDF 的最常见数学用途是积分,用于求解与各种范围相关的概率,就像我们在上一节中做的那样。然而,我们可以通过使用cdf(累积分布函数)来节省大量的努力,它将我们的分布的所有部分求和,从而替代了大量的微积分工作。
CDF(累积分布函数)接受一个值并返回该值或更低值的概率。例如,当x = 0.0065 时,Beta(300,397000)的 CDF 值约为 0.008。这意味着真实转化率为 0.0065 或更低的概率是 0.008。
CDF 通过计算 PDF 下的累积面积来获得这个概率(对于熟悉微积分的人来说,CDF 是 PDF 的反导数)。我们可以将这个过程总结为两步:(1)计算 PDF 每个值下的累积面积,(2)绘制这些值。这就是我们的 CDF。曲线在任何给定 x 值处的值表示获取x或更低值的概率。在 0.0065 处,曲线的值为 0.008,就像我们之前计算的那样。
为了理解这一点,我们将问题的 PDF 分成 0.0005 的小块,并关注 PDF 中概率密度最大的区域:0.006 到 0.009 之间的区域。
图 13-2 展示了 Beta(300,39700) PDF 的曲线下的累计面积。如你所见,我们的累计面积考虑了左侧所有区域的面积。

图 13-2:可视化曲线下的累计面积
从数学角度讲,图 13-2 表示以下积分序列:

使用这种方法,随着我们沿着 PDF 移动,我们考虑的概率越来越高,直到我们的总面积为 1,或者说是完全的确定性。为了将其转化为 CDF,我们可以想象一个函数,只考虑这些曲线下的区域。图 13-3 展示了如果我们绘制每个点下的面积(这些点相隔 0.0005),会发生什么。
现在我们有了一种可视化方法,可以展示随着我们沿着 PDF 的值移动,曲线下的累计面积是如何变化的。当然,问题在于我们使用的是这些离散的块。在现实中,CDF 只是使用 PDF 的无穷小片段,因此我们得到了一个平滑的曲线(参见图 13-4)。
在我们的例子中,我们直观地推导了 CDF。从数学上推导 CDF 要困难得多,通常会导致非常复杂的方程式。幸运的是,通常我们使用代码来处理 CDF,正如我们在接下来的几个部分中将看到的那样。

图 13-3:仅绘制图 13-2 中的累计概率

图 13-4:我们问题的 CDF
可视化与解释 CDF
PDF 在视觉上最有用的是快速估计分布的峰值位置,并且大致了解分布的宽度(方差)和形状。然而,使用 PDF 很难通过视觉推断各种范围的概率。CDF 在这方面是一个更好的工具。例如,我们可以使用图 13-4 中的 CDF,直观地推理出比单独使用 PDF 更广泛的概率估计范围。让我们通过几个可视化示例来了解如何使用这个强大的数学工具。
寻找中位数
中位数是数据中一半值位于一侧,另一半值位于另一侧的点——它是我们数据的确切中间 值。换句话说,某个值大于中位数的概率和小于中位数的概率都是 0.5。中位数在数据包含极端值的情况下特别有用,能够很好地总结数据。
与均值不同,计算中位数实际上可能相当复杂。对于小的离散情况,它就像是将观察值排序后选取中间的值那么简单。但对于像我们的贝塔分布这样的连续分布,就要复杂一些。
幸运的是,我们可以在 CDF 的可视化图上轻松找到中位数。我们只需从累积概率为 0.5 的点画一条线,意味着 50%的值在此点以下,50%的值在此点以上。正如图 3-5 所示,这条线与 x 轴交点的地方就是我们的中位数!

图 13-5:使用 CDF 直观估计中位数
我们可以看到数据的中位数大约在 0.007 和 0.008 之间(这恰好非常接近均值 0.0075,意味着数据并没有特别偏斜)。
通过可视化逼近积分
在处理概率范围时,我们通常需要知道真实值位于某个值y和某个值x之间的概率。
我们可以通过积分来解决这类问题,但即使 R 使得解决积分变得更容易,理解数据并且不断依赖 R 来计算积分仍然是非常耗时的。由于我们所需要的只是一个粗略的估计,即访客订阅博客的概率落在某个特定范围内,我们并不需要使用积分。累积分布函数(CDF)使得我们非常容易通过观察来判断某个范围的值是否具有很高或很低的发生概率。
为了估计转化率介于 0.0075 和 0.0085 之间的概率,我们可以从 x 轴的这些点画出线条,然后查看它们与 y 轴相交的地方。这两点之间的距离就是近似的积分,如图 13-6 所示。

图 13-6:通过 CDF 直观执行积分
我们可以看到,在 y 轴上,这些值的范围大约从 0.5 到 0.99,意味着我们的真实转化率位于这两个值之间的概率大约是 49%。最棒的是我们不需要做任何积分!这当然是因为 CDF 表示的是从函数的最小值到所有可能值的积分。
因此,几乎所有关于参数估计的概率性问题都涉及了解某些信念范围相关的概率,CDF 通常比概率密度函数(PDF)更为有用的可视化工具。
估计置信区间
观察值范围的概率会引导我们到一个非常重要的概率概念:置信区间。置信区间是一个值的上下界,通常围绕均值,描述一个高概率范围,通常是 95%、99% 或 99.9%。当我们说“95% 置信区间为 12 到 20”时,我们的意思是我们的真实测量值有 95% 的概率位于 12 和 20 之间。置信区间提供了一种很好的方法来描述在处理不确定信息时的可能范围。
注意
在贝叶斯统计中,我们称之为“置信区间”的东西还有其他一些名字,如“临界区域”或“临界区间”。在一些更传统的统计学派中,“置信区间”有稍微不同的含义,这超出了本书的范围。
我们可以使用 CDF 来估计置信区间。假设我们想知道覆盖真实转换率 80% 可能值的范围。我们通过结合之前的方法来解决这个问题:我们从 y 轴上的 0.1 和 0.9 画出线条,覆盖 80%的区域,然后简单地查看这些线条与我们的 CDF 在 x 轴上的交点,如 图 13-7 所示。

图 13-7:通过 CDF 直观估计我们的置信区间
如你所见,x 轴大约在 0.007 和 0.008 处交叉,这意味着我们的真实转换率有 80% 的概率位于这两个值之间。
在 R 中使用 CDF
就像几乎所有主要的 PDF 函数都以 d 开头,例如 dnorm(),CDF 函数则以 p 开头,如 pnorm()。在 R 中,要计算 Beta(300,39700) 小于 0.0065 的概率,我们可以像这样简单地调用 pbeta():
pbeta(0.0065,300,39700)
> 0.007978686
而要计算转换率大于 0.0085 的真实概率,我们可以这样做:
pbeta(1,300,39700) - pbeta(0.0085,300,39700)
> 0.01248151
CDF 的一个优点是,无论你的分布是离散的还是连续的,都可以使用。如果我们想确定在五次掷硬币中得到三次或更少正面朝上的概率,例如,我们可以像这样使用二项分布的 CDF:
pbinom(3,5,0.5)
> 0.8125
分位数函数
你可能已经注意到,我们通过 CDF 直观获取的中位数和置信区间不容易通过数学方法计算出来。通过可视化,我们只是从 y 轴画线,然后用这些线来找到 x 轴上的一个点。
从数学上讲,CDF 就像任何其他函数,它接受一个x值,通常代表我们试图估算的值,并给出一个y值,代表累积概率。但没有明显的方法可以逆向操作;也就是说,我们无法给这个函数一个y值来得到x值。举个例子,假设我们有一个平方值的函数。我们知道 square(3) = 9,但我们需要一个全新的函数——平方根函数——才能知道 9 的平方根是 3。
然而,逆向操作正是我们在上一节中做的,即估算中位数:我们查看 y 轴上的 0.5,然后追溯到 x 轴。我们在视觉上所做的就是计算 CDF 的反函数。
虽然在视觉上计算 CDF 的反函数对于估算来说很简单,但我们需要一个单独的数学函数来精确计算它。CDF 的反函数是一个极其常见且有用的工具,称为分位数函数。为了计算我们中位数和置信区间的精确值,我们需要使用 beta 分布的分位数函数。就像 CDF 一样,分位数函数在数学上通常很难推导和使用,因此我们通常依赖软件来为我们完成繁重的工作。
可视化和理解分位数函数
因为分位数函数只是 CDF 的反函数,它看起来就像 CDF 旋转了 90 度,如图 13-8 所示。

图 13-8:从视觉上看,分位数函数只是 CDF 的旋转。
每当你听到类似以下的短语时:
“前 10%的学生...”
“最低 20%的收入者赚得比...还少...”
“最高四分位的表现显著优于...”
你在谈论通过分位数函数找到的值。要通过图形查找分位数,只需在 x 轴上找到你感兴趣的数量,然后查看它与 y 轴相交的地方。y 轴上的值就是该分位数的值。记住,如果你在谈论“前 10%”,实际上你要的是 0.9 分位数。
在 R 中计算分位数
R 还包括qnorm()函数,用于计算分位数。这个函数对于快速回答关于我们概率分布的边界值问题非常有用。例如,如果我们想知道 99.9%的分布小于的值,我们可以使用qbeta(),将我们感兴趣的分位数作为第一个参数,beta 分布的 alpha 和 beta 参数作为第二个和第三个参数,像这样:
qbeta(0.999,300,39700)
> 0.008903462
结果是 0.0089,这意味着我们可以 99.9%确定我们邮件的真实转化率低于 0.0089。接着,我们可以使用分位数函数快速计算我们的估计值的置信区间的确切值。为了找到 95%的置信区间,我们可以找到大于 2.5%下分位数的值和小于 97.5%上分位数的值,它们之间的区间就是 95%的置信区间(未考虑的区域占两端概率密度的 5%)。我们可以使用qbeta()轻松计算这些:
我们的下限是qbeta(0.025,300,39700) = 0.0066781
我们的上限是qbeta(0.975,300,39700) = 0.0083686
现在我们可以有信心地说,我们 95%确定博客访问者的真实转化率介于 0.67%和 0.84%之间。
当然,我们可以根据需要的置信度调整这些阈值。现在我们拥有了所有的参数估计工具,我们可以轻松确定转化率的精确范围。好消息是,我们还可以用这个方法预测未来事件的值范围。
假设你博客上的一篇文章突然火了,得到了 100,000 个访问者。根据我们的计算,我们知道应该期望会有 670 到 840 个新的邮件订阅者。
总结
我们已经讨论了很多内容,并探讨了概率密度函数(PDF)、累积分布函数(CDF)和分位数函数之间的有趣关系。这些工具构成了我们如何估计参数并计算我们对这些估计的置信度的基础。这意味着我们不仅可以对一个未知值做出良好的猜测,还可以确定非常强的置信区间,代表一个参数可能的值。
练习
尝试回答以下问题,看看你对参数估计工具的理解有多深。解决方案可以在nostarch.com/learnbayes/找到。
-
使用第 127 页中绘制 PDF 的代码示例,绘制 CDF 和分位数函数。
-
回到第十章中测量降雪的任务,假设你有以下的降雪量测量数据(单位:英寸):
7.8, 9.4, 10.0, 7.9, 9.4, 7.0, 7.0, 7.1, 8.9, 7.4
你对于真实降雪量的 99.9%置信区间是多少?
-
一个孩子正在挨家挨户地卖巧克力棒。到目前为止,她已经拜访了 30 家并卖出了 10 根巧克力棒。今天她还会拜访 40 家。她今天剩下的时间会卖出多少巧克力棒的 95%置信区间是多少?
第十四章:带有先验概率的参数估计

在上一章中,我们看到了如何使用一些重要的数学工具来估计博客访问者订阅电子邮件列表的转化率。然而,我们还没有覆盖参数估计中最重要的部分之一:利用我们对问题的现有信念。
在本章中,你将看到我们如何将先验概率与观察到的数据结合起来,得出一个更好的估计,这个估计将现有知识与我们收集到的数据融合在一起。
预测电子邮件转化率
为了理解随着我们获得更多信息,贝塔分布如何变化,我们来看另一个转化率的例子。在这个例子中,我们将尝试确定,当订阅者打开你的邮件时,他们点击链接的概率。大多数提供电子邮件列表管理服务的公司会实时告诉你,有多少人打开了邮件并点击了链接。
目前我们的数据显示,在前五个打开邮件的人中,有两个点击了链接。图 14-1 显示了我们针对这些数据的贝塔分布。

图 14-1:目前为止我们观察到的贝塔分布
图 14-1 显示了 Beta(2,3) 分布。我们使用这些数字,因为有两个人点击了链接,三个人没有点击。与上一章中我们有一个相对较窄的可能值峰值不同,在这里,由于我们所掌握的信息非常有限,真实转化率的可能值范围非常广。图 14-2 显示了此数据的 CDF,帮助我们更容易地推理这些概率。
95% 的置信区间(即真实转化率有 95% 的概率落在这个范围内)已经标出,方便查看。在这个点上,我们的数据告诉我们,真实的转化率可能在 0.05 到 0.8 之间!这反映了我们目前为止获得的信息是多么有限。鉴于我们已有两个转化,我们知道真实的转化率不可能是 0;由于我们有三个未转化的例子,我们也知道转化率不可能是 1。几乎所有其他的值都有可能。

图 14-2:我们观察到的累积分布函数(CDF)
通过先验信息纳入更广泛的背景
但等一下——你可能刚接触电子邮件列表,然而 80% 的点击率听起来相当不太可能。我订阅了很多邮件列表,但我打开邮件时,绝对不可能 80% 的时间都会点击链接。考虑到我自己的行为,拿这个 80% 的点击率当作事实来看,显得有些天真。
结果发现,你的电子邮件服务提供商也认为这很可疑。让我们看一下更广泛的背景。对于与您的博客同类的博客,服务提供商的数据声称,平均只有 2.4% 的人会在打开电子邮件后点击内容链接。
在第九章,你学到过如何使用过去的信息来修改我们对汉·索罗能够成功穿越小行星带的信念。我们的数据告诉我们一件事,但我们的背景信息却告诉我们另一件事。正如你现在所知道的,在贝叶斯的术语中,我们所观察到的数据是我们的似然,而外部的背景信息——在这个案例中来自我们的个人经验和电子邮件服务——是我们的先验概率。我们现在面临的挑战是如何建模我们的先验。幸运的是,与汉·索罗的情况不同,我们这里确实有一些数据可以帮助我们。
来自电子邮件服务提供商的 2.4% 转化率为我们提供了一个起点:现在我们知道我们需要一个均值大约为 0.024 的 beta 分布(beta 分布的均值是 α / (α + β))。然而,这仍然给我们留下了一系列可能的选择:Beta(1,41)、Beta(2,80)、Beta(5,200)、Beta(24,976) 等等。那么我们该选用哪一个呢?我们可以绘制这些分布,并看看它们的样子(见图 14-3)。

图 14-3:比较不同可能的先验概率
如你所见,组合的α + β值越低,我们的分布越宽。现在的问题是,即使是我们最宽松的选项 Beta(1,41),似乎也有些过于悲观,因为它将我们的大部分概率密度集中在非常低的值上。尽管如此,我们仍然会坚持使用这个分布,因为它是基于电子邮件提供商数据中的 2.4%的转化率,并且是我们所有先验分布中最弱的一种。作为一个“弱”先验,它意味着随着我们收集更多数据,它会更容易被实际数据所取代。而像 Beta(5,200) 这样的较强先验则需要更多证据才能改变(我们接下来会看到这一点)。决定是否使用强先验是一个判断问题,取决于你预期先验数据能多好地描述你当前的工作情况。正如我们将看到的,即使是一个弱先验,也能帮助我们在处理少量数据时,使估算更具现实性。
记住,在处理 beta 分布时,我们可以通过简单地将两个 beta 分布的参数相加来计算我们的后验分布(即似然和先验的组合):
Beta(α[后验], β[后验]) = Beta(α[似然] + α[先验], β[似然] + β[先验])
使用这个公式,我们可以比较有先验和没有先验的信念,如图 14-4 所示。

图 14-4:比较我们的似然(无先验)与我们的后验(有先验)
哇!这真令人震惊。尽管我们使用的是一个相对较弱的先验,但我们可以看到它对我们认为现实的转化率产生了巨大影响。请注意,对于没有先验的似然函数,我们认为我们的转化率可能高达 80%。如前所述,这非常可疑;任何有经验的电子邮件营销人员都会告诉你,80%的转化率是闻所未闻的。给我们的似然函数添加一个先验后,我们的信念得到调整,使其变得更为合理。但我仍然觉得我们的更新后的信念有些悲观。也许这封邮件的实际转化率不是 40%,但它可能比当前的后验分布所暗示的要好。
我们如何证明我们的博客比电子邮件服务提供商的数据中那些转换率为 2.4%的网站具有更好的转化率呢?任何理性的人都会这样做:用更多的数据!我们等待几个小时收集更多的结果,现在我们发现,在 100 个打开你电子邮件的人中,有 25 个人点击了链接!让我们看一下我们新的后验分布和似然函数之间的差异,如图 14-5 所示。

图 14-5:用更多数据更新我们的信念
随着我们继续收集数据,我们看到使用先验的后验分布开始向没有先验的分布偏移。我们的先验仍然在保持我们的自负,为真实的转化率提供了一个更为保守的估计。然而,随着我们将更多证据加入似然函数,它开始对我们的后验信念产生更大的影响。换句话说,额外的观察数据正在做它该做的事:慢慢地把我们的信念倾向于与它所暗示的结果对齐。所以,让我们等到第二天再回来,带回更多的数据!
早晨我们发现有 300 个订阅者打开了他们的电子邮件,其中 86 人点击了链接。图 14-6 展示了我们更新后的信念。
我们在这里见证的是贝叶斯统计中最重要的一点:我们收集的数据越多,先验信念就会被证据所削弱。当我们几乎没有任何证据时,我们的似然函数提出了一些我们知道是荒谬的转化率(例如,80%的点击率),无论从直觉上还是从个人经验来看都是如此。在几乎没有证据的情况下,我们的先验信念压制了我们拥有的任何数据。
但随着我们继续收集与我们先验不一致的数据,我们的后验信念开始向我们自己收集的数据所告诉我们的方向移动,远离最初的先验。
另一个重要的结论是,我们一开始使用的是一个相当弱的先验。即便如此,在仅仅收集了一天、相对较少的信息后,我们仍然能够找到一个看起来更加合理的后验分布。

图 14-6:添加更多数据后的后验信念
在这种情况下,先验概率分布极大地帮助了我们在没有数据的情况下使估计更加现实。这个先验概率分布是基于真实数据的,因此我们可以相当有信心,它会帮助我们将估计值更接近现实。然而,在许多情况下,我们根本没有数据来支持我们的先验。那么,在这种情况下,我们该怎么办呢?
先验作为量化经验的一种方式
因为我们知道 80%的邮件点击率的想法是可笑的,所以我们使用了来自邮件提供商的数据来得出更好的先验估计。然而,即使我们没有数据来帮助建立先验,我们仍然可以请一位具有营销背景的人来帮助我们做出合理的估计。例如,一位营销人员可能知道根据个人经验,预计转化率应该是 20%左右。
根据这位经验丰富的专业人士提供的信息,您可能会选择一个相对较弱的先验,比如 Beta(2,8),以表明预计的转化率应该在 20%左右。这个分布只是一个猜测,但重要的是,我们可以量化这个假设。对于几乎每个业务,专家通常可以仅凭以前的经验和观察提供强有力的先验信息,即使他们并没有接受专门的概率学培训。
通过量化这种经验,我们可以获得更准确的估计,并查看它们如何从一个专家到另一个专家发生变化。例如,如果一位营销人员确定真实的转化率应该是 20%,我们可能将这种信念建模为 Beta(200,800)。随着我们收集数据,我们可以比较不同的模型,并创建多个置信区间,定量地建模任何专家的信念。此外,随着我们获得越来越多的信息,这些先验信念带来的差异将会减少。
当我们一无所知时,有公平的先验可以使用吗?
有些统计学流派认为,在没有其他先验信息的情况下估计参数时,您应该始终在α和β上各加 1。这相当于使用一个非常弱的先验,认为每个结果的可能性是相等的:Beta(1,1)。这个论点是,在没有信息的情况下,这是我们能提出的“最公平”(即最弱)先验。公平先验的技术术语是无信息先验。Beta(1,1)如图 14-7 所示。

图 14-7:无信息先验 Beta(1,1)
如您所见,这是完全的直线,因此所有的结果都是同样可能的,平均可能性为 0.5。使用无信息先验的想法是,我们可以添加一个先验来帮助平滑我们的估计,但这个先验并不会偏向任何特定的结果。然而,虽然这看起来可能是处理问题的最公平方式,但即使是这种非常弱的先验,在我们测试它时也可能导致一些奇怪的结果。
举个例子,假设明天太阳升起的概率。假设你 30 岁,至今已经经历了大约 11,000 次日出。现在假设有人问你明天太阳升起的概率。你想公平地使用非信息先验 Beta(1,1)。代表你相信太阳不会升起的分布是 Beta(1,11001),这是基于你的经历。虽然这给出了太阳明天不升起的概率非常低,但它也表明,我们预计到你 60 岁时至少会看到一次太阳不升起。所谓的“非信息”先验,实际上对这个世界如何运作有着相当强的看法!
你可能会争辩说,这是因为我们理解天体力学,所以我们已经拥有了强大的先验信息,无法忘记。但真正的问题是,我们从未观察到太阳不升起的情况。如果我们回到没有非信息先验的似然函数,我们得到的是 Beta(0,11000)。
然而,当α或β ≤ 0 时,Beta 分布是未定义的,这意味着“太阳明天升起的概率是多少?”这个问题的正确答案是,这个问题没有意义,因为我们从未见过反例。
另一个例子是,假设你发现了一个传送门,将你和你的朋友带到了一个新的世界。一只外星生物出现在你面前,朝你开了一枪,那枪看起来很奇怪,差一点打到你。你的朋友问你:“这把枪会走火的概率是多少?”这是一个完全陌生的世界,那把枪看起来既奇怪又有机,你根本不了解它的机制。
从理论上讲,这是使用非信息先验的理想场景,因为你对这个世界完全没有任何先验信息。如果你加上非信息先验,你得到的后验 Beta(1,2)概率,表示枪走火的概率(我们观察到α = 0 次走火,β = 1 次成功射击)。这个分布告诉我们,枪走火的后验平均概率是 1/3,这似乎异常高,因为你甚至不知道这把奇怪的枪是否会走火。再说一次,尽管 Beta(0,1)是未定义的,使用它似乎是解决这个问题的理性方法。在缺乏足够数据和任何先验信息的情况下,你唯一诚实的选择就是举手说:“我完全不知道该如何推理这个问题!”
最好的先验是有数据支持的,在完全没有数据的情况下,实际上从没有真正的“公平”先验。每个人都会带着自己的经验和世界观来看待问题。贝叶斯推理的价值,即使你在主观地赋予先验时,也是量化你主观信念的正当理由。正如我们将在本书稍后看到的,这意味着你可以将自己的先验与他人的进行比较,看看它是如何解释周围世界的。Beta(1,1)先验在实践中有时会使用,但只有当你真诚地相信在你所知道的情况下,两个可能的结果是同样可能时,才应该使用它。同样,任何数量的数学也无法弥补绝对的无知。如果你没有数据,也没有对问题的先验理解,唯一诚实的回答就是在你了解更多之前无法得出任何结论。
话虽如此,值得注意的是,关于是否使用 Beta(1,1)或 Beta(0,0)这个话题有着悠久的历史,许多伟大的思想家曾对此争论不休。托马斯·贝叶斯(贝叶斯定理的名字来源)犹豫不决地相信 Beta(1,1);伟大的数学家西蒙-皮埃尔·拉普拉斯非常确信 Beta(1,1)是正确的;而著名经济学家约翰·梅纳德·凯恩斯则认为使用 Beta(1,1)是如此荒谬,以至于它使所有贝叶斯统计学失去信誉!
总结
在本章中,你学习了如何将问题的先验信息纳入计算,从而得出更准确的未知参数估计。当我们只有少量信息时,我们可以轻松地得到看似不可能的概率估计。但是,我们可能有一些先验信息,可以帮助我们从那少量数据中得出更好的推论。通过将这些信息添加到我们的估计中,我们能够得到更现实的结果。
在可能的情况下,最好使用基于实际数据的先验概率分布。然而,通常我们没有足够的数据来支持我们的判断,但我们要么有个人经验,要么可以寻求专家的帮助。在这种情况下,估算一个与你的直觉相符的概率分布是完全可以的。即使你错了,你也会以一种可以定量记录的方式犯错。最重要的是,即使你的先验是错误的,随着你收集更多的观察数据,它最终会被数据所推翻。
练习
尝试回答以下问题,看看你对先验的理解有多深。解答可以在 nostarch.com/learnbayes/ 上找到。
-
假设你和一些朋友在玩气垒球,并通过掷硬币决定谁先拿球。经过 12 轮比赛,你意识到带着硬币的朋友几乎总是先开始:12 次中有 9 次。你的一些其他朋友开始产生怀疑。为以下信念定义先验概率分布:
-
有一个人轻微地认为朋友在作弊,而正面朝上的概率实际上接近 70%。
-
有人非常坚信这枚硬币是公平的,并且提供了 50%的概率出现正面。
-
有人坚信这枚硬币偏向于正面朝上,概率为 70%。
-
-
为了测试这枚硬币,你再投掷了 20 次,得到了 9 次正面和 11 次反面。使用你在前一个问题中计算的先验概率,关于硬币正面朝上的真实概率,95%的置信区间是什么?
第四部分
假设检验:统计学的核心
第十五章:从参数估计到假设检验:构建贝叶斯 A/B 测试

在这一章,我们将构建我们的第一个假设检验——A/B 测试。公司通常使用 A/B 测试来尝试不同的产品网页、邮件和其他营销材料,以确定哪些对客户最有效。在这一章中,我们将测试我们的假设,即去除邮件中的图片会提高点击率,与认为去除图片会降低点击率的假设进行对比。
由于我们已经知道如何估计单个未知参数,我们需要做的就是估计这两个参数——也就是每封邮件的转化率。然后我们将使用 R 来运行蒙特卡洛模拟,确定哪个假设可能表现更好——换句话说,哪个变体,A 还是 B,更优。A/B 测试可以使用经典的统计技术,如t-检验来进行,但通过贝叶斯方法构建我们的测试,能够帮助我们直观理解每个部分,并且也能为我们提供更有用的结果。
到目前为止,我们已经很好地掌握了参数估计的基本知识。我们已经了解了如何使用 PDF、CDF 和分位数函数来学习某些值的可能性,并且我们也了解了如何在估计中加入贝叶斯先验。现在,我们想用我们的估计来比较两个未知参数。
设置贝叶斯 A/B 测试
延续上一章的邮件示例,假设我们想知道添加图片是否对我们博客的转化率有帮助或有害。之前,每周的邮件都包含了一些图片。为了本次测试,我们将发送一个带图片的版本,如往常一样,另一个则不包含图片。这个测试被称为A/B 测试,因为我们在比较变体 A(带图片)和变体 B(不带图片),目的是确定哪一个表现更好。
假设此时我们有 600 个博客订阅者。由于我们想要利用在本次实验中获得的知识,我们只会对其中 300 人进行测试;这样,我们就可以将剩余的 300 名订阅者发送我们认为最有效的邮件版本。
我们将要测试的 300 人将被分成两组,A 组和 B 组。A 组将收到通常的邮件,邮件顶部有一张大图,而 B 组将收到没有图片的邮件。我们希望的是,简洁的邮件感觉不那么“垃圾”,能鼓励用户点击内容。
找到我们的先验概率
接下来,我们需要确定将使用什么先验概率。我们每周都会进行一次邮件营销活动,因此从这些数据中,我们可以合理预期,在任何一封邮件中,点击链接进入博客的概率应该大约是 30%。为了简化起见,我们将对两个变体使用相同的先验概率。我们还将选择一个相对较弱的先验分布版本,这意味着它考虑了更广泛的可能转换率。我们使用弱先验是因为我们并不确切知道 B 变体的表现如何,而且这是一项新的邮件营销活动,因此其他因素可能导致更好的或更差的转化效果。我们将选择 Beta(3,7)作为我们的先验概率分布。这种分布使我们能够表示一个β分布,其中 0.3 是均值,但考虑到可能的各种替代转化率。我们可以在图 15-1 中看到这个分布。

图 15-1:可视化我们的先验概率分布
现在我们需要的就是我们的似然,这意味着我们需要收集数据。
收集数据
我们发送邮件并获得了表 15-1 中的结果。
表 15-1: 邮件点击率
| 点击 | 未点击 | 观察到的转化率 | |
|---|---|---|---|
| 变体 A | 36 | 114 | 0.24 |
| 变体 B | 50 | 100 | 0.33 |
我们可以将这些变体视为我们试图估计的独立参数。为了为每个变体得出后验分布,我们需要将它们的似然分布和先验分布结合起来。我们已经决定,这些分布的先验应该是 Beta(3,7),表示我们对转化率可能值的相对较弱的信念,假设没有额外的信息。我们说这是一种弱信念,因为我们并不强烈相信某个特定的数值范围,而是考虑所有可能的转化率都有相对较高的概率。对于每个变体的似然,我们将再次使用β分布,使α为链接被点击的次数,β为未点击的次数。
回顾一下:
Beta(α[后验], β[后验]) = Beta(α[先验] + α[似然], β[先验] + β[似然])
变体 A 将用 Beta(36+3,114+7)表示,变体 B 则用 Beta(50+3,100+7)表示。图 15-2 展示了每个参数的估计值并排显示。

图 15-2:我们对两种邮件变体的估计的β分布
显然,我们的数据表明变体 B 更优,因为它获得了更高的转化率。然而,从我们之前关于参数估计的讨论中,我们知道真实的转化率是可能值范围中的一个值。我们也可以在这里看到 A 和 B 的真实转化率存在重叠。如果我们在 A 的测试中只是运气不好,A 的真实转化率实际上可能更高怎么办?如果我们在 B 的测试中只是运气好,B 的转化率实际上可能更低怎么办?很容易想象出一个可能的情况,其中 A 实际上是更好的变体,即使它在我们的测试中表现更差。那么,真正的问题是:我们能有多确定 B 是更好的变体?这就是蒙特卡洛模拟发挥作用的地方。
蒙特卡洛模拟
哪个邮件变体能产生更高点击率的准确答案位于 A 和 B 分布的交集处。幸运的是,我们有一种方法可以找出答案:蒙特卡洛模拟。蒙特卡洛模拟是利用随机抽样解决问题的任何技术。在这种情况下,我们将从这两个分布中随机抽样,每个样本根据其在分布中的概率被选择,这样高概率区域的样本会更频繁地出现。例如,正如我们在图 15-2 中看到的,A 中大于 0.2 的值比小于 0.2 的值更可能被抽样出来。然而,从分布 B 中随机抽样几乎肯定会得到大于 0.2 的值。在我们的随机抽样中,我们可能会选择变体 A 的值为 0.2,变体 B 的值为 0.35。每个样本都是随机的,基于 A 和 B 分布中值的相对概率。A 的 0.2 和 B 的 0.35 都可能是我们观察到的证据下,每个变体的真实转化率。这种来自两个分布的个体抽样确认了变体 B 实际上优于 A,因为 0.35 大于 0.2。
然而,我们也可能会抽样到变体 A 的值为 0.3,变体 B 的值为 0.27,这两者都是从各自分布中合理可能被抽样到的值。这两者也是每个变体的真实转化率的合理可能值,但在这种情况下,它们表明变体 B 实际上比变体 A 差。
我们可以想象,后验分布代表了基于我们目前对每个转换率的信念状态,所有可能存在的世界。每次从每个分布中进行采样时,我们看到的都是一个可能的世界。从 图 15-1 中,我们可以直观地看到,我们应该期望更多的世界中 B 确实是更好的变体。我们采样的次数越多,我们就能越精确地知道,在我们采样过的所有世界中,B 在多少个世界里是更好的变体。一旦我们得到了样本,我们可以查看 B 是最好的世界与我们所查看的世界总数的比率,并得出一个准确的概率,表明 B 确实比 A 更好。
在多少个世界中,B 是更好的变体?
现在我们只需要编写执行此采样的代码。R 的 rbeta() 函数允许我们从 Beta 分布中自动采样。我们可以将每次比较两个样本视为一次试验。我们运行的试验越多,结果就会越精确,所以我们将从 100,000 次试验开始,将此值分配给变量 n.trials:
n.trials <- 100000
接下来我们将把之前的 alpha 和 beta 值放入变量中:
prior.alpha <- 3
prior.beta <- 7
接着我们需要从每个变体中收集样本。我们将使用 rbeta() 来实现:
a.samples <- rbeta(n.trials,36+prior.alpha,114+prior.beta)
b.samples <- rbeta(n.trials,50+prior.alpha,100+prior.beta)
我们也将 rbeta() 函数的结果保存到变量中,这样我们就可以更方便地访问它们。对于每个变体,我们输入点击博客的人数和未点击的人数。
最后,我们比较 b.samples 中有多少次大于 a.samples,并将这个数字除以 n.trials,这将给我们一个百分比,表示在所有试验中,变体 B 比变体 A 更好的次数:
p.b_superior <- sum(b.samples > a.samples)/n.trials
我们最终得到的结果是:
p.b_superior
> 0.96
我们看到的是,在 100,000 次试验中的 96% 的情况下,B 变体更优。我们可以把这看作是在 100,000 个可能的世界中做观察。根据每个变体的可能转换率分布,在 96% 的世界里,B 是两个变体中更好的那个。这个结果表明,即使我们观察的样本数量相对较少,我们也对 B 是更好的变体有相当强的信心。如果你曾经做过经典统计中的 t 检验,这大致相当于——如果我们使用 Beta(1,1) 作为先验——从单尾 t 检验中获得一个 p-值为 0.04(通常被认为是“统计显著”)。然而,我们方法的优点在于,我们能够仅凭概率知识和简单的模拟从零开始构建这个检验。
每个 B 变体比每个 A 变体好多少?
现在我们可以准确地说出我们有多确定 B 是更优的变体。然而,如果这个电子邮件营销活动是为一个真实的商业所做的,单纯说“B 更好”并不是一个令人满意的答案。难道你不想知道 有多好 吗?
这就是蒙特卡洛模拟的真正力量。我们可以利用上次模拟的精确结果,测试变体 B 可能有多好,方法是查看 B 样本比 A 样本大多少次。换句话说,我们可以看这个比率:

在 R 中,如果我们取之前的a.samples和b.samples,我们可以计算b.samples/a.samples。这将给我们一个变体 A 到变体 B 的相对改进的分布。当我们将这个分布绘制为直方图,如图 15-3 所示时,我们可以看到变体 B 在提高点击率方面的预期改进。
从这个直方图中我们可以看到,变体 B 最有可能比 A 提高约 40%(比例为 1.4),尽管也存在一系列可能的值。正如我们在第十三章中讨论的,累积分布函数(CDF)在推理我们的结果时比直方图更有用。由于我们正在处理数据而不是数学函数,我们将使用 R 的ecdf()函数来计算经验累积分布函数。经验累积分布函数在图 15-4 中进行了说明。

图 15-3:我们可能看到的改善的直方图

图 15-4:我们可能看到的改善的分布
现在我们可以更清楚地看到我们的结果。实际上,变体 A 更好的机会非常小,即使它更好,也不会有太大差距。我们还可以看到,变体 B 有大约 25%的概率在转化率上比 A 提高 50%或更多,甚至有相当大的概率它可能是 A 的两倍转化率!现在,在选择 B 而不是 A 时,我们实际上可以通过以下方式推理我们的风险:“B 比 A 差 20%的概率和 B 比 A 好 100%的概率差不多。”对我来说,这听起来是个不错的赌注,而且比说“B 和 A 之间有统计学上显著的差异”要更好地表述我们的知识。
总结
在本章中,我们看到如何将参数估计自然地扩展到假设检验的形式。如果我们要检验的假设是“变体 B 的转化率比变体 A 更高”,我们可以从首先对每个变体的可能转化率进行参数估计开始。一旦知道了这些估计值,我们可以使用蒙特卡洛模拟从中进行抽样。通过比较这些样本,我们可以得出假设为真的概率。最后,我们可以进一步测试,看看我们的新变体在这些可能的世界中表现如何,不仅估计假设是否成立,还估计我们可能看到的改进程度。
练习
尝试回答以下问题,看看你对 A/B 测试的理解有多深入。解决方案可以在 nostarch.com/learnbayes/ 中找到。
-
假设一位有多年经验的市场总监告诉你,他坚信没有图片的变体(B)不会比原始变体有任何不同的表现。你如何在我们的模型中考虑这一点?实施这一变化,并查看你的最终结论如何变化。
-
主要设计师看到你的结果后坚持认为,变体 B 在没有图片的情况下不可能表现得更好。她认为你应该假设变体 B 的转化率更接近 20%而不是 30%。为此实现一个解决方案,并再次审查我们的分析结果。
-
假设 95%的置信度意味着你“几乎确定”一个假设是正确的。同时假设你可以在测试中发送的电子邮件数量不再有限制。如果 A 的真实转化率是 0.25,B 是 0.3,探讨需要多少样本才能说服市场总监相信 B 确实更优。对主要设计师做同样的探索。你可以使用以下 R 代码片段生成转化样本:
true.rate <- 0.25 number.of.samples <- 100 results <- runif(number.of.samples) <= true.rate
第十六章:贝叶斯因子与后验比率介绍:思想的竞争

在前一章中,我们看到我们可以将假设检验视为参数估计的扩展。在本章中,我们将思考假设检验,而不是作为一种估计方式,而是作为一种使用重要数学工具贝叶斯因子来比较思想的方法。贝叶斯因子是一个公式,它通过与另一个假设比较来检验一个假设的合理性。结果告诉我们,一个假设比另一个假设更可能的次数。
然后我们将看到如何将贝叶斯因子与我们的先验信念结合,得出后验比率,后者告诉我们在解释数据时,一个信念比另一个信念强多少。
重新审视贝叶斯定理
第六章介绍了贝叶斯定理,其形式如下:

记住,这个公式中有三部分具有特殊的名称:
-
P(H | D)是后验概率,它告诉我们在给定数据的情况下,应该多强烈地相信我们的假设。
-
P(H)是先验信念,即在查看数据之前我们对假设的信心概率。
-
P(D | H)是似然度,即如果我们的假设成立,获取现有数据的概率。
最后一部分,P(D),是观察到的数据的概率,与假设无关。我们需要P(D)来确保我们的后验概率正确地位于 0 到 1 之间。如果我们拥有所有这些信息,我们可以精确计算出在观察到的数据之后我们应当多强烈地相信我们的假设。但正如我在第八章中提到的,P(D)通常是很难定义的。在许多情况下,我们不清楚如何确定数据的概率。如果我们只关心比较两个不同假设的相对强度,那么P(D)就完全没有必要。
基于这些原因,我们常常使用贝叶斯定理的比例形式,它允许我们在不知道P(D)的情况下分析假设的强度。它的形式如下:
P(H | D) ∝ P(H) × P(D | H)
用通俗的英语来说,贝叶斯定理的比例形式表示,假设的后验概率与先验概率乘以似然度成正比。我们可以使用这个公式,通过比较每个假设的先验信念与似然度的乘积,使用后验比率公式来比较两个假设:

我们现在得到的是一个比率,表示每个假设对我们观察到的数据的解释程度。也就是说,如果比率是 2,则H[1]解释观察到的数据是H[2]的两倍,而如果比率是 1/2,则H[2]解释数据是H[1]的两倍。
使用后验比率构建假设检验
后验比率公式给出了后验赔率,它使我们能够测试我们对数据的假设或信念。即使我们知道了P(D),后验赔率仍然是一个有用的工具,因为它允许我们比较不同的观点。为了更好地理解后验赔率,我们将把后验比率公式分解为两个部分:可能性比率,或贝叶斯因子,以及先验概率比率。这是一个标准且非常有帮助的做法,它使得我们更容易分别推理可能性和先验概率。
贝叶斯因子
使用后验比率公式,假设P(H[1]) = P(H[2])——也就是说,我们对每个假设的先验信念是相同的。在这种情况下,假设的先验信念比率就是 1,因此剩下的就是:

这就是贝叶斯因子,两个假设的可能性比率。
花点时间真正思考这个公式的含义。当我们考虑如何为我们的H[1](即我们对世界的信念)辩护时,我们会考虑收集支持我们信念的证据。因此,一个典型的论证过程通常包括构建一组数据,D[1],以支持H[1],然后与一个朋友进行辩论,朋友收集了一组支持其假设H[2]的数据,D[2]。
在贝叶斯推理中,我们并不是在收集证据来支持我们的观点;我们是在看我们的观点如何解释眼前的证据。这一比率告诉我们的是,在我们认为正确的基础上,给定已观察到的证据,相比于他人认为正确的情况,我们的观点的可能性。我们的假设如果比竞争假设更能解释世界,那么它就会获胜。
然而,如果竞争假设比我们的假设更好地解释数据,那么可能是时候改变我们的信念了。关键在于,在贝叶斯推理中,我们并不关心如何支持我们的信念——我们专注于我们的信念如何支持我们所观察到的数据。最终,数据要么确认我们的观点,要么促使我们改变看法。
先验赔率
到目前为止,我们假设每个假设的先验概率是相同的。但显然这并不总是如此:即使一个假设的可能性非常小,它也可能很好地解释数据。例如,如果你丢失了手机,认为手机落在浴室里的假设和认为外星人把手机带走研究人类技术的假设,都能很好地解释数据。然而,浴室假设显然更可能。这就是为什么我们需要考虑先验概率比率的原因:

这个比率比较了在我们查看数据之前,两个假设的概率。当与贝叶斯因子一起使用时,这个比率称为我们H[1]中的先验赔率,并写作 O(H[1])。这种表示方式很有帮助,因为它可以让我们轻松地注意到我们对所测试假设的信心水平(或信心的弱度)。当这个数字大于 1 时,意味着先验赔率支持我们的假设;而当它小于 1 时,意味着它反对我们的假设。例如,O(H[1]) = 100 表示,在没有其他信息的情况下,我们认为H[1]比替代假设更有可能发生,概率是 100 倍。另一方面,当O(H[1]) = 1/100 时,替代假设的发生概率是我们的 100 倍。
后验赔率
如果我们将贝叶斯因子和先验赔率结合起来,就得到了后验赔率:

后验赔率计算了我们的假设比竞争假设更好地解释数据的次数。
表 16-1 列出了评估各种后验赔率值的指导原则。
表 16-1: 评估后验赔率的指导原则
| 后验赔率 | 证据强度 |
|---|---|
| 1 到 3 | 有趣,但没有结论 |
| 3 到 20 | 看起来我们有了些线索 |
| 20 到 150 | 强有力的证据支持H[1] |
| > 150 | 压倒性的证据 |
我们可以查看这些赔率的倒数,决定何时改变我们对一个想法的看法。
虽然这些值可以作为一个有用的指导,但贝叶斯推理仍然是一种推理方式,这意味着你必须做出一些判断。如果你和朋友有一个随意的争论,一个后验赔率为 2 可能足以让你感到自信。如果你在试图判断自己是否在喝毒药,后验赔率为 100 可能仍然不够。
接下来,我们将看两个例子,使用贝叶斯因子来确定我们信念的强度。
检验有偏骰子
我们可以将贝叶斯因子和后验赔率作为一种假设检验的形式,其中每个检验都是两个观点之间的竞争。假设你的朋友有一个袋子,里面有三个六面骰子,其中一个是加权的,使它有一半的概率落在 6 上。其他两个是传统的骰子,掷出 6 的概率是⅙。你的朋友拿出了一个骰子,掷了 10 次,结果如下:
6, 1, 3, 6, 4, 5, 6, 1, 2, 6
我们想弄清楚这是不是一个有偏骰子,还是一个普通骰子。我们可以将有偏骰子称为H[1],将普通骰子称为H[2]。
让我们从计算贝叶斯因子开始:

第一步是计算 P(D | H),即在观察到的数据基础上 H[1] 和 H[2] 的可能性。在这个例子中,你的朋友掷出了四个 6 和六个非 6。我们知道,如果骰子是加载的,掷出 6 的概率是 1/2,而掷出任何非 6 的概率也是 1/2。这意味着,在假设我们使用的是加载骰子的情况下,看到这些数据的可能性是:

在公平骰子的情况下,掷出 6 的概率是 1/6,而掷出其他任何数字的概率是 5/6。这意味着我们看到这些数据的可能性对于 H[2],即骰子是公平的假设,是:

现在我们可以计算我们的贝叶斯因子,它将告诉我们 H[1] 比 H[2] 更好地解释数据的程度,假设每个假设在最初是等可能的(这意味着先验赔率比率为 1):

这意味着 H[1],即骰子被加载的假设,比 H[2] 更好地解释了我们观察到的数据,几乎是 H[2] 的四倍。
然而,这只有在 H[1] 和 H[2] 起初具有相同可能性的情况下才成立。但我们知道袋子里有两个公平骰子和一个加载骰子,这意味着每个假设的可能性并不相等。根据袋子里骰子的分布,我们知道这是每个假设的先验概率:

从这些中,我们可以计算 H[1] 的先验赔率:

因为袋子里只有一个加载骰子和两个公平骰子,我们抽到公平骰子的可能性是抽到加载骰子的两倍。根据我们对 H[1] 的先验赔率,现在我们可以计算我们的完整后验赔率:

尽管初始的似然比显示 H[1] 比 H[2] 更好地解释数据,几乎是 H[2] 的四倍,但后验赔率却告诉我们,因为 H[1] 的可能性只有 H[2] 的一半,所以 H[1] 实际上只是比 H[2] 强大约两倍的解释。
从这里来看,如果你必须得出结论是否骰子是加载的,你最好的选择是认为它确实是加载的。然而,后验赔率小于 2 并不是特别强的证据支持 H[1]。如果你真的想知道骰子是否被加载,你需要再掷几次,直到某个假设的证据足够强大,能够让你做出更有力的判断。
现在让我们看一个使用贝叶斯因子来确定我们信念强度的第二个例子。
在线自我诊断罕见病
许多人曾犯过在深夜上网查找自己症状的错误,结果发现自己被一些奇怪可怕的疾病吓得目瞪口呆!不幸的是,他们的分析几乎总是忽略了贝叶斯推理,而这种推理或许能够缓解一些不必要的焦虑。在这个例子中,假设你犯了查找症状的错误,并发现两种可能的疾病符合你的症状。与其毫无理由地惊慌失措,不如用后验比率来权衡每种可能性。
假设有一天你醒来时发现自己有听力困难,并且一只耳朵里有耳鸣(耳鸣)。这让你整天都很烦躁,当你下班回家后,你决定是时候上网查找可能导致这些症状的原因了。你变得越来越担心,最终得出两个可能的假设:
耳垢堵塞 你的一只耳朵里有过多的耳垢。快速去看医生,医生会帮你解决这个问题。
前庭神经鞘瘤 你有一个长在前庭神经髓鞘上的脑肿瘤,导致不可逆的听力丧失,可能需要进行脑部手术。
在这两种可能性中,前庭神经鞘瘤的可能性最让人担忧。当然,它可能只是耳垢,但如果不是呢?如果你真的是脑肿瘤怎么办?由于你最担心脑肿瘤的可能性,你决定将这个假设定为你的 H[1]。你的 H[2] 是你的一只耳朵里有太多耳垢。
让我们看看后验比率是否能让你冷静下来。
和我们之前的例子一样,我们将从观察这些症状在每个假设为真的情况下的可能性开始,并计算贝叶斯因子。这意味着我们需要计算 P(D | H)。你观察到了两个症状:听力丧失和耳鸣。
对于前庭神经鞘瘤,听力丧失的概率是 94%,耳鸣的概率是 83%,这意味着如果你患有前庭神经鞘瘤,出现听力丧失和耳鸣的概率是:
P (D | H[1]) = 0.94 × 0.89 = 0.78
接下来,我们对 H[2] 进行同样的分析。对于耳垢堵塞,听力丧失的概率是 63%,耳鸣的概率是 55%。如果你有耳垢堵塞,出现这些症状的可能性是:
P (D | H[2]) = 0.63 × 0.55 = 0.35
现在我们有足够的信息来查看我们的贝叶斯因子:

哎呀!仅仅看贝叶斯因子并没有多少帮助来缓解你对脑肿瘤的担忧。只考虑可能性比率,似乎如果你患有前庭神经鞘瘤,比耳垢堵塞的可能性高出两倍多!幸运的是,我们的分析还没有完成。
下一步是确定每个假设的先验赔率。撇开症状不谈,某人患有某个问题的可能性与患另一个问题的可能性有多大?我们可以找到每种疾病的流行病学数据。事实证明,前庭神经鞘瘤是一种罕见疾病,每年每百万人的发病率为 11 例。先验赔率如下:

不出所料,耳垢堵塞要常见得多,每年每百万人的发病率为 37,000 例:

要获得H[1]的先验赔率,我们需要查看这两个先验概率的比率:

单凭先验信息,一个人患耳垢堵塞的可能性大约是患前庭神经鞘瘤的 3,700 倍。但在你松一口气之前,我们还需要计算完整的后验赔率。这只是意味着将我们的贝叶斯因子乘以先验赔率:

这个结果表明H[2]的可能性大约是H[1]的 1,659 倍。最后,你可以放心了,知道早上去看医生进行简单的耳朵清理就能解决这一切!
在日常推理中,人们很容易高估可怕情况的概率,但通过使用贝叶斯推理,我们可以拆解实际风险,看看它们到底有多可能发生。
总结
在本章中,你学会了如何使用贝叶斯因子和后验赔率来比较两个假设。贝叶斯因子并不是集中于提供数据来支持我们的信念,而是测试我们的信念在多大程度上支持我们所观察到的数据。结果是一个比率,反映了一个假设比另一个假设解释数据的效果好多少倍。我们可以用它来强化我们的先验信念,当它们比其他信念更好地解释数据时。另一方面,当结果是一个分数时,我们可能需要考虑改变自己的想法。
练习
尝试回答以下问题,看看你对贝叶斯因子和后验赔率的理解有多深。解决方案可以在 nostarch.com/learnbayes/ 找到。
-
回到骰子问题,假设你的朋友犯了个错误,突然意识到实际上有两个加权骰子和一个公平骰子。这如何改变我们的先验,以及因此改变我们的后验赔率?你是否更愿意相信正在掷的骰子是加权骰子?
-
回到罕见疾病的例子,假设你去看医生,清理完耳朵后,你注意到症状依然存在。更糟糕的是,你出现了一个新症状:头晕。医生提出另一种可能的解释——迷路炎,这是一种内耳的病毒感染,其中 98%的病例涉及头晕。然而,听力丧失和耳鸣在这种疾病中较为少见;听力丧失的发生率仅为 30%,耳鸣的发生率仅为 28%。头晕也是前庭神经鞘瘤的一个可能症状,但只出现在 49%的病例中。在普通人群中,每百万的人中每年有 35 人患上迷路炎。当你比较迷路炎和前庭神经鞘瘤的假设时,后验几率是多少?
第十七章:《暮光之城》中的贝叶斯推理**

在第十六章中,我们使用了贝叶斯因子和后验赔率来判断一个假设比另一个竞争假设更有可能。然而,贝叶斯推理的这些工具不仅仅用于比较假设。在本章中,我们将使用贝叶斯因子和后验赔率来量化说服某人接受一个假设所需的证据量。我们还将看到如何估计他人对某个假设的先验信念强度。我们将通过一集经典电视节目《暮光之城》的著名情节来完成这些任务。
《暮光之城》中的贝叶斯推理
我最喜欢的《暮光之城》的一集叫做“Nick of Time”。在这一集中,一对年轻的新婚夫妇——唐和帕特——在一个小镇的餐馆里等待修理他们的车。在餐馆里,他们遇到了一个叫做神秘预言机的占卜机器,它接受“是”或“不是”的问题,并且只需一分钱,就能吐出带有答案的卡片。
非常迷信的唐向神秘预言机提出了一系列问题。当机器正确回答时,他开始相信其超自然的能力。然而,帕特依然对机器的能力持怀疑态度,尽管神秘预言机继续提供正确的答案。
尽管唐和帕特看着相同的数据,他们得出了不同的结论。我们如何解释为什么他们在面对相同的证据时会有不同的推理?我们可以使用贝叶斯因子来深入了解这两个人物如何看待数据。
使用贝叶斯因子来理解神秘预言机
在这一集中,我们面临两个竞争的假设。我们可以将它们称为H和
(或“非H”),因为一个假设是另一个的否定:
H 神秘预言机确实能够预测未来。
神秘预言机只是运气好。
在这个例子中,我们的数据D是神秘预言机提供的n个正确答案的序列。n越大,支持H的证据就越强。暮光之城一集的主要假设是,神秘预言机每次都能正确预测,因此问题是:这个结果是超自然现象,还是仅仅是巧合?对于我们来说,D,我们的数据,始终代表着n个正确答案的序列。现在我们可以评估我们的可能性,或者给定每个假设下获得这些数据的概率。
P(D | H)是在假设神秘预言者能够预测未来的情况下,连续得到n个正确答案的概率。这个可能性将始终为 1,无论提出多少个问题。这是因为,如果神秘预言者是超自然的,它将始终给出正确的答案,无论是问一个问题还是一千个问题。当然,这也意味着如果神秘预言者的一个答案错了,那么这个假设的概率将下降到 0,因为一个预言机器不可能犯错。在这种情况下,我们可能需要提出一个较弱的假设——例如,假设神秘预言者的正确率是 90%(我们将在第十九章探讨类似的问题)。
P(D |
)是在假设神秘预言者只是随机给出答案的情况下,连续得到n个正确答案的概率。在这里,P(D |
) = 0.5^n。换句话说,如果机器只是随便猜测,那么每个答案有 50%的概率是正确的。
为了比较这些假设,让我们来看一下这两种可能性的比率:

提醒一下,这个比率衡量的是在假设两种假设等可能的情况下,数据在给定H与
的情况下,数据发生的可能性增加了多少倍。现在让我们看看这些观点如何进行比较。
测量贝叶斯因子
正如我们在前一章所做的,我们将暂时忽略先验赔率的比率,专注于比较可能性的比率,或者说贝叶斯因子。我们假设(暂时)神秘预言者有相同的机会既是超自然的,也只是幸运的。
在这个例子中,我们的分子P(D | H)始终为 1,所以对于任何n值,我们都有:

假设神秘预言者已经给出了三个正确答案。在这一点上,P(D[3] | H) = 1,P(D | H) = 0.5³ = 0.125。显然,H更好地解释了数据,但当然没有人——甚至是迷信的唐——会仅仅凭借三个正确的猜测就相信它。假设先验赔率相同,我们的贝叶斯因子为三次提问时是:

我们可以使用我们在表 16-1 中用来评估后验赔率的相同准则来评估贝叶斯因子(如果我们假设每个假设的可能性是相等的),如表 17-1 所示。正如你所看到的,贝叶斯因子(BF)为 8 远不足以得出结论。
表 17-1: 评估贝叶斯因子的指南
| BF | 证据的强度 |
|---|---|
| 1 到 3 | 有趣,但没有决定性结论 |
| 3 到 20 | 看起来我们发现了一些线索 |
| 20 到 150 | 强有力的证据支持H[1] |
| > 150 | 强有力的证据支持H[1] |
所以,在回答了三个问题并且 BF = 8 的情况下,我们至少应该对神秘预言者的能力产生好奇,尽管我们还不应完全相信它。
但到这一集的这一点,Don 似乎已经相当确定神秘先知是心灵感应者了。只需要四个正确的答案,他就能确信无疑。另一方面,Pat 则需要 14 个问题才能开始认真考虑这种可能性,最终得出一个贝叶斯因子为 16,384——比她实际需要的证据要多得多。
计算贝叶斯因子并没有解释为什么 Don 和 Pat 对证据形成了不同的信念。那到底是怎么回事呢?
考虑先验信念
我们模型中缺少的元素是每个角色对这些假设的先验信念。记住,Don 是一个极其迷信的人,而 Pat 是一个怀疑论者。显然,Don 和 Pat 在他们的心理模型中使用了额外的信息,因为他们各自得出的结论的强度不同,而且时间也非常不同。这在日常推理中非常常见:两个人常常会对完全相同的事实做出不同的反应。
我们可以通过简单地想象在没有任何额外信息的情况下P(H)和P(
)的初始概率来建模这一现象。我们称之为先验赔率比,正如你在第十六章中看到的:

与贝叶斯因子相关的先验信念概念实际上非常直观。假设我们走进《怪谈空间》中的餐馆,我问你:“神秘先知是心灵感应者的概率有多大?”你可能会回答:“呃,一百万分之一!那东西绝对不是超自然的。”从数学角度来看,我们可以这样表示:

现在让我们将这种先验信念与我们的数据结合。为此,我们将把我们的先验赔率与似然比的结果相乘,以获得根据我们观察到的数据得出的后验赔率:

在没有看到任何证据之前,认为神秘先知是心灵感应者的机会只有百万分之一,这是一种相当强烈的怀疑态度。贝叶斯方法很好地反映了这种怀疑。如果你一开始就认为神秘先知是超自然的假设极不可能,那么你将需要更多的证据才能改变看法。假设神秘先知答对了五个问题。我们的贝叶斯因子就变成了:

贝叶斯因子为 32 表示我们相当相信神秘先知确实是超自然的。然而,如果我们将我们非常怀疑的先验赔率加进去计算后验赔率,我们会得到以下结果:

现在我们的后验赔率告诉我们这台机器不太可能是心灵感应者。这一结果与我们的直觉非常一致。再次强调,如果你一开始就不相信一个假设,那么要说服你改变看法将需要大量证据。
实际上,如果我们倒推,后验比率可以帮助我们计算出需要多少证据才能让你相信 H。在后验比率为 2 时,你才刚刚开始考虑超自然假设。所以,如果我们求解出大于 2 的后验比率,我们就可以确定说服你的条件。

如果我们将 n 求解到最接近的整数,我们得到:
n > 21
在连续答对 21 个问题后,即使是一个强烈的怀疑者,也应该开始认为神秘先知实际上可能是通灵的。
因此,我们的先验比率不仅可以告诉我们在已有背景下我们有多强烈地相信某件事。它还可以帮助我们量化我们需要多少证据才能被说服相信一个假设。反过来也成立;如果在连续答对 21 个问题后,你发现自己坚信 H,你可能需要削弱你的先验比率。
发展我们自己的通灵能力
到这一步,我们已经学会了如何比较假设,并计算出在我们对 H 的先验信念下,能够说服我们相信 H 所需要的有利证据量。接下来,我们将看一下利用后验比率可以做的另一个技巧:根据唐和帕特对证据的反应量化他们的先验信念。
我们并不确切知道唐和帕特在第一次走进餐馆时,对于神秘先知是否是通灵者的可能性有多强的信念。但我们知道,唐需要大约七个正确的答案,才能对神秘先知的超自然能力几乎完全确信。我们可以估计,在这个时刻,唐的后验比率是 150——根据表格 17-1,这是非常强的信念门槛。现在我们可以写出我们所知道的一切,除了 O(H),我们将为其求解:

解这个方程得到 O(H):
O(H)[Don] = 1.17
现在我们得到的是一个量化模型,用于表示唐的迷信信念。由于他的初始比率大于 1,唐在进入餐馆时就略微倾向于相信神秘先知是超自然的,尽管还没有收集任何数据。这是合理的,因为他本身具有迷信的天性。
现在说到帕特。当她答对 14 个问题时,帕特开始变得紧张,称神秘先知“是个愚蠢的破烂东西!”虽然她开始怀疑神秘先知可能是通灵的,但她并不像唐那样确信。我估计她的后验比率是 5——这是她可能开始想,“也许神秘先知可能有通灵的能力……”现在我们可以用同样的方式为帕特的信念创建后验比率:

当我们求解 O(H) 时,我们可以将帕特的怀疑心态建模为:
O(H)[Pat] = 0.0003
换句话说,Pat 走进餐馆时会声称预言者是超自然的几率大约是 1/3,000。这再次符合我们的直觉;Pat 一开始非常坚信,那个算命机不过是她和 Don 等餐时用来消遣的游戏。
我们在这里所做的事情是令人瞩目的。我们运用了概率规则,得出了关于某人信仰的定量陈述。实质上,我们已经变成了读心术大师!
总结
在这一章中,我们探讨了三种使用贝叶斯因子和后验赔率的方式,以便用概率推理的方式来解决问题。我们从回顾上一章学到的内容开始:我们可以使用后验赔率来比较两个观点。然后我们看到,如果我们知道一个假设相对于另一个假设的先验信念的赔率,我们就可以准确地计算出需要多少证据来让我们改变信念。最后,我们用后验赔率来为每个人的先验信念分配一个值,通过观察说服他们需要多少证据。最终,后验赔率远不止是测试观点的一种方式,它为我们提供了一个框架,用于思考在不确定性下的推理。
现在,你可以运用自己“神秘”的贝叶斯推理能力来解答以下练习:
练习
尝试回答以下问题,看看你是否理解了量化证据的数量,以说服某人接受某个假设,以及估算他人先验信念的强度。解决方案可以在nostarch.com/learnbayes/找到。
-
每次你和朋友聚在一起看电影时,你都会抛硬币决定谁来选电影。你的朋友总是选正面,而且每周五连续 10 周,硬币都落在正面。你提出了一个假设:这枚硬币可能是双正面,而不是一面正面一面反面。为硬币是伪造的假设与硬币是公平的假设设立一个贝叶斯因子。仅凭这个比值,是否说明你的朋友在欺骗你?
-
现在想象三种情况:你的朋友是个恶作剧者,你的朋友大多数时候诚实,但偶尔可能会小心机,而你的朋友非常值得信赖。在每种情况下,估算你的假设的先验赔率比,并计算后验赔率。
-
假设你非常信任这个朋友。将他们作弊的先验赔率设为 1/10,000。为了让你对他们的清白产生疑问——比如,后验赔率为 1,硬币需要落多少次正面?
-
你的另一个朋友也和这个朋友一起玩,在硬币连续四周都正面朝上的情况下,坚信你们俩都被欺骗了。这种信心意味着后验概率大约为 100。你会如何评估这个朋友在事前就认为第一个朋友是骗子的信念?
第十八章:当数据不能说服你时

在上一章中,我们用贝叶斯推理分析了一个《阴阳魔界》的两种假设:
-
H 这个算命的神秘预言者具备超自然能力。
-
这个算命的神秘预言者并非超自然,只是运气好。
我们还学会了如何通过改变先验几率比率来解释怀疑论。例如,如果你像我一样,认为神秘预言者绝对没有超能力,那么你可能会希望将先验几率设得极低——像 1/1,000,000 那样。
然而,根据你个人的怀疑程度,你可能觉得即使是 1/1,000,000 的几率比,也不足以说服你相信预言者的能力。
即使在获得预言者 1,000 个正确答案后——尽管你之前持非常怀疑的态度,这也意味着你几乎有天文数字的概率相信预言者是具备超能力的——你仍然可能不相信其超自然的力量。我们可以通过将先验几率设得更极端来表示这种情况,但我个人并不认为这种解决方案令人满意,因为无论多少数据,都无法说服我相信神秘预言者实际上是具备超能力的。
在本章中,我们将深入探讨那些数据无法按我们预期说服人们的问题。在现实世界中,这种情况相当普遍。任何在假期晚餐时与亲戚争论过的人,可能都注意到,往往是你提供的反驳证据越多,他们似乎越坚信自己先前的信念!为了充分理解贝叶斯推理,我们需要能够从数学角度理解为何会出现这种情况。这将帮助我们在统计分析中识别并避免类似的情形。
一个掷骰子的超能力朋友
假设你的朋友告诉你,他们能以 90%的准确率预测六面骰子的结果,因为他们是超能力者。你觉得这个说法难以置信,于是你通过贝叶斯因子设置了一个假设检验。和神秘预言者的例子一样,你有两个假设要比较:

第一个假设,H[1],代表你相信骰子是公平的,并且你的朋友没有超能力。如果骰子是公平的,那么猜中结果的概率是 1/6。第二个假设,H[2],代表你的朋友相信他们确实能够以 90%的概率预测出骰子的结果,因此这个假设给出的比率是 9/10。接下来,我们需要一些数据来开始检验他们的说法。你的朋友掷了 10 次骰子,正确猜中结果 9 次。
比较似然性
就像我们在前几章常做的那样,我们将从贝叶斯因子入手,暂时假设每个假设的先验几率相等。我们将似然比公式化为:

这样,我们的结果将告诉我们,你朋友声称自己是通灵的解释数据的效果,比你的假设好多少倍(或者差多少倍)。在这个例子中,为了简洁起见,我们在公式中用BF表示“贝叶斯因子”。这是我们的结果,考虑到你的朋友准确预测了 10 次中的 9 次:

我们的似然比显示,朋友是通灵的假设比朋友仅仅运气好的假设解释数据的效果好 468,517 倍。这有点令人担忧。根据我们在前几章看到的贝叶斯因子图表,这意味着我们应该几乎可以确定H[2]是真的,而且你的朋友是通灵的。除非你已经是超能力存在的深信者,否则这里似乎有点不对劲。
结合先验比率
在本书的大多数情况下,当仅仅依靠似然得出的结果很奇怪时,我们可以通过加入先验概率来解决问题。显然,我们不相信朋友的假设比我们相信我们自己的假设强烈得多,因此制定一个强大的先验比率支持我们的假设是有意义的。我们可以通过简单地设置一个足够高的比率,使其抵消贝叶斯因子的极端结果,看看是否能够解决我们的困境:

现在,当我们计算完整的后验比率时,我们发现我们再次不相信你的朋友是通灵的:

目前,看起来先验比率再次将我们从只看贝叶斯因子时出现的问题中拯救了出来。
但假设你的朋友再掷骰子五次,并成功预测了所有五次的结果。现在我们有了一组新的数据,D[15],表示 15 次掷骰子,其中 14 次朋友猜对了。现在,当我们计算后验比率时,我们看到即使是我们的极端先验也几乎无济于事:

使用我们现有的先验,仅仅增加五次掷骰子,我们的后验比率达到了 4,592——这意味着我们几乎可以确定你的朋友真的是通灵的!
在我们之前的大多数问题中,我们通过添加合理的先验来修正了非直观的后验结果。我们为你朋友是通灵的可能性添加了一个相当极端的先验,但我们的后验比率仍然强烈支持他们是通灵的假设。
这是一个重大问题,因为贝叶斯推理应该与我们日常的逻辑感知一致。显然,掷骰子 15 次,猜中 14 次是极不寻常的,但很难让人相信猜测者真的拥有超能力!然而,如果我们无法用假设检验来解释这里发生了什么,这就意味着我们无法依赖我们的检验来解决日常的统计问题。
考虑替代假设
这里的问题是我们不想相信你的朋友是通灵的。如果你在现实生活中遇到这种情况,你很可能会迅速得出其他结论。例如,你可能会认为你的朋友正在使用一个被做了手脚的骰子,它有 90%的概率掷出某个特定的结果。这就代表了一个第三个假设。我们的贝叶斯因子只考虑了两种可能的假设:H[1],即骰子是公平的假设,以及H[2],即你的朋友是通灵的假设。
到目前为止,我们的贝叶斯因子告诉我们,比起你的朋友猜对公平骰子的掷点,H[2],即你的朋友是通灵的假设,更有可能成立。当我们以这种方式思考结论时,它就更有意义了:根据这些结果,骰子是公平的可能性极小。我们不愿接受H[2]这个替代假设,因为我们自己对这个世界的看法并不支持H[2]是一个现实的解释。
理解这一点很重要:假设检验仅仅是比较两种事件的解释,但实际上通常有无数种可能的解释。如果获胜的假设不能说服你,你总是可以考虑第三种解释。
让我们来看看当我们将H[2],我们获胜的假设,与一个新假设H[3]进行比较时会发生什么:即骰子被做了手脚,所以它有 90%的概率出现某个特定结果。
我们将以一个新的先验赔率来开始考虑H[2],我们称之为O(H[2])′(这个撇号是数学中常用的符号,表示“像但不完全相同”)。这将代表H[2]/H[3]的赔率。现在,我们只需要说,我们认为你的朋友使用一个被做了手脚的骰子的可能性是你的朋友真的通灵的可能性的 1,000 倍(尽管我们的实际先验可能极为极端)。这意味着,你的朋友是通灵的先验赔率为 1/1,000。如果我们重新审视我们的新后验赔率,我们得出了以下有趣的结果:

根据这个计算,我们的后验赔率与我们的先验赔率相同,O(H[2])′。这是因为我们的两个似然值相同。换句话说,P(D[15] | H[2]) = P(D[15] | H[3])。对于这两个假设来说,朋友正确猜测骰子掷出的结果的似然性是完全相同的,因为每个假设对成功的概率赋予的值是一样的。这意味着我们的贝叶斯因子始终为 1。
这些结果与我们的日常直觉非常契合;毕竟,撇开先验赔率不谈,每个假设对我们所看到的数据的解释是一样的好。这意味着,如果在考虑数据之前,我们相信某个解释比另一个更有可能,那么无论新的证据如何,都不会改变我们的看法。所以,我们不再对我们观察到的数据感到困惑;我们只是找到了一个更好的解释。
在这种情况下,无论数据多么丰富,都不会改变我们相信H[3]而非H[2]的看法,因为两者对我们观察到的现象的解释同样合理,而且我们已经认为H[3]比H[2]更可能是正确的解释。这里有趣的是,即使我们的先验信念完全不合理,我们也可能会陷入这种情况。也许你是一个强烈相信心灵现象的人,并且认为你的朋友是地球上最诚实的人。在这种情况下,你可能会把先验概率O(H[2])′设定为 1,000。如果你相信这一点,那么无论有多少数据,都无法说服你相信你的朋友在使用作弊的骰子。
在这种情况下,重要的是要意识到,如果你想解决一个问题,你需要愿意改变你的先验信念。如果你不愿放弃那些无法辩解的先验信念,那么至少你必须承认你已经不再以贝叶斯或逻辑的方式推理了。我们都持有不合理的信念,这完全没问题,只要我们不试图用贝叶斯推理来为它们辩护。
与亲戚和阴谋论者的争论
任何在节日聚餐时与亲戚争论政治、气候变化或他们最喜欢的电影的人,都曾亲身经历过这样一种情况:他们在比较两个都能同样合理解释数据的假设(对争论者而言),而唯一剩下的就是先验信念。那么,当更多数据无法改变任何东西时,我们如何改变别人(或我们自己)的信念呢?
我们已经看到,如果你比较相信你的朋友在用作弊的骰子和相信他们有心灵感应的假设,更多的数据无法改变你对你朋友说法的看法。这是因为你的假设和你朋友的假设对数据的解释同样合理。为了让你的朋友说服你相信他们有心灵感应,他们必须改变你的先验信念。例如,既然你怀疑骰子可能被做了手脚,你的朋友可以提议让你选择他们掷的骰子。如果你买了一颗新骰子并交给朋友,而他们依然能准确预测每次掷骰的结果,你可能会开始相信。这种逻辑适用于任何你遇到的两个假设能够同样合理解释数据的情况。在这种情况下,你必须看看是否有办法改变你的先验信念。
假设在你为朋友买了新的骰子之后,他们继续成功,而你仍然不相信他们;你现在声称他们一定有某种秘密的掷骰子方法。作为回应,你的朋友让你为他们掷骰子,他们继续成功地预测结果——然而你仍然不相信他们。在这种情况下,除了隐藏的假设之外,还发生了其他事情。你现在有了一个 H[4]——你的朋友完全在作弊——并且你不会改变你的想法。这意味着对于任何 D[n],P(D[n] | H[4]) = 1。显然,我们已经脱离了贝叶斯的范畴,因为你已经基本上承认了你不会改变自己的想法,但让我们看一下如果你的朋友坚持试图说服你,数学上会发生什么。
让我们看看这两种解释,H[2] 和 H[4],如何使用我们的数据 D[10] 来竞争,其中有 9 次预测正确和 1 次预测失败。这个贝叶斯因子的计算是:

因为你拒绝相信任何除了你朋友作弊之外的可能性,所以你观察到的概率是,并且永远是,1。即使数据完全符合我们预期的你朋友是通灵者的情形,我们发现我们的信念能解释这些数据的能力是前者的 26 倍。你的朋友深知改变你顽固的想法有多困难,依然坚持投掷 100 次,得到 90 次正确,10 次错误。我们的贝叶斯因子显示出一种非常奇怪的现象:

即使数据似乎强烈支持你朋友的假设,因为你拒绝改变自己的信念,你现在更加坚信自己是对的!当我们不允许自己的思想发生任何改变时,更多的数据反而会让我们更确信自己是正确的。
这种模式对任何曾与政治极端的亲戚或坚信阴谋论的人争论过的人来说可能都很熟悉。在贝叶斯推理中,我们的信念至少应该是可证伪的,这一点至关重要。在传统科学中,可证伪性意味着某件事可以被证明是错误的,但在我们的案例中,这仅仅意味着必须有某种方式来减少我们对假设的信念。
贝叶斯推理中不可证伪信念的危险不仅在于它们无法被证明是错误的——而在于,即便是与之矛盾的证据也能强化这些信念。你的朋友不应继续试图说服你,而应该首先问:“我能展示什么来改变你的想法?”如果你的回答是没有什么能够改变你的想法,那么你的朋友最好不要再向你提供更多证据。
所以下次你和亲戚在政治或阴谋论上争论时,你应该问他们:“什么证据会改变你的想法?”如果他们没有答案,你最好不要试图通过更多的证据来捍卫自己的观点,因为那只会增加你亲戚对他们信念的确信。
总结
在这一章中,你了解了假设检验可能出错的一些方式。虽然贝叶斯因子是两种观点之间的竞争,但很有可能还有其他同样有效的假设值得进行测试。
有时,我们发现两个假设同样能够很好地解释数据;你同样有可能认为你朋友的正确预测是由他朋友的超能力或者骰子的作弊引起的。在这种情况下,只有每个假设的先验赔率才重要。这也意味着,在这些情况下,获取更多数据永远不会改变我们的信念,因为它永远不会让任何一个假设相较于另一个假设占优势。在这些情况下,最好考虑如何改变影响结果的先验信念。
在更极端的情况下,我们可能会遇到一个根本无法改变的假设。这就像是有一个关于数据的阴谋论。当情况是这样的时,不仅更多的数据永远无法说服我们改变信念,反而会产生相反的效果。如果一个假设无法被证伪,更多的数据只会让我们更确信这个阴谋论。
练习
尝试回答以下问题,看看你是否理解如何处理贝叶斯推理中的极端情况。答案可以在nostarch.com/learnbayes/找到。
-
当两个假设同样能解释数据时,改变我们想法的一种方式是看看我们是否能够攻击先验概率。有哪一些因素可能会增加你对你朋友超能力的先验信念?
-
有一个实验声称,当人们听到“佛罗里达”这个词时,他们会联想到老年人,并且这会影响他们的步伐速度。为了验证这一点,我们让两组 15 个学生穿越一个房间;其中一组听到“佛罗里达”这个词,另一组没有。假设 H[1] = 这两组的步伐速度没有差异,H[2] = 因为听到“佛罗里达”这个词,佛罗里达组的步伐更慢。还假设:
![Image]()
实验显示,H[2]的贝叶斯因子为 19。假设某人不相信这个实验,因为 H[2] 的先验赔率较低。那么,什么样的先验赔率能够解释这个人不信服的原因,并且贝叶斯因子需要达到多少才能使这个不信服的人后验赔率达到 50?
现在假设先验赔率无法改变怀疑者的看法。想出一个替代的 H[3],来解释佛罗里达组步伐较慢的现象。记住,如果 H[2] 和 H[3] 都能同样好地解释数据,只有在支持 H[3] 的先验赔率较高时,才会有人声称 H[3] 比 H[2] 更为真实,因此我们需要重新思考实验,减少这些赔率。想出一个能够改变 H[3] 相对于 H[2] 的先验赔率的实验。
第十九章:从假设检验到参数估计

到目前为止,我们使用后验赔率仅仅比较了两个假设。这对于简单的问题来说是足够的;即使我们有三个或四个假设,我们也可以通过进行多个假设检验来测试它们,就像我们在前一章所做的那样。但有时候,我们想要搜索一个非常大的假设空间来解释我们的数据。例如,你可能想猜测一个罐子里有多少颗果冻豆,一栋远处建筑物的高度,或者一架航班到达需要多少分钟。在所有这些情况下,有许多可能的假设——多到无法为它们全部进行假设检验。
幸运的是,有一种方法可以处理这种情况。在第十五章中,我们学习了如何将参数估计问题转化为假设检验。在本章中,我们将做相反的事情:通过查看几乎连续的可能假设范围,我们可以使用贝叶斯因子和后验赔率(假设检验)作为一种参数估计的形式!这种方法使我们能够评估的不仅仅是两个假设,并为我们提供了一个简单的框架来估计任何参数。
嘉年华游戏真的是公平的吗?
假设你正在参加一个嘉年华活动。当你走过游戏区时,你注意到有人正在和一名嘉年华工作人员争论,旁边是一个装满小塑料鸭子的池塘。出于好奇,你走近一听,听到那名玩家大声喊道:“这个游戏是有问题的!你说中奖的机会是二分之一,我已经捡了 20 只鸭子,结果只得到了一个奖品!我看中奖的机会明明是二十分之一!”
既然你已经对概率有了深刻的理解,你决定亲自解决这个争论。你向工作人员和愤怒的顾客解释,如果你观察当天的更多游戏,你将能够使用贝叶斯因子来确定谁是对的。你决定将结果分为两个假设:H[1],表示工作人员声称中奖的概率是 1/2,以及 H[2],表示愤怒的顾客声称中奖的概率只是 1/20:

工作人员辩称,由于他没有看到顾客捡鸭子的过程,他认为你不应该使用他报告的数据,因为没有其他人能验证这些数据。你觉得这个理由是合理的。于是,你决定观察接下来的 100 场游戏,并将其作为你的数据。当顾客捡了 100 只鸭子后,你观察到其中有 24 只鸭子带有奖品。
现在,进入贝叶斯因子!由于我们对顾客或工作人员的主张没有强烈的看法,我们暂时不考虑先验赔率或计算完整的后验赔率。
为了得到我们的贝叶斯因子,我们需要计算每个假设下的 P(D | H):
P(D | H[1]) = (0.5)²⁴ × (1 – 0.5)⁷⁶
P(D | H[2]) = (0.05)²⁴ × (1 – 0.05)⁷⁶
现在,单独来看,这两个概率都非常小,但我们关心的只是比例。我们将以 H[2]/H[1] 的形式来看待我们的比例,这样我们的结果就能告诉我们客户的假设比服务员的假设更能解释数据多少倍:

我们的贝叶斯因子告诉我们,H[1],即服务员的假设,比 H[2] 更能解释数据 653 倍,这意味着服务员的假设(即捡起一只鸭子时获得奖品的概率是 0.5)是更可能的。
这应该立刻让人觉得很奇怪。显然,如果奖品的真实概率是 0.5,从 100 只鸭子中只获得 24 个奖品的概率看起来非常不可能。我们可以使用 R 的 pbinom() 函数(在第十三章中介绍)来计算二项分布,这将告诉我们在假设获得奖品的概率确实为 0.5 的情况下,获得 24 个或更少奖品的概率:
> pbinom(24,100,0.5)
9.050013e-08
正如你所看到的,如果奖品的真实概率是 0.5,获得 24 个或更少奖品的概率极低;将其展开到完整的小数值,我们得到的概率是 0.00000009050013!H[1] 绝对有问题。尽管我们不相信服务员的假设,但它仍然比客户的假设更能解释数据。
那么,缺少的是什么呢?过去我们经常发现,当仅仅依赖贝叶斯因子得出的结果没有意义时,先验概率往往起着重要作用。但正如我们在第十八章中看到的,也有一些情况,先验并不是问题的根源。在这种情况下,使用以下方程似乎是合理的,因为我们对结果没有强烈的偏好:

但也许问题在于你对嘉年华游戏的先入为主的不信任。由于贝叶斯因子极力偏向服务员的假设,我们需要让先验赔率至少为 653,才能得到一个支持客户假设的后验赔率:

这对游戏的公平性有极深的不信任!这里一定存在除先验之外的其他问题。
考虑多个假设
一个明显的问题是,虽然直觉上似乎很清楚服务员的假设是错的,但客户的替代理论也太极端,根本不可能是对的,因此我们有两个错误的假设。如果客户认为中奖的概率是 0.2,而不是 0.05 呢?我们将这个假设称为 H[3]。将 H[3] 与服务员的假设进行比较,结果会大大改变我们的似然比:

在这里,我们看到H[3]解释数据的效果远远好于H[1]。通过 917,399 的贝叶斯因子,我们可以确信H[1]远不是最能解释我们观察到的数据的最佳假设,因为H[3]将其远远甩在了后头。我们在第一次假设检验中遇到的问题是,顾客的信念比服务员的信念对事件的描述差得多。然而,正如我们所看到的,这并不意味着服务员是对的。当我们提出一个替代假设时,我们发现它比服务员和顾客的假设都要好得多。
当然,我们还没有真正解决问题。如果外面有一个更好的假设呢?
使用 R 搜索更多假设
我们想要一个更通用的解决方案,能够搜索我们所有的可能假设并挑选出最好的一个。为此,我们可以使用 R 的seq()函数创建一个我们想要与H[1]进行比较的假设序列。
我们将考虑从 0 到 1 之间每个 0.01 的增量作为一个可能的假设。这意味着我们会考虑 0.01、0.02、0.03,依此类推。我们将 0.01——即我们每次增加的假设量——称为dx(这是微积分中常用的符号,表示“最小的变化”),并用它来定义一个hypotheses变量,表示我们希望考虑的所有可能假设。在这里,我们使用 R 的seq()函数,通过将值按dx递增,生成一个从 0 到 1 之间的假设值范围:
dx <- 0.01
hypotheses <- seq(0,1,by=dx)
接下来,我们需要一个可以计算任意两个假设的似然比的函数。我们的bayes.factor()函数将接受两个参数:h_top,即顶部假设(分子)获得奖品的概率,以及h_bottom,即我们正在竞争的假设(服务员的假设)。我们将这样设置:
bayes.factor <- function(h_top,h_bottom){
((h_top)²⁴*(1-h_top)⁷⁶)/((h_bottom)²⁴*(1-h_bottom)⁷⁶)
}
最后,我们计算所有这些可能假设的似然比:
bfs <- bayes.factor(hypotheses,0.5)
然后,我们使用 R 的基本绘图功能来查看这些似然比的样子:
plot(hypotheses,bfs, type='l')
图 19-1 显示了结果图。

图 19-1:为每个假设绘制贝叶斯因子
现在我们可以清楚地看到观察到的数据有不同的解释分布。使用 R,我们可以查看一系列可能的假设,其中我们线条上的每个点代表对应假设的贝叶斯因子,横坐标是假设值。
我们还可以通过使用max()函数和我们的bfs向量来查看最大的贝叶斯因子有多高:
> max(bfs)
1.47877610^{6}
然后我们可以检查哪个假设对应于最高的似然比,这将告诉我们我们应该最相信哪个假设。为此,输入:
> hypotheses[which.max(bfs)]
0.24
现在我们知道,概率 0.24 是我们最好的猜测,因为这个假设与服务员的假设相比,产生了最高的似然比。在第十章中,你学到了使用数据的均值或期望值通常是得出参数估计的一种好方法。这里我们只是简单地选择了能够最好地解释数据的假设,因为我们目前没有办法根据发生的概率来加权我们的估计。
将先验信息加入我们的似然比
现在假设你将你的发现展示给客户和服务员。两人都同意你的发现相当有说服力,但接着另一个人走过来对你说:“我曾经做过这种游戏,我可以告诉你,出于某种奇怪的行业原因,设计这些鸭子游戏的人从不把奖品率设定在 0.2 到 0.3 之间。我敢打赌,真实的奖品率不会在这个范围内,赔率是 1,000 比 1。除此之外,我没有任何线索。”
现在我们有了一些先验赔率,希望使用它们。由于前游戏制作人给了我们一些关于他先验信念的关于获奖概率的实质赔率,我们可以尝试将这个赔率与我们当前的贝叶斯因子列表相乘,并计算后验赔率。为了做到这一点,我们为我们拥有的每个假设创建一个先验赔率比的列表。正如前游戏制作人所说,0.2 到 0.3 之间的所有概率的先验赔率比应该是 1/1,000。由于制作人对其他假设没有意见,这些假设的赔率比将是 1。我们可以使用一个简单的ifelse语句,利用我们的hypotheses向量,来创建一个我们的赔率比向量:
priors <- ifelse(hypotheses >= 0.2 & hypotheses <= 0.3, 1/1000,1)
然后,我们可以再次使用plot()来显示这个事先分布:
plot(hypotheses,priors,type='l')
图 19-2 展示了我们事先的赔率分布。
因为 R 是一个基于向量的语言(关于这一点的更多信息,请参见附录 A),我们可以简单地将我们的priors与bfs相乘,得到一个新的posteriors向量,表示我们的贝叶斯因子:
posteriors <- priors*bfs
最后,我们可以绘制每个假设的后验赔率图:
plot(hypotheses,posteriors,type='l')
图 19-3 显示了这个图。

图 19-2:可视化我们的先验赔率比

图 19-3:绘制我们的贝叶斯因子分布
正如我们所看到的,我们得到了一种非常奇怪的可能信念分布。我们对 0.15 到 0.2 之间以及 0.3 到 0.35 之间的值有合理的信心,但发现 0.2 到 0.3 之间的范围极不可能。但这个分布是真实地代表了我们对每个假设的信念强度,基于我们对鸭子游戏制造过程的了解。
虽然这种可视化图很有帮助,但我们实际上希望能够像处理真实的概率分布一样处理这些数据。这样,我们就可以问一些关于我们对可能假设范围的信任程度的问题,并计算出我们的分布期望值,从而得到一个我们认为的假设单一估计值。
构建概率分布
真实的概率分布是所有可能的信念总和为 1 的分布。拥有一个概率分布将使我们能够计算数据的期望(或均值),以便对真实的获奖率做出更好的估计。它还将使我们能够轻松地对一系列值求和,从而得出置信区间和其他类似的估计值。
问题是,如果我们将所有假设的后验比值加起来,它们的和并不为 1,正如这个计算所示:
> sum(posteriors)
3.140687510^{6}
这意味着我们需要将我们的后验比值归一化,使它们的和为 1。为此,我们只需将posteriors向量中的每个值除以所有值的和:
p.posteriors <- posteriors/sum(posteriors)
现在我们可以看到我们的p.posteriors值的和为 1:
> sum(p.posteriors)
1
最后,让我们绘制我们新的p.posteriors:
plot(hypotheses,p.posteriors,type='l')
图 19-4 展示了该图。

图 19-4:我们归一化后的后验比值(注意 y 轴的比例)
我们还可以使用p.posteriors来回答一些我们可能对数据有的常见问题。例如,我们现在可以计算真实的获奖率低于服务员所声称的概率。我们只需将所有小于 0.5 的概率加起来:
sum(p.posteriors[which(hypotheses < 0.5)])
> 0.9999995
如我们所见,奖品率低于服务员假设的概率接近 1。也就是说,我们几乎可以确定服务员高估了真实的奖品率。
我们还可以计算我们的分布期望,并将此结果作为我们对真实概率的估计值。请记住,期望值只是按其值加权的所有估计值的总和:
> sum(p.posteriors*hypotheses)
0.2402704
当然,我们可以看到我们的分布有些不典型,中间有一个大间隙,所以我们可能只是想选择最可能的估计值,如下所示:
> hypotheses[which.max(p.posteriors)]
0.19
现在我们已经使用贝叶斯因子提出了一系列关于真实可能的获奖概率估计值。这意味着我们已经将贝叶斯因子作为一种参数估计的方法!
从贝叶斯因子到参数估计
让我们再花点时间单独看一下我们的似然比率。当我们没有为任何假设使用先验概率时,你可能会觉得我们已经有了一个非常好的方法来解决这个问题,而不需要贝叶斯因子。我们观察到 24 只带奖品的鸭子和 76 只不带奖品的鸭子。难道我们不能直接使用我们那熟悉的 beta 分布来解决这个问题吗?正如我们从第五章以来多次讨论的那样,如果我们想估计某个事件的发生率,我们总是可以使用 beta 分布。图 19-5 显示了一个 alpha 为 24、beta 为 76 的 beta 分布图。

图 19-5:具有 alpha 为 24 和 beta 为 76 的 beta 分布
除了 y 轴的刻度外,这个图几乎与我们似然比率的原始图相同!事实上,如果我们做一些简单的调整,我们可以让这两个图完美对齐。如果我们按我们的 dx 的大小缩放 beta 分布,并标准化我们的 bfs,我们可以看到这两个分布变得非常接近(见图 19-6)。

图 19-6:我们的初始似然比率分布与 Beta(24,76) 映射得相当接近。
现在似乎只有一点点差异。我们可以通过使用最弱的先验来修正这一点,这表明获得奖品和不获得奖品的可能性是相等的——也就是说,通过将 1 加到 alpha 和 beta 参数中,如图 19-7 所示。

图 19-7:我们的似然比率完美地映射到一个 Beta(24+1,76+1) 分布。
现在我们可以看到这两个分布完全对齐。第五章提到,beta 分布是从我们基本的概率规则推导出来的有一定难度。然而,通过使用贝叶斯因子,我们能够经验性地重现一个修改版的 beta 分布,并假设其先验为 Beta(1,1)。而且我们做这一切时不需要任何复杂的数学!我们所需要做的就是:
-
定义给定假设下证据的概率。
-
考虑所有可能的假设。
-
将这些值标准化,创建一个概率分布。
在本书中每次使用 beta 分布时,我们都使用了一个 beta 分布的先验。这使得数学变得更简单,因为我们可以通过结合似然和先验 beta 分布的 alpha 和 beta 参数来得到后验分布。换句话说:
Beta(α[后验], β[后验]) = Beta(α[先验] + α[似然], β[先验] + β[似然])
然而,通过从贝叶斯因子构建我们的分布,我们能够轻松地使用一个独特的先验分布。贝叶斯因子不仅是设置假设检验的一个伟大工具,事实上,它也是我们解决问题所需的所有工具,无论是假设检验还是参数估计。我们只需要能够定义两个假设之间的基本比较,这样我们就可以开始了。
当我们在第十五章中构建我们的 A/B 测试时,我们弄清楚了如何将许多假设检验简化为参数估计问题。现在你已经看到了最常见形式的假设检验也可以用于执行参数估计。凭借这两个相关的洞察,几乎没有限制我们可以通过仅使用概率的基本规则来解决的概率问题类型。
总结
现在你已经完成了贝叶斯统计的学习之旅,你可以真正欣赏你所学的知识的美妙。从概率的基本规则开始,我们可以推导出贝叶斯定理,贝叶斯定理让我们将证据转化为一个表达我们信念强度的陈述。通过贝叶斯定理,我们可以推导出贝叶斯因子,这是一个用于比较两个假设如何解释我们观察到的数据的工具。通过迭代可能的假设并归一化结果,我们可以使用贝叶斯因子为未知值创建参数估计。反过来,这使我们能够通过比较我们的估计进行无数其他的假设检验。而我们需要做的,正是使用概率的基本规则来定义我们的似然,P(D | H)!
练习
尝试回答以下问题,看看你在使用贝叶斯因子和后验比率进行参数估计方面的理解程度。解决方案可以在 nostarch.com/learnbayes/ 找到。
-
我们的贝叶斯因子假设我们在观察 H[1]: P(奖品) = 0.5。这让我们推导出了一个贝塔分布版本,α为 1,β为 1。如果我们选择一个不同的概率值为 H[1],这是否会有所不同?假设 H[1]: P(奖品) = 0.24,那么看看归一化后使其总和为 1 的分布,是否与原假设的分布有所不同。
-
为分布写一个先验,其中每个假设比前一个假设的可能性大 1.05 倍(假设我们的
dx保持不变)。 -
假设你观察到了另一个鸭子游戏,其中包括 34 只有奖鸭和 66 只没有奖鸭。你如何设置一个检验来回答“在这个游戏中,你赢得奖品的机会比我们示例中的游戏更大吗?”实现这一点需要比本书中使用的 R 语言更复杂一些,但看看你能否自己学会这些,开始你在更高级贝叶斯统计学的冒险吧!
第二十章:**A
R**快速介绍

在本书中,我们使用 R 编程语言来帮助我们完成一些复杂的数学工作。R 是一种专门用于统计学和数据科学的编程语言。如果你没有 R 的使用经验,或者没有编程经验,别担心——本附录将帮助你入门。
R 和 RStudio
要运行本书中的代码示例,你需要在电脑上安装 R。安装 R,请访问 cran.rstudio.com/ 并按照你使用的操作系统的安装步骤进行安装。
安装完 R 后,你还应该安装 RStudio,它是一个集成开发环境(IDE),使得运行 R 项目变得极为简单。从 www.rstudio.com/products/rstudio/download/ 下载并安装 RStudio。
当你打开 RStudio 时,你应该会看到几个面板(见图 A-1)。

图 A-1:查看 RStudio 中的控制台
最重要的面板是中间的大面板,叫做 控制台。在控制台中,你可以输入书中的任何代码示例,并通过按下 ENTER 键来运行它们。控制台会立即运行你输入的所有代码,这使得跟踪你到目前为止写过的代码变得困难。
要编写可以保存并稍后继续使用的程序,你可以将代码放入一个 R 脚本 中,R 脚本是一个文本文件,稍后你可以加载到控制台中。R 是一种极具交互性的编程语言,因此不要把控制台仅仅看作是你可以测试代码的地方,应该把 R 脚本看作是一种可以快速加载到控制台中使用的工具。
创建 R 脚本
要创建 R 脚本,在 RStudio 中选择 文件▸新建文件▸R 脚本。这将会在左上方创建一个新的空白面板(见图 A-2)。

图 A-2:创建 R 脚本
在这个面板中,你可以输入代码并将其保存为文件。要运行代码,只需点击面板右上角的 源代码 按钮,或者点击 运行 按钮来运行单独的代码行。源代码按钮将自动把你的文件加载到控制台,就像你自己输入的那样。
R 中的基本概念
本书中我们将把 R 用作一个高级计算器,这意味着你只需要理解一些基础知识,就能自己解决问题并扩展书中的示例。
数据类型
所有编程语言都有不同类型的数据,你可以根据不同的用途使用这些数据并以不同的方式进行操作。R 有丰富的数据类型和数据结构,但本书中我们只会使用其中一小部分。
双精度
我们在 R 中使用的数字都属于 双精度 类型(即“double-precision floating-point”,是计算机中表示小数的最常见方式)。双精度是表示小数的默认类型。除非另有指定,否则你在控制台输入的所有数字都是双精度类型。
我们可以使用标准的数学运算操作符对双精度类型的数字进行操作。例如,我们可以用 + 操作符对两个数字进行加法运算。在控制台中试试看:
> 5 + 2
[1] 7
我们还可以使用 / 操作符来除以任何会得到小数结果的数字:
> 5/2
[1] 2.5
我们可以像这样用 * 操作符来乘以值:
> 5 * 2
[1] 10
并使用 ^ 操作符对值进行指数运算。例如,5² 是:
> 5²
[1] 25
我们还可以在数字前加 - 使其变为负数:
> 5 - -2
[1] 7
我们也可以使用带有 e+ 的科学计数法。所以 5 × 10² 就是:
> 5e+2
[1] 500
如果我们使用 e-,我们将得到与 5 × 10^(–2) 相同的结果:
> 5e-2
[1] 0.05
了解这一点很有用,因为有时如果结果太大,R 会以科学计数法的形式返回结果,这样可能会更易于显示,如下所示:
> 5*10²⁰
[1] 5e+20
字符串
R 中的另一个重要类型是 字符串,它只是用于表示文本的一组字符。在 R 中,我们用引号将字符串括起来,像这样:
> "hello"
[1] "hello"
请注意,如果你把一个数字放在字符串中,你就不能在常规的数字运算中使用该数字,因为字符串和数字是不同的类型。例如:
> "2" + 2
Error in "2" + 2 : non-numeric argument to binary operator
在本书中,我们不会频繁使用字符串。我们主要用它们来传递函数参数和为图表添加标签。但如果你使用文本,记住它们是很重要的。
逻辑类型
逻辑 或 二进制 类型是真或假值,由代码 TRUE 和 FALSE 表示。请注意,TRUE 和 FALSE 不是字符串——它们不被引号包围,且全部字母大写。(R 还允许你使用 T 或 F 来代替写出完整的单词。)
我们可以将逻辑类型与符号 &(“与”)和 |(“或”)结合,执行基本的逻辑操作。例如,如果我们想知道某个事物是否可能同时为真 且 为假,我们可以输入:
> TRUE & FALSE
R 会返回:
[1] FALSE
这告诉我们一个值不能同时为真和假。
那么,真 或 假呢?
> TRUE | FALSE
[1] TRUE
像字符串一样,在本书中逻辑值主要用来作为我们将要使用的函数的参数,或者作为比较两个不同值的结果。
缺失值
在实际统计学和数据科学中,数据经常缺失一些值。例如,假设你有一个月每天早晚的温度数据,但某一天出现了故障,导致缺失了早晨的温度。由于缺失值非常常见,R 语言有一种特殊的方式来表示它们:使用值NA。处理缺失值非常重要,因为它们在不同的上下文中可能意味着截然不同的事情。例如,当你测量降水量时,缺失值可能意味着雨量计里没有雨水,或者可能意味着那天晚上温度非常低,导致雨量计破裂,所有的水都泄漏了。在第一种情况下,我们可能会认为缺失值意味着 0,但在后者情况下,缺失值到底应该是多少就不太清楚了。将缺失值与其他值区分开来,迫使我们考虑这些差异。
为了提示我们在尝试使用缺失值时弄清楚它们的含义,R 会在任何涉及缺失值的操作中输出NA:
> NA + 2
[1] NA
正如我们稍后将看到的,R 中的各种函数可以用不同的方式处理缺失值,但对于本书中的 R,你不需要担心缺失值。
向量
几乎每种编程语言都有一些特殊功能,使得它在解决特定领域的问题时格外合适。R 语言的特别之处在于它是一个向量语言。向量是一个值的列表,R 做的每一件事都是对向量的操作。我们使用代码c(...)来定义向量(即使我们只输入一个值,R 也会自动为我们处理!)。
为了理解向量的工作原理,我们来看一个例子。请输入下面的代码到脚本中,而不是控制台。我们首先通过将变量x赋值为向量c(1,2,3),并使用赋值操作符<-来创建一个新的向量,如下所示:
x <- c(1,2,3)
现在我们有了一个向量,可以将它用于我们的计算中。当我们执行一个简单的操作,比如将3加到x时,在控制台中输入这个操作会得到一个相当意外的结果(尤其是如果你习惯了其他编程语言的话):
> x + 3
[1] 4 5 6
x + 3的结果告诉我们,如果将3加到x向量中的每个值上,会发生什么情况。(在许多其他编程语言中,我们可能需要使用for循环或其他迭代器来执行此操作。)
我们也可以将向量相加。在这里,我们将创建一个新向量,包含三个元素,每个元素的值为2。我们将这个向量命名为y,然后将y加到x上:
> y <- c(2,2,2)
> x + y
[1] 3 4 5
如你所见,这个操作将x中的每个元素与y中的对应元素相加。
如果我们将两个向量相乘会怎样?
> x * y
[1] 2 4 6
x中的每个值都被其在y中对应的值相乘。如果列表大小不一样,或者不是同一大小的倍数,那么我们会遇到错误。如果一个向量是另一个向量的倍数,R 会反复将较小的向量应用到较大的向量上。然而,在本书中,我们不会利用这一特性。
我们可以通过基于现有的向量定义另一个向量来轻松地组合向量。在这里,我们通过将x和y组合在一起创建向量z:
> z <- c(x,y)
> z
[1] 1 2 3 2 2 2
请注意,这个操作没有给我们一个向量的向量;相反,我们得到了一个单一的向量,其中包含了x和y中所有的值,顺序就是你在定义z时设定的x和y的顺序。
对于初学者来说,学习在 R 中高效使用向量可能有点棘手。具有非向量语言经验的程序员常常是最难适应的。别担心:在本书中,我们将使用向量使代码更易读。
函数
函数是执行特定操作的代码块,我们将在 R 中使用它们来解决问题。
在 R 和 RStudio 中,所有函数都配有文档。如果你在 R 控制台中输入?加上函数名,你将看到该函数的完整文档。例如,如果你在 RStudio 控制台中输入?sum,你应该能在右下角的屏幕上看到如图 A-3 所示的文档。

图 A-3:查看 sum()函数的文档
这份文档给出了sum()函数的定义及其一些用法。sum()函数将一个向量的值相加。文档中提到它接受...作为参数,这意味着它可以接受任意数量的值。通常这些值是一个数字向量,但它们也可以是多个向量。
文档还列出了一个可选参数:na.rm = FALSE。可选参数是你不需要传递给函数的参数,函数仍然可以正常工作;如果你没有传递可选参数,R 将使用该参数的默认值。在na.rm的情况下,它会自动删除任何缺失值,默认值在等号后是FALSE。这意味着默认情况下,sum()不会删除缺失值。
基础函数
以下是 R 中一些最重要的函数。
length()和 nchar()函数
length()函数将返回一个向量的长度:
> length(c(1,2,3))
[1] 3
由于该向量中有三个元素,length()函数返回3。
因为 R 中的一切都是向量,所以你可以使用length()函数来查找任何东西的长度——即使是像“doggies”这样的字符串:
> length("doggies")
[1] 1
R 告诉我们“doggies”是一个包含一个字符串的向量。
现在,如果我们有两个字符串,“doggies”和“cats”,我们将得到:
> length(c("doggies","cats"))
[1] 2
要查找字符串中的字符数,我们使用nchar()函数:
> nchar("doggies")
[1] 7
注意,如果我们对c(“doggies”,”cats”)向量使用nchar(),R 会返回一个新向量,包含每个字符串的字符数:
> nchar(c("doggies","cats"))
[1] 7 4
sum()、cumsum()和 diff()函数
sum()函数接受一个数字向量,并将所有这些数字相加:
> sum(c(1,1,1,1,1))
[1] 5
正如我们在前一节的文档中看到的,sum()接受...作为其参数,这意味着它可以接受任意数量的值:
> sum(2,3,1)
[1] 6
> sum(c(2,3),1)
[1] 6
> sum(c(2,3,1))
[1] 6
如你所见,无论我们提供多少个向量,sum()都会将它们加起来,就好像它们是一个整数的单一向量。如果你想对多个向量求和,你需要分别对它们调用sum()。
另外请记住,sum()函数有一个可选参数na.rm,默认设置为FALSE。na.rm参数决定了sum()是否移除NA值。
如果我们将na.rm保持为FALSE,当我们尝试对包含缺失值的向量使用sum()时,会发生以下情况:
> sum(c(1,NA,3))
[1] NA
正如我们在引入NA时看到的,将一个值加到NA值上会得到NA。如果我们希望 R 给出一个数字作为答案,我们可以通过设置na.rm = TRUE来告诉sum()去除NA值:
> sum(c(1,NA,3),na.rm = TRUE)
[1] 4
cumsum()函数接受一个向量并计算其累积和——一个与输入向量长度相同的向量,将每个数字替换为它前面所有数字的和(包括该数字)。下面是一个代码示例,使这一点更加清晰:
> cumsum(c(1,1,1,1,1))
[1] 1 2 3 4 5
> cumsum(c(2,10,20))
[1] 2 12 32
diff()函数接受一个向量,并从向量中每个数字中减去前一个数字:
> diff(c(1,2,3,4,5))
[1] 1 1 1 1
> diff(c(2,10,3))
[1] 8 -7
注意,diff()函数的结果比原始向量少了一个元素。这是因为第一个值没有被减去。
:运算符和seq()函数
通常,我们会希望自动生成向量,而不是手动列出每个元素。为了自动创建某个范围内的整数向量,我们可以使用:运算符来分隔范围的起始值和结束值。R 甚至能够判断你是想递增还是递减(将c()包裹此运算符并非严格必要):
> c(1:5)
[1] 1 2 3 4 5
> c(5:1)
[1] 5 4 3 2 1
当你使用:时,R 会从第一个值数到最后一个值。
有时我们希望按其他增量计数,而不是每次增加 1。seq()函数允许我们创建递增指定数值的序列向量。seq()的参数依次是:
-
序列的起始
-
序列的结束
-
序列的递增量
这里有一些使用seq()的示例:
> seq(1,1.1,0.05)
[1] 1.00 1.05 1.10
> seq(0,15,5)
[1] 0 5 10 15
> seq(1,2,0.3)
[1] 1.0 1.3 1.6 1.9
如果我们想用seq()函数倒数到某个值,我们可以使用负值作为递增量,例如这样:
> seq(10,5,-1)
[1] 10 9 8 7 6 5
ifelse()函数
ifelse()函数告诉 R 根据某个条件执行两种操作之一。如果你习惯于其他语言中的普通if ... else控制结构,这个函数可能会有点让人困惑。在 R 中,它接受以下三个参数(按顺序):
-
一个关于向量的陈述,表明该向量的值可能为真或假
-
当条件为真时会发生什么
-
当条件为假时会发生什么
ifelse()函数会一次性操作整个向量。当向量只包含单个值时,它的使用非常直观:
> ifelse(2 < 3,"small","too big")
[1] "small"
这里的条件是 2 小于 3,我们要求 R 如果成立则输出“small”,否则输出“too big”。
假设我们有一个包含多个值的向量x:
> x <- c(1,2,3)
ifelse()函数会为向量中的每个元素返回一个值:
> ifelse(x < 3,"small","too big")
[1] "small" "small" "too big"
我们还可以在ifelse()的结果参数中使用向量。假设除了我们的x向量外,我们还有另一个向量y:
y <- c(2,1,6)
我们想生成一个新列表,其中包含向量中每个元素对应的x和y的最大值。我们可以使用ifelse()来非常简单地解决这个问题:
> ifelse(x > y,x,y)
[1] 2 2 6
你可以看到 R 已将x中的值与y中相应的值进行了比较,并输出每个元素中较大的那个。
随机抽样
我们经常使用 R 来随机抽样。这使得计算机可以为我们选择一个随机的数字或值。我们使用这个样本来模拟活动,例如抛硬币、玩“剪刀石头布”或从 1 到 100 之间选择一个数字。
runif()函数
一种随机抽样的方法是使用runif()函数,它是“随机均匀”的缩写,接受一个必需的参数n,并在 0 到 1 的范围内提供相应数量的样本:
> runif(5)
[1] 0.8688236 0.1078877 0.6814762 0.9152730 0.8702736
我们可以将这个函数与ifelse()结合使用,以 20%的概率生成值A。在这种情况下,我们将使用runif(5)创建五个 0 到 1 之间的随机值。如果某个值小于 0.2,则返回A;否则,返回“B”:
> ifelse(runif(5) < 0.2,"A","B")
[1] "B" "B" "B" "B" "A"
由于我们生成的数字是随机的,因此每次运行ifelse()函数时我们都会得到不同的结果。以下是一些可能的结果:
> ifelse(runif(5) < 0.2,"A","B")
[1] "B" "B" "B" "B" "B"
> ifelse(runif(5) < 0.2,"A","B")
[1] "A" "A" "B" "B" "B"
runif()函数可以接受可选的第二和第三个参数,分别是均匀抽样范围的最小值和最大值。默认情况下,函数使用的是 0 到 1(包括 1)之间的范围,但你可以设置成任何你想要的范围:
> runif(5,0,2)
[1] 1.4875132 0.9368703 0.4759267 1.8924910 1.6925406
rnorm()函数
我们还可以使用rnorm()函数从正态分布中抽样,书中将更深入讨论这一点(正态分布内容见第十二章):
> rnorm(3)
[1] 0.28352476 0.03482336 -0.20195303
默认情况下,rnorm()从均值为 0,标准差为 1 的正态分布中抽样,就像这个例子一样。对于不熟悉正态分布的读者来说,这意味着样本将围绕 0 呈“钟形”分布,大多数样本接近 0,极少有小于-3 或大于 3 的样本。
rnorm()函数有两个可选参数,mean和sd,允许你分别设置不同的均值和标准差:
> rnorm(4,mean=2,sd=10)
[1] -12.801407 -9.648737 1.707625 -8.232063
在统计学中,从正态分布中抽样通常比从均匀分布中抽样更为常见,因此rnorm()非常有用。
sample()函数
有时,我们想要从其他分布中进行采样,而不仅仅是从一个经过充分研究的分布中进行采样。假设你有一个抽屉,里面装着多种颜色的袜子:
socks <- c("red","grey","white","red","black")
如果你想模拟随机挑选两只袜子的行为,你可以使用 R 的 sample() 函数,该函数的参数是一个值的向量和要采样的元素数量:
> sample(socks,2)
[1] "grey" "red"
sample() 函数的行为就像我们从抽屉里挑选了两只随机的袜子 —— 而且没有将任何袜子放回去。如果我们采样五只袜子,我们将得到最初抽屉里所有的袜子:
> sample(socks,5)
[1] "grey" "red" "red" "black" "white"
这意味着如果我们尝试从抽屉中拿出六只袜子,而抽屉里只有五只袜子可用,我们将会得到一个错误:
> sample(socks,6)
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
如果我们希望同时进行采样并且“把袜子放回去”,我们可以将可选参数 replace 设置为 TRUE。现在,每次我们采样一只袜子时,我们都会把它放回抽屉。这使得我们能够采样更多的袜子,而抽屉里的袜子数量并不会改变。这也意味着抽屉中袜子的分布永远不会变化。
> sample(socks,6,replace=TRUE)
[1] "black" "red" "black" "red" "black" "black"
有了这些简单的采样工具,你可以在 R 中运行出令人惊讶的复杂模拟,省去了大量数学计算。
使用 set.seed() 获取可预测的随机结果
R 生成的“随机数”并不是真正的随机数。像所有编程语言一样,随机数是通过伪随机数生成器生成的,该生成器采用一个种子值,并利用该种子值生成一串足够随机的数字,适用于大多数用途。种子值设置了随机数生成器的初始状态,并决定接下来会生成哪些数字。在 R 中,我们可以通过 set.seed() 函数手动设置这个种子。设置种子在我们希望使用相同的随机结果时非常有用:
> set.seed(1337)
> ifelse(runif(5) < 0.2,"A","B")
[1] "B" "B" "A" "B" "B"
> set.seed(1337)
> ifelse(runif(5) < 0.2,"A","B")
[1] "B" "B" "A" "B" "B"
正如你所看到的,当我们使用相同的种子两次,并调用 runif() 函数时,它生成了相同的所谓随机值。使用 set.seed() 的主要好处是使结果可复现。这可以大大简化跟踪程序中涉及采样的 bug,因为每次运行程序时,结果都不会发生变化。
定义你自己的函数
有时编写我们自己的函数来执行一些需要反复操作的特定任务是非常有用的。在 R 中,我们可以使用关键字 function 来定义函数(在编程语言中,关键字是指编程语言为特定用途保留的特殊单词)。
下面是一个函数的定义,它接受一个单一参数 val —— 这里代表用户输入的值 —— 然后将 val 进行两倍和立方操作。
double_then_cube <- function(val){
(val*2)³
}
一旦我们定义了函数,就可以像使用 R 的内建函数一样使用它。下面是我们应用于数字 8 的 double_then_cube() 函数:
> double_then_cube(8)
[1] 4096
此外,由于我们定义函数时所做的所有操作都是向量化的(也就是说,所有的值都作用于值的向量),我们的函数不仅能作用于单个值,也能作用于向量:
> double_then_cube(c(1,2,3))
[1] 8 64 216
我们也可以定义接受多个参数的函数。这里定义的 sum_then_square() 函数将两个参数相加,然后对结果进行平方:
sum_then_square <- function(x,y){
(x+y)²
}
通过在函数定义中包含两个参数 (x,y),我们告诉 R sum_then_square() 函数期望两个参数。现在我们可以像这样使用我们新的函数:
> sum_then_square(2,3)
[1] 25
> sum_then_square(c(1,2),c(5,3))
[1] 36 25
我们也可以定义需要多行代码的函数。在 R 中,当调用函数时,它始终返回函数定义最后一行计算的结果。这意味着我们可以像这样重写 sum_then_square():
sum_then_square <- function(x,y){
sum_of_args <- x+y
square_of_result <- sum_of_args²
square_of_result
}
通常,当你编写函数时,你会希望将它们写入 R 脚本文件中,这样你就可以保存它们并在以后重用。
创建基本图表
在 R 中,我们可以非常轻松地生成数据的图表。虽然 R 拥有一个非常强大的绘图库 ggplot2,其中包含许多用于生成美丽图表的有用函数,但我们暂时将自己限制在 R 的基础绘图函数,这些函数本身已经非常有用。
为了展示绘图如何工作,我们将创建两个值的向量,即我们的 xs 和 ys:
> xs <- c(1,2,3,4,5)
> ys <- c(2,3,2,4,6)
接下来,我们可以将这些向量作为参数传递给 plot() 函数,后者将为我们绘制数据。plot() 函数有两个参数:x 轴上各点的值和 y 轴上这些点的值,顺序是这样的:
> plot(xs,ys)
此函数应在 RStudio 的左下角窗口中生成 图 A-4 中所示的图表。

图 A-4:使用 R 的 plot() 函数创建的简单图表
该图表显示了我们 xs 值与其对应的 ys 值之间的关系。如果我们回到函数中,可以使用可选的 main 参数为该图表添加标题。我们还可以使用 xlab 和 ylab 参数更改 x 轴和 y 轴的标签,像这样:
plot(xs,ys,
main="example plot",
xlab="x values",
ylab="y values"
)
新的标签应按 图 A-5 中的显示方式出现。

图 A-5:使用 plot() 函数更改图表标题和标签
我们还可以使用 type 参数更改图表的类型。我们生成的第一种图表叫做 点图,但如果我们想制作折线图,通过每个值绘制一条线,我们可以设置 type="l":
plot(xs,ys,
type="l",
main="example plot",
xlab="x values",
ylab="y values"
)
然后它看起来就像 图 A-6。

图 A-6:使用 R 的 plot() 函数生成的折线图
或者我们可以两者都做!一个叫做 lines() 的 R 函数可以向现有图表添加线条。它接受与 plot() 相似的大多数参数:
plot(xs,ys,
main="example plot",
xlab="x values",
ylab="y values"
)
lines(xs,ys)
图 A-7 显示了此函数生成的图表。

图 A-7:使用 R 的 lines() 函数向现有图表添加线条
使用 R 的基础图形还有很多令人惊叹的方式,你可以通过查阅 ?plot 获取更多信息。然而,如果你想在 R 中创建真正美丽的图表,建议研究 ggplot2 库 (ggplot2.tidyverse.org/).
练习:模拟股票价格
现在,让我们把学到的所有内容结合起来,创建一个模拟的股票行情!人们通常使用正态分布随机值的累积和来模拟股票价格。首先,我们通过使用 seq() 函数生成一个从 1 到 20 的数值序列,每次递增 1 来模拟一段时间内的股票价格变动。我们将代表这段时间的向量命名为 t.vals。
t.vals <- seq(1,20,by=1)
现在,t.vals 是一个包含从 1 到 20 的数字序列的向量,每次递增 1。接下来,我们通过对每个 t.vals 中的时间点使用正态分布值的累积和来创建模拟的价格。为此,我们将使用 rnorm() 来抽取与 t.vals 长度相等的随机值,然后使用 cumsum() 来计算这些值的累积和。这将代表价格基于随机运动的上下波动;较小的波动比极端波动更常见。
price.vals <- cumsum(rnorm(length(t.vals),mean=5,sd=10))
最后,我们可以将所有这些数值绘制成图,看看它们的效果!我们将同时使用 plot() 和 lines() 函数,并根据它们所代表的内容标记坐标轴。
plot(t.vals,price.vals,
main="Simulated stock ticker",
xlab="time",
ylab="price")
lines(t.vals,price.vals)
plot() 和 lines() 函数应生成图 A-8 所示的图表。

图 A-8:为我们模拟的股票行情生成的图表
总结
本附录应涵盖足够的 R 知识,以便你理解本书中的示例。我建议你跟着书中的章节学习,然后通过修改代码示例来进一步探索。R 还提供了丰富的在线文档,如果你想深入实验,可以参考它们。
第二十一章:**B
足够的微积分知识来应对**

在本书中,我们偶尔会使用一些微积分的概念,尽管不需要实际手动解决微积分问题!需要的是真正理解一些微积分的基础知识,例如导数和(尤其是)积分。本附录绝不是试图深入教授这些概念或展示如何解题,而是简要概述这些思想以及它们在数学符号中的表示方式。
函数
一个 函数 就是一个数学“机器”,它接受一个值,对其进行操作并返回另一个值。这与 R 中的函数非常相似(见 附录 A):它们接受一个值并返回一个结果。例如,在微积分中,我们可能会有一个名为 f 的函数,定义如下:
f(x) = x²
在这个例子中,f 接受一个值 x 并将其平方。如果我们输入值 3 到 f 中,例如,我们得到:
f(3) = 9
这与高中代数中你可能见过的情况有所不同,在那里你通常会有一个值 y 和一些包含 x 的方程式。
y = x²
函数之所以重要,部分原因在于它们使我们能够抽象化我们所做的实际计算。也就是说,我们可以说像 y = f(x) 这样的表达式,只关注函数本身的抽象行为,而不必关心它是如何定义的。这就是我们在本附录中采用的方法。
作为一个例子,假设你正在训练参加一场 5 公里的比赛,并且你正在使用一块智能手表来跟踪你的距离、速度、时间和其他因素。你今天去跑步,跑了半个小时。然而,你的智能手表出现了故障,只记录了你 30 分钟跑步过程中每小时的速度(mph)。图 B-1 显示了你能够恢复的数据。
对于这个附录,可以将你的奔跑速度视为由一个函数 s 创建的,该函数接受一个参数 t,即时间(小时)。一个函数通常以它所接受的参数来表示,所以我们会写作 s(t),它的结果是一个给出你在时间 t 时刻的当前速度的值。你可以将函数 s 看作是一个机器,它接受当前时间并返回你在那个时间点的速度。在微积分中,我们通常会有一个 s(t) 的具体定义,比如 s(t) = t² + 3t + 2,但在这里我们仅讨论一般概念,因此不需要关注 s 的具体定义。
注意
在整本书中,我们将使用 R 来处理所有的微积分需求,因此实际上你只需要理解它背后的基本概念,而不是解决微积分问题的具体步骤。
从这个函数中,我们可以学到一些东西。很明显,在这次跑步中,你的步伐有些不均匀,从接近 8 mph 的高点到刚开始时接近 4.5 mph 的低点,速度有上有下。

图 B-1:你跑步时在某一时刻的速度
然而,仍然有许多有趣的问题你可能想回答,比如:
-
你跑了多远?
-
你什么时候减速最多?
-
你什么时候加速最快?
-
在什么时间段内你的速度比较稳定?
我们可以通过这个图表对最后一个问题做出相当准确的估计,但其他问题似乎无法仅凭现有数据回答。然而,事实证明,我们可以利用微积分的力量回答所有这些问题!让我们看看怎么做。
确定你跑了多远
目前我们的图表只显示你在某一时刻的跑步速度,那么我们如何得知你跑了多远呢?
理论上这听起来不太难。例如,假设你整个过程中的速度都保持在 5 英里每小时,那么你在 0.5 小时内跑了 5 英里每小时的速度,因此你跑的总距离是 2.5 英里。这直观上是有道理的,因为你每小时跑 5 英里,但你只跑了半小时,所以你跑的距离是你一个小时跑的距离的一半。
但我们的问题涉及到你跑步时几乎每一刻的速度都是不同的。让我们换个角度看这个问题。图 B-2 展示了恒定跑步速度下的数据图。

图 B-2:将距离可视化为速度/时间图的面积
你可以看到,这些数据生成了一条直线。如果我们考虑这条线下的空间,我们可以看到它是一个大块,实际上代表了你跑的距离!这个块高 5,长 0.5,所以这个块的面积是 5 × 0.5 = 2.5,这就给出了 2.5 英里的结果!
现在,让我们看一个简化的问题,假设你的速度在不同的时间段内变化:你在 0.0 到 0.3 小时之间以 4.5 英里的速度跑步,在 0.3 到 0.4 小时之间以 6 英里的速度跑步,剩下的 0.1 小时以 3 英里的速度跑步。如果我们像在图 B-3 中一样将这些结果可视化为块或塔形区域,我们就可以用同样的方法解决这个问题。
第一座塔是 4.5 × 0.3,第二座是 6 × 0.1,第三座是 3 × 0.1,所以:
4.5 × 0.3 + 6 × 0.1 + 3 × 0.1 = 2.25
通过查看这些塔形区域下的面积,我们得到了你跑的总距离:2.25 英里。

图 B-3:我们可以通过将这些塔形区域加在一起,轻松计算出你跑的总距离。
计算曲线下的面积:积分
你现在已经看到,我们可以通过计算线下的面积来得出你跑了多远。不幸的是,我们原始数据的线是弯曲的,这让问题变得有点困难:我们怎么计算弯曲线下的塔形区域呢?
我们可以通过想象一些与我们曲线模式相近的大塔来开始这个过程。如果我们从三座塔开始,就像在图 B-4 中看到的那样,这并不是一个坏的估计。

图 B-4:用三座塔近似曲线
通过计算这些塔的面积,我们得到一个估算的总旅行距离为 3.055 英里。但显然,通过使用更多、更小的塔,我们可以得到更好的估算,如图 B-5 所示。

图 B-5:通过使用 10 个塔代替 3 个塔更好地逼近曲线
将这些塔的面积加起来,我们得到 3.054 英里,这是一个更精确的估算。
如果我们想象永远重复这个过程,使用更多、更薄的塔,最终我们将得到曲线下的完整面积,如图 B-6 所示。

图 B-6:完全捕获曲线下的面积
这表示你半小时跑步的准确行进面积。如果我们能够加上无数个塔,我们将得到 3.053 英里的总距离。我们的估算已经非常接近,而随着我们使用更多、更小的塔,估算会变得更加精确。微积分的力量在于它能够计算出曲线下的精确面积,或称为积分。在微积分中,我们将距离函数 s(t)从 0 到 0.5 的积分表示为数学符号如下:

这个∫只是一个花哨的 S,表示所有小塔在s(t)中的面积的总和。dt符号提醒我们这里讨论的是变量t的微小部分;d是数学中用来表示这些小塔的方式。当然,在这个符号中,只有一个变量t,所以我们不容易混淆。同样,在这本书中,我们通常省略dt(或其等效的变量符号),因为在例子中已经很明显了。
在我们最后的符号中,我们设定了积分的开始和结束,这意味着我们不仅可以计算整个跑步过程的距离,也可以计算其中的一段距离。假设我们想知道你在 0.1 到 0.2 小时之间跑了多远。我们可以表示为:

我们可以像图 B-7 所示那样可视化这个积分。

图 B-7:可视化从 0.1 到 0.2 区间下的曲线面积
仅这个阴影区域的面积为 0.556 英里。
我们甚至可以将我们的函数的积分视为另一个函数。假设我们定义了一个新函数,dist(T),其中T表示我们的“总跑步时间”:

这给我们提供了一个函数,告诉我们在时间T时你已经旅行的距离。我们还可以看到为什么我们想要使用dt,因为我们可以看到我们的积分应用于小写的t参数,而不是大写的T参数。图 B-8 绘制了你在跑步过程中任意时刻T的总距离。

图 B-8:积分图将时间与速度的图转化为时间与距离的图。
通过这种方式,积分将我们的函数 s(“某时的速度”)转换为一个函数 dist(“某时的行驶距离”)。如前所示,我们函数在两个点之间的积分代表了两个不同时间之间行驶的距离。现在,我们正在查看从起始时间 0 到任意给定时间 t 的总行驶距离。
积分很重要,因为它使我们能够计算曲线下的面积,而这比计算直线下的面积要复杂得多。在本书中,我们将使用积分的概念来确定事件在两个数值范围之间的概率。
测量变化率:导数
你已经看到我们如何利用积分来计算行驶的距离,当我们只有记录的各个时间点的速度数据时。但在我们的速度变化测量下,我们也许会感兴趣于计算各个时间点的变化率。当我们谈论速度变化的速率时,我们指的是加速度。在我们的图表中,有几个关于变化率的有趣点:你减速最快的时候、加速最快的时候,以及速度最稳定的时候(即变化率接近 0)。
就像积分一样,计算加速度的主要挑战是它似乎总在变化。如果我们有一个恒定的变化率,那么计算加速度并不困难,如图 B-9 所示。

图 B-9:可视化恒定变化率(与实际变化率的比较)
你可能还记得基础代数中我们可以使用这个公式画任何一条直线:
y = mx + b
其中 b 是直线与 y 轴交点的点,m 是直线的斜率。斜率 表示直线的变化率。对于图 B-9 中的直线,完整的公式是:
y = 5x + 4.8
斜率为 5 意味着每当 x 增加 1 时,y 增加 5;4.8 是该直线与 x 轴的交点。在这个例子中,我们可以将这个公式理解为 s(t) = 5t + 4.8,意思是每行进一英里,你的速度加速 5 英里/小时,并且你从 4.8 英里/小时的速度开始。由于你已经跑了半英里,利用这个简单的公式,我们可以计算出:
s(t) = 5 × 0.5 + 4.8 = 7.3
这意味着在你跑步结束时,你的速度将是 7.3 英里/小时。我们也可以通过类似的方法,计算你在跑步中的任何时刻的确切速度,只要加速度是恒定的!
对于我们的实际数据,因为曲线是弯曲的,所以很难在单一时刻确定斜率。相反,我们可以计算出直线的各个部分的斜率。如果我们将数据分成三个子区段,就可以在每个部分之间画出直线,如图 B-10 所示。

图 B-10:使用多个斜率来更好地估算你的变化率
现在,显然这些直线并不能完全匹配我们的曲线,但它们可以帮助我们看到你加速最快、减速最慢以及相对稳定的部分。
如果我们将函数进一步分成更多的部分,我们可以得到更精确的估算,如图 B-11 所示。

图 B-11:增加更多的斜率可以更好地逼近你的曲线。
在这里,我们看到的模式类似于我们求积分时的做法,那个时候我们将曲线下方的面积分成越来越小的塔楼,直到我们把无数小塔楼加在一起。现在我们要做的是把直线分成无数小线段。最终,代替单一的 m 来表示斜率的是一个新函数,表示我们原始函数中每一点的变化率。这就是所谓的导数,其数学表示形式如下:

同样,dx只是提醒我们,我们正在观察非常小的自变量 x 的部分。图 B-12 展示了我们 s(t) 函数的导数图,它让我们能够看到你在跑步时每一刻的速度变化率。换句话说,这就是你跑步过程中加速度的图像。看着 y 轴,你可以看到在一开始你迅速减速,而在大约 0.3 小时时你经历了一个加速度为 0 的阶段,这意味着你的配速没有变化(通常在练习比赛时这是好事!)。我们还可以清楚地看到你在哪一时刻获得了最快的速度。通过原始的图像,我们很难看出你是在 0.1 小时左右(第一次加速后)还是在跑步结束时获得了更快的速度。然而,通过导数,我们可以清楚地看到,在结束时的最后一波加速确实比开始时要快。

图 B-12:导数是另一个函数,描述了s(x)在每个点的斜率。
导数就像是直线的斜率,只不过它告诉我们曲线在某一点的倾斜程度。
微积分基本定理
我们将讨论一个最后非常引人注目的微积分概念。积分和导数之间有一个非常有趣的关系。(证明这个关系超出了本书的范围,因此我们这里只关注关系本身。)假设我们有一个函数 F(x),其中 F 是大写的 F。这个函数特别之处在于它的导数是 f(x)。例如,我们的 dist 函数的导数就是我们的 s 函数;也就是说,任意时刻的位移变化就是你的速度。速度的导数是加速度。我们可以用数学公式描述为:

在微积分中,我们称F为f的反导数,因为f是F的导数。根据我们的例子,加速度的反导数是速度,而速度的反导数是距离。现在假设对于任何值的f,我们想要在 10 和 50 之间进行积分;也就是说,我们想要:

我们可以通过从F(50)中减去F(10)来简单地得到这个结果,因此:

积分与导数之间的关系被称为微积分基本定理。这是一个非常令人惊讶的工具,因为它让我们能够以数学方式求解积分,而这通常比求导数要困难得多。通过基本定理,如果我们能找到我们想要求积分的函数的反导数,我们就能轻松地进行积分。理解这一点是手动进行积分的核心。
一门完整的微积分课程(或两门)通常会更深入地探讨积分和导数的相关话题。然而,正如前面提到的,在本书中我们只会偶尔使用微积分,并且所有的计算都将使用 R 语言。尽管如此,了解微积分和那些不熟悉的∫符号的大致含义还是很有帮助的!





浙公网安备 33010602011771号