JHU 计算机科学统计学笔记(全)
001:数据科学的核心要素与科学方法 🧠










在本节课中,我们将要学习数据科学的定义、其核心构成要素以及一个用于指导数据科学实践的系统性方法论。








数据科学是一个被广泛使用的术语。普遍接受的定义是:利用数据来辅助决策。从这个角度看,如果你在决定去哪家加油站之前查看了油价,你就在应用数据科学。但这并非我们通常所指的数据科学。因此,我将分享我个人对数据科学核心要素的看法,特别是在咨询、政府合同和商业领域中所指的数据科学。


我认为数据科学包含三个要素。









要素一:概率与统计基础 📊






第一个要素是概率与统计的基础。希望你在本课程中学到的是,理解概率的基础知识至关重要。这包括如何进行计数、如何在数轴上表示数字、什么是分布函数、什么是密度函数,以及这些知识如何帮助我们理解罕见事件的概率极限。我们如何将这些知识推进到统计假设检验?如何进行模拟?如何进行回归分析?回归本质上就是一种模型。所有这些都建立在概率与统计的理解之上。因此,虽然你可以根据油价决定去哪家加油站,但任何比这更复杂的决策,都需要你理解数字,并且不仅仅是从微积分的角度,更要从概率与统计的角度去理解。这样你才能了解未来观测的风险,进行推断,建立模型,或者更好地理解基于数据的决策所带来的影响。所以,我认为数据科学的第一个要求是掌握概率与统计。






要素二:编程能力 💻











我主张的第二个数据科学要素是编码能力,或者你也可以称之为脚本编写或编程。目前最常用的是 R 和 Python。R 是一种统计计算语言,因此你可能会发现,对于更复杂的统计任务,R 有更多可用的软件包。例如,我从事社交网络分析,如果你想对网络进行统计分析,至少在录制本视频时,你确实需要在 R 中完成,因为相关的软件包和工具都在那里。Python 在网络抓取、数据结构操作等方面有一些额外优势。我认为 Python 目前更为普遍,并且这一趋势还在增长。但无论哪种,一旦你学会了 R,你就能掌握 Python,反之亦然。人们往往习惯于自己熟悉的语言。为什么编程能力重要?因为它赋予你将概率与统计知识付诸实践的能力,并让你能够独立工作。如果你购买昂贵的统计软件许可证,你必须学习其用户界面,灵活性较低,而且这些许可证对个人从业者来说通常成本过高。R 和 Python 是免费的,而且更新更及时。例如,几年前出现了一个名为“随机指数随机图模型”的新软件包,这个包在你最先进的商业统计软件中可能没有,但在 R 中,如果你下载到电脑上,今天就可以使用。因此,拥有使用 R 或 Python 进行编码、脚本编写或编程的能力,是数据科学家需要具备的重要技能。你对其中一种或两种语言越精通越好。







要素三:科学方法 🔬




第三个组成部分是“科学”。数据科学中的“科学”是什么?它不仅仅是运行数字,而是理解一个获取洞察的科学过程。这正是我将在本视频剩余部分重点讨论的内容。但我想指出,如果我们同意这三个特征、这三个功能,那么任何数据科学家都必须牢固掌握概率与统计基础,具备一定的编程能力,并理解方法论。








那么,我们应该用什么方法来构建这些问题呢?我将给你一个缩写词,给你一条通往成功的“道路”:ROAD。









ROAD 方法论详解



ROAD 代表:
- R - 需求或研究问题
- O - 用数据操作化
- A - 分析方法
- D - 决策








上一节我们介绍了数据科学的三大支柱,本节中我们来看看如何将它们应用于一个系统性的科学流程。



R:需求或研究问题







首先,你需要定义需求或研究问题。例如,我想了解关税如何影响农产品贸易。在我录制此视频时,围绕特朗普与中国的贸易战及其对农产品价格的影响存在很多争议。他征收了10%的关税,并威胁要提高到25%。我在此不持政治立场,只是陈述事实。从数据驱动的角度来看,我们可以观察到双方的观点。支持关税的一方会说需要与中国划清界限以争取更好的谈判地位,存在贸易逆差等等,所有这些论点都基于数字。反对的一方则会说,纵观历史,关税从未带来好处,农民将受到伤害,因为成本上升,对中国的出口量将下降等等。我的观点是,当你审视这场辩论时,人们是基于观点进行争论,并且存在假设。一方假设关税会增加成本并使农民蒙受损失,另一方假设关税会促使谈判并带来更好的影响,可能会打开其他市场并为农民创造机会。但双方都没有数据。因此,如果你能识别出两个对立方的分歧点,或者识别出两种决策及其之间的权衡,如果你能分离出那个试图做出的决策背后的需求或研究问题,你必须首先定义它。这是第一步,即研究问题。












O:用数据操作化







定义好问题后,下一步是用数据操作化。不存在完美的数据源,永远没有。因此,我必须就什么是有效数据做出一些假设。我可能会去 data.gov 查看一些数据。也许我没有,或者查看所有农产品贸易的成本太高,所以我可能只看大豆,因为大豆出口是出口到中国的主要农产品之一。也许我没有农户级别的数据,所以我可能查看美国全国的汇总数据,或者只看加利福尼亚州,将其作为全美国的代表。我并不是在判断这样做是对是错。你会发现,无论你做出何种操作化数据的决定,如果你向一个持有A立场的人展示支持B立场的结果,他们首先会做什么?他们会直接质疑你的数据源不好。无论数据源本身好坏,无论他们之前是否同意使用该数据源,在你完成分析的那一刻,他们都会来质疑你的假设,仅仅因为结果不符合他们的预想。这是人之常情。所以,我的意思是,当你定义需求或研究问题时,你需要用数据来操作化,并且理想情况下,你应该让你的客户(无论他们是谁)同意这确实是我们应该回答的研究问题,并且在看到任何结论之前,这是一个可行的数据源。








A:分析方法







一旦确定了问题和数据源,现在识别分析方法就变得相当简单了。方法的复杂程度不一定重要。有时可视化探索就非常好。我做过一个项目,一个组织有多个团队,他们基本上负责响应某些类型的事件或危机。根据任务类型,有一个计划完成时间,当然他们也记录了团队实际完成该任务所花费的时间。我简单地绘制了计划时间与实际时间的散点图,可以看到两者是相关的。然后我查看了残差,并用红点突出了残差。这样你就可以看到,这些团队花费的时间比预期多两个标准差,而那些团队只用了一半的预期时间。问题很简单:团队是否存在退化或问题?我们用计划和实际时间来操作化,因为这很容易收集。分析方法是可视化的。决策点是:所有团队的领导者应该将他们的执行注意力集中在哪里?他们可以关注那些耗时更长的团队,询问任务中发生了什么情况;也可以关注那些用时减半的团队,那里可能蕴藏着可以推广到整个组织的成功经验。这就是一个数据科学驱动洞察的例子,其中没有使用高级统计,只是非常简单的可视化。但你也可能使用其他方法,比如假设检验或回归分析,这可能是大多数人进行基础统计的极限。然后,你可能会变得更复杂,开始进行机器学习、计算机视觉、自然语言处理、图分析等。在大多数数据科学硕士项目中,你会看到一些关于概率与统计的基础课程,他们可能会向你介绍人工智能或机器学习,让你了解数据工程或云平台等,以便你更好地理解科学过程中的这一步。除此之外,你会看到许多选修课,这些课程基本上是在为你提供各种独特的分析方法。但并不意味着方法越复杂越好。最好的方法是能够最清晰地用现有数据回答研究问题的方法。









D:决策









我们成功之路的最后一步是决策。需要做出什么决策?通常,当我与客户合作并开始讨论这一点,问他们“你打算用这些数据做出什么决策”时,我会看到他们一脸茫然。他们可能会问:“你是什么意思?我要做什么决策?”那么,我们为什么要做这个分析?你为什么关心这个研究问题?希望是为了解决问题。如果我正在就关税如何影响贸易这个问题进行这个过程,我希望最终能做出一个决策:我们是实施25%的关税,还是维持在10%,或者取消10%的关税?这些是决策。在决策空间中,我们希望提前定义所有这些,在进行任何分析之前,在收集任何数据点之前,我不想浪费任何时间,直到这一切都规划好。为什么?因为当你真正要求某人明确决策时,他们可能会发现自己没有能力做出决策,那么他们为什么要投入时间和资源来进行这个过程?或者,也许他们还没有完全考虑清楚那个决策,如果你明确了决策是什么,可能会修改需求,也可能会修改我们需要使用哪些数据来说服决策者。这就是为什么“成功之路”是在你开始任何过程之前非常重要的第一步,它遵循科学过程。如果你看科学过程,它是:观察你周围的世界,提出假设,收集一些数据,进行分析,然后得出你的见解。这正是我们用科学过程所做的。我认为,为了更专注于数据科学,如果我们想要有“科学”,你需要有你的“成功之路”。

关于报告型数据科学的补充说明 📈







现在有一个注意事项。“成功之路”非常侧重于决策支持。我认为这是人们在需要数据科学时最主要的需求。但还有另一种类型的数据科学值得简要讨论,那就是报告。什么是报告?假设我正在尝试解决一个问题,但我并不真正了解发生了什么。我不知道变量的状态是什么。例如,我有一个人力资源系统,其中的企业资源规划工具捕获了关于员工的大量变量,不同的公司定义了不同的有用变量。所以我可能想要对这些变量进行数据可视化,我可能想要在这些变量中寻找模式。这并不是说我有一个明确的研究问题,没有我正在寻找的特定数据集,不知道用什么分析方法,也没有试图做出的决策。我所做的是寻找模式,寻找这些事物之间的关系,这就是报告。我只是试图将数据可视化,以便为规划一条“成功之路”提供信息,但我不会仅仅根据一个随机的数据仪表板就做出决策。报告的另一个价值在于强制性的监督。例如,在联邦政府中,当国会为各种项目拨款时,他们要求这些机构必须向国会报告数据。也许这些数据并不一定是为了告知该机构负责人关于公民福利或如何帮助国民的决策,但他们确实必须向国会报告资金使用情况。因此,这也在某种程度上为领导层提供信息,即使不涉及具体决策。不幸的是,有时客户寻求报告是因为他们想向老板写一份“成绩单”,显示他们有多出色,这是数据科学的另一种用途,在许多应用中可能比决策支持更常见。











总结 🎯








本节课中我们一起学习了数据科学的核心构成。回顾一下,当我们审视数据科学时,我们有一个概率与统计的基础,我们理解一些编程,我们应用科学。我所说的“科学”实际上就是“成功之路”:你能够识别一个需求,用数据操作化,选择适当的分析方法,定义要做的决策。你在规划阶段就实施这条“成功之路”,在收集任何数据点、进行任何分析方法之前。你用它来驱动决策支持。这确实是数据科学的本质。但你也可以使用这些相同的工具来完成报告任务,这也是数据科学家常见的需求。
002:基本计数原理 🧮



在本节课中,我们将要学习概率计算的基础——计数。理解如何准确计算事件发生的可能性,是学习后续统计方法的关键。



概率的定义


概率可以定义为成功结果的数量除以所有可能结果的数量。用公式表示为:


概率 = 成功结果数 / 所有可能结果数


为了理解这个定义,让我们看几个简单的例子。


简单示例


上一节我们介绍了概率的基本定义,本节中我们来看看如何将其应用于具体场景。



抛硬币
- 成功结果(正面):1种
- 所有可能结果(正面或反面):2种
- 概率 = 1 / 2



掷一个六面骰子
- 成功结果(掷出1点):1种
- 所有可能结果(1, 2, 3, 4, 5, 6):6种
- 概率 = 1 / 6


掷一个六面骰子(掷出1点或2点)
- 成功结果(掷出1点或2点):2种
- 所有可能结果(1, 2, 3, 4, 5, 6):6种
- 概率 = 2 / 6 = 1 / 3



复杂示例:掷两个骰子


现在,我们来看一个更复杂的情况:掷两个六面骰子。


问题:掷出总和为2的概率是多少?



成功结果(总和为2)只有一种组合:(1, 1)。

所有可能结果的数量则需要计算。以下是所有可能的组合:
- (1,1), (1,2), (1,3), (1,4), (1,5), (1,6)
- (2,1), (2,2), (2,3), (2,4), (2,5), (2,6)
- (3,1), (3,2), (3,3), (3,4), (3,5), (3,6)
- (4,1), (4,2), (4,3), (4,4), (4,5), (4,6)
- (5,1), (5,2), (5,3), (5,4), (5,5), (5,6)
- (6,1), (6,2), (6,3), (6,4), (6,5), (6,6)



通过枚举,我们发现总共有36种不同的组合。因此,概率为 1 / 36。

问题:掷出总和为7的概率是多少?




以下是所有能掷出总和为7的组合:
- (1,6)
- (2,5)
- (3,4)
- (4,3)
- (5,2)
- (6,1)



成功结果有6种。所有可能结果仍然是36种。因此,概率为 6 / 36 = 1 / 6。


基本计数原理

从上面的例子可以看出,当情况变得复杂时,逐一枚举所有可能性非常繁琐。为了解决这个问题,我们引入基本计数原理。



基本计数原理指出:如果一个实验有 m 种可能结果,另一个独立实验有 n 种可能结果,那么这两个实验连续进行时,总共有 m × n 种可能结果。


用公式表示为:

总结果数 = m × n




在掷两个骰子的例子中:
- 第一个骰子有 6 种结果 (m=6)。
- 第二个骰子有 6 种结果 (n=6)。
- 根据基本计数原理,两个骰子一起掷的总结果数为 6 × 6 = 36 种。



这个原理使我们无需枚举就能快速计算出所有可能性的总数。

总结
本节课中我们一起学习了概率计算的基础——计数。我们首先回顾了概率的定义,然后通过抛硬币和掷骰子的例子进行了实践。在面对更复杂的场景(如掷两个骰子)时,我们引入了基本计数原理,它提供了一种高效计算组合事件总可能性的方法。掌握这一原理是后续学习更复杂概率与统计概念的重要基石。
003:广义计数原理 🧮



在本节课中,我们将要学习广义计数原理。这个原理是组合数学中的一个基础工具,它帮助我们计算当一系列事件或选择依次发生时,所有可能结果的总数。


上一节我们介绍了基本的计数概念,本节中我们来看看如何将计数原理推广到更一般的情况。



广义计数原理的定义


广义计数原理指出:



如果存在 R 个独立的实验(或选择步骤),并且:
- 第一个实验有 n₁ 种可能结果。
- 第二个实验有 n₂ 种可能结果。
- ...
- 第 R 个实验有 nᵣ 种可能结果。


那么,这 R 个实验依次进行后,总共可能的结果数量为所有独立实验结果数量的乘积。


我们可以用以下公式来表示:


总结果数 = n₁ × n₂ × ... × nᵣ

应用示例


为了更好地理解这个原理,我们来看几个具体的例子。

示例一:组建项目团队



假设一个办公室里有:
- 3 名社会科学家
- 10 名软件开发人员
- 2 名数据科学家

现在需要组建一个项目团队,要求从每类人员中各选一人。根据广义计数原理:
- 选择社会科学家的方式有 n₁ = 3 种。
- 选择软件开发人员的方式有 n₂ = 10 种。
- 选择数据科学家的方式有 n₃ = 2 种。


因此,组建团队的总方式数为:
3 × 10 × 2 = 60 种可能性。



如果我们将条件修改为:社会科学家必须是一位心理学家(假设3名社会科学家分别是心理学家、社会学家和人类学家)。那么:
- 选择社会科学家的方式变为 n₁ = 1 种(只能是心理学家)。
- 其他选择方式不变:n₂ = 10, n₃ = 2。


此时,组建团队的总方式数变为:
1 × 10 × 2 = 20 种可能性。

示例二:抛掷硬币


现在考虑另一个问题:抛掷 8 枚硬币,有多少种可能的结果序列?
以下是思考步骤:
- 我们将抛掷每一枚硬币视为一个独立的“实验”。
- 每枚硬币的抛掷结果(正面或反面)可以看作该实验的“结果”。
- 每枚硬币都有 2 种可能的结果。

因此,根据广义计数原理,抛掷8枚硬币的总结果数为:
2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 2⁸ = 256 种可能的序列。




示例三:二进制位与字节

这个原理在计算机科学中有直接的应用。我们可以将抛硬币的例子进行类比:

- 一个二进制位(bit) 就像一枚硬币,它只有两种状态:0 或 1。
- 一个字节(byte) 由 8 个二进制位组成。

那么,一个字节可以表示多少种不同的组合呢?根据广义计数原理:
2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 2⁸ = 256 种不同的组合。



在诸如ASCII的字符编码系统中,这256种组合中的每一种都被分配给了特定的字符(如字母、数字、符号),这就是计算机编码数据的基本原理之一。
总结



本节课中我们一起学习了广义计数原理。我们了解到,当需要依次进行多个独立的步骤或选择时,总的可能性数量是每个步骤可能性数量的乘积,其核心公式为 n₁ × n₂ × ... × nᵣ。我们通过组建团队、抛硬币和计算机字节等例子,看到了这个原理在不同场景下的应用。掌握这个原理是理解更复杂排列组合问题的重要基础。
004:排列与组合 📊











在本节课中,我们将要学习统计学中最基础的两种计数方法:排列与组合。这两种方法都用于处理“无放回”的计数问题,即一旦你从集合中选取了一个元素,它就不再放回。我们将通过公式和具体例子来理解它们的区别与应用。












排列:有序的选择 🔢







上一节我们介绍了计数的基本概念,本节中我们来看看排列。排列关注的是有序的选择。这意味着,从一组物品中选取物品时,顺序是重要的。







排列的通用公式如下。假设我们有 n 个不同的物品可供选择,并且我们要从中选取 r 个物品进行排列。那么排列的总数 P(n, r) 可以这样计算:






公式: P(n, r) = n! / (n - r)!







其中,n!(n的阶乘)表示 n × (n-1) × (n-2) × ... × 1。这个公式的推导基于广义计数原理:对于第一个位置,我们有 n 种选择;对于第二个位置,有 n-1 种选择;以此类推,直到第 r 个位置,有 n-r+1 种选择。






以下是关于阶乘的一些重要定义:
0! = 1(为了方便定义)1! = 1





如果我们要从 n 个物品中选取所有 n 个进行排列(即 r = n),那么公式简化为 n!。如果我们要选取 0 个物品(即 r = 0),根据公式,结果为 1,这表示“什么都不选”只有一种方式。














排列应用示例 📝



让我们通过几个例子来巩固对排列的理解。









示例1:10个人排成一队
问题:10个人排成一队,有多少种不同的排列方式?
解答:这相当于从10个人中选取所有10个人进行排列。因此,答案是 10!。






示例2:特定两人必须相邻
问题:10个人排成一队,要求特定的两个人A和B必须相邻,有多少种排法?
解答:我们可以将A和B视为一个“捆绑”单元。这样,我们就有9个单元(1个“AB”单元 + 其他8个人)需要排列,排列方式为 9! 种。然而,在“AB”单元内部,A和B可以互换位置(AB或BA),这有 2! 种方式。因此,总排列数为 9! × 2。







示例3:特定两人永不相邻
问题:10个人排成一队,要求特定的两个人A和B永不相邻,有多少种排法?
解答:解决这类“永不”问题的一个常用技巧是使用互补法。首先,计算没有任何限制的总排列数,即 10!。然后,减去我们不想要的情况(即A和B相邻的情况),也就是上一个例子的结果 9! × 2。所以,答案是 10! - (9! × 2)。这种方法在统计学中非常普遍:从所有可能性(大圆)中减去不满足条件的部分(小圆),得到我们感兴趣的部分。





示例4:7女3男排队,3男必须相邻
问题:7名女性和3名男性排成一队,要求3名男性必须相邻,有多少种排法?
解答:将3名男性视为一个单元。现在我们有8个单元(1个“3男”单元 + 7名女性)需要排列,方式为 8! 种。在这个男性单元内部,3名男性可以相互排列,方式为 3! 种。因此,总排列数为 8! × 3!。






示例5:7女3男排队,3男永不相邻
问题:7名女性和3名男性排成一队,要求3名男性永不相邻,有多少种排法?
解答:再次使用互补法。总排列数为 10!。减去3名男性相邻的情况 8! × 3!。所以,答案是 10! - (8! × 3!)。






示例6:7女3男排队,任意两名男性都不相邻
问题:7名女性和3名男性排成一队,要求任意两名男性都不相邻,有多少种排法?
解答:这是一个更复杂的问题。我们可以先排列7名女性,她们之间有 7! 种排法。当女性排好后,她们之间以及队列两端会形成 8 个空位(间隙)。为了确保男性不相邻,我们需要从这 8 个空位中选择 3 个来放置男性。选择空位是一个排列问题(因为男性是不同的),方式为 P(8, 3) = 8! / (8-3)!。因此,总排列数为 7! × P(8, 3)。













组合:无序的选择 🔄








上一节我们详细探讨了排列,本节中我们来看看组合。组合关注的是无序的选择。这意味着,从一组物品中选取物品时,顺序不重要,只关心选了哪些物品。






组合的通用公式如下。假设我们有 n 个不同的物品,要从中无序地选取 r 个物品。那么组合的总数 C(n, r) 或写作 (n r),可以这样计算:







公式: C(n, r) = n! / [r! × (n - r)!]





这个公式可以从排列公式推导出来。因为对于任何一组选出的 r 个物品,它们内部有 r! 种不同的排列方式。既然组合不关心顺序,我们就需要将排列数 P(n, r) 除以这 r! 种内部排列,以消除顺序的影响。所以:C(n, r) = P(n, r) / r! = [n! / (n-r)!] / r! = n! / [r! × (n-r)!]。
















综合挑战示例 🧩






让我们来看一个结合了排列和组合思想的复杂例子。




示例:英文字母排列
问题:26个英文字母排成一列(无重复),要求字母A和B之间恰好有5个字母,有多少种排法?
解答:
- 将“A + 5个中间字母 + B”视为一个整体单元。这个单元内部,A和B可以互换位置(A在左B在右,或B在左A在右),所以有
2种方式。 - 从剩下的
24个字母(去掉A和B)中,选出5个放入A和B之间,这是一个排列问题(因为顺序重要),方式为P(24, 5)。 - 现在,我们有了一个“超级单元”(包含7个字母)和剩下的
19个单独字母,总共20个“物品”需要排列,排列方式为20!。 - 根据乘法原理,总排列数为:
20! × P(24, 5) × 2。












总结 📚







本节课中我们一起学习了统计学计数的两大基石:排列与组合。
- 排列
P(n, r)用于计算有序选择的数量,公式为n! / (n-r)!。 - 组合
C(n, r)用于计算无序选择的数量,公式为n! / [r! × (n-r)!]。 - 两者都适用于无放回的抽样场景。
- 我们通过多个排队问题的例子,练习了排列的计算,并学习了使用互补法(总情况减去反面情况)和插空法处理“不相邻”等限制条件。
- 最后,一个关于字母排列的综合例题展示了如何将这些概念结合起来解决更复杂的问题。理解排列与组合是学习后续概率论和更高级统计方法的基础。
005:圆周排列问题 🔄



在本节课中,我们将要学习一种特殊的排列类型——圆周排列。我们将了解其定义、核心公式,并通过几个具体例子来掌握如何计算圆周排列的数量,以及如何处理排列中“特定元素必须相邻”或“永不相邻”等约束条件。







圆周排列的定义


上一节我们介绍了线性排列的基本概念。本节中,我们来看看圆周排列。




圆周排列是一种排列方式,其核心在于固定一个对象,然后以线性方式排列剩余的对象。


一个经典的例子是排列字母A、B、C。如果我们固定字母A的位置,那么剩余的B和C只能以线性方式排列在A之后。因此,可能的排列只有两种:A-B-C 和 A-C-B。



圆周排列的通用计算公式为:
(n - 1)!
其中,n 代表需要排列的对象总数。

基础圆周排列示例





让我们通过一个具体问题来应用这个公式。




问题:10个人围坐在一张圆桌旁,有多少种不同的坐法?


解答:在圆周排列中,我们可以先固定其中一个人的位置作为参考点。一旦这个人的位置固定,排列剩余9个人的问题就变成了一个线性排列问题。因此,总排列数为 (10 - 1)! = 9!。

处理约束条件:特定元素必须相邻




现在,我们为基础问题增加一个约束条件。





问题:10个人围坐在一张圆桌旁,但要求特定的两个人(例如A和B)必须坐在一起。有多少种坐法?



以下是解决此问题的步骤:
- 首先,将必须坐在一起的A和B视为一个“整体”或“捆绑单元”。
- 现在,我们有了这个“捆绑单元”加上剩下的8个人,总共 9个单元 需要围绕圆桌排列。
- 计算这9个单元的圆周排列数:
(9 - 1)! = 8!。 - 最后,在“捆绑单元”内部,A和B两人可以互换位置(A-B或B-A),有
2! = 2种内部排列方式。 - 根据乘法原理,总排列数为
8! × 2。



处理约束条件:特定元素永不相邻
理解了“必须相邻”的情况后,我们来看看其反面问题。


问题:同样是10个人围坐,但要求特定的两个人A和B永不相邻。有多少种坐法?


以下是解决此问题的思路:
- 首先,计算没有任何限制时,10个人的总圆周排列数:
(10 - 1)! = 9!。 - 接着,计算A和B必须相邻的排列数,我们在上一节已经求出是
8! × 2。 - “A和B永不相邻”的排列数,就等于总排列数减去“A和B必须相邻”的排列数。
- 因此,最终答案为
9! - (8! × 2)。

这种方法体现了概率论和组合数学中常用的思想:从所有可能的情况中,减去不满足条件的情况,从而得到满足条件的情况数量。
扩展到其他排列问题
圆周排列是排列问题的一个特例。排列问题还有许多其他变体,例如考虑对象分组或存在重复对象的情况。
示例一:按科目排列书籍
假设有10本书需要摆放在书架上:4本数学书、3本计算机科学书、2本统计学书、1本社交网络分析书。且同一科目的书必须放在一起。有多少种排列方式?
以下是计算步骤:
- 首先,将同一科目的书各自视为一个整体。我们共有4个整体(数学、计算机科学、统计学、社交网络分析)。
- 排列这4个整体的方式有
4!种。 - 在数学整体内部,4本书可以任意排列,有
4!种方式。 - 在计算机科学整体内部,3本书有
3!种排列方式。 - 在统计学整体内部,2本书有
2!种排列方式。 - 社交网络分析书只有1本,排列方式为
1! = 1种。 - 根据乘法原理,总排列数为:
4! × (4! × 3! × 2! × 1!)。
示例二:处理重复字母的排列
计算单词 “COFFEE” 的所有不同字母排列数。
以下是计算步骤:
- 单词 “COFFEE” 共有6个字母。
- 如果所有字母都不同,排列数应为
6!。 - 但其中字母 ‘F’ 出现了两次,这两个 ‘F’ 在排列中是不可区分的。所有包含这两个 ‘F’ 互换位置的排列实际上是同一种排列。因此,我们需要将
6!除以这两个 ‘F’ 的内部排列数2!。 - 同理,字母 ‘E’ 也出现了两次,同样需要除以
2!。 - 因此,不同的字母排列总数为
6! / (2! × 2!)。

其通用公式为:当有 n 个对象,其中第1类有 n₁ 个相同对象,第2类有 n₂ 个相同对象……时,不同排列数为:
n! / (n₁! × n₂! × ...)


总结
本节课中我们一起学习了圆周排列及其相关计算。
- 我们首先定义了圆周排列,其核心是固定一个参考点,公式为
(n - 1)!。 - 接着,我们学习了如何处理“特定元素必须相邻”的约束,方法是将其捆绑并考虑内部排列。
- 然后,我们通过互补的思想解决了“特定元素永不相邻”的问题。
- 最后,我们将排列的知识扩展到分组排列和处理重复对象的情况,并介绍了相应的通用公式。
这些排列计数原理在计算机科学中有着广泛的应用,例如在分析密码强度、设计算法复杂度、处理数据结构的可能状态等场景中都非常重要。
006:组合 🧮





在本节课中,我们将要学习组合数学的核心概念——组合。我们将了解它与排列的区别,学习其计算公式,并通过一系列例子来掌握如何应用组合解决实际问题。





组合的定义与公式





上一节我们介绍了排列,其中顺序是重要的。本节中我们来看看组合,在组合中,顺序不重要。


例如,选择A和B,与选择B和A被视为同一种情况,因为顺序无关紧要。




组合的记号为 C(n, r),读作“n选r”。它表示从n个不同选项中选择r个选项,不考虑顺序。另一种常见的记法是:




( n )
( r )



组合的计算公式为:



C(n, r) = n! / [ (n - r)! * r! ]





其中 ! 表示阶乘。




基础组合计算




让我们从一个简单的例子开始,理解如何应用公式。




问题:从10个人中选出5个人,有多少种选法?



解答:这是一个典型的组合问题,顺序不重要。我们使用公式 C(10, 5)。




计算过程如下:
C(10, 5) = 10! / [(10-5)! * 5!] = 10! / (5! * 5!)


为了简化计算,我们可以展开并约分:
10! = 10 × 9 × 8 × 7 × 6 × 5!
5! = 5 × 4 × 3 × 2 × 1
代入公式后,分子分母中的 5! 可以约去,然后进一步计算:
(10 × 9 × 8 × 7 × 6) / (5 × 4 × 3 × 2 × 1) = 252
因此,共有 252 种选法。



包含分类的组合问题



现在,我们来看一个更复杂的问题,它涉及从不同类别中进行选择。





问题:从一个由7名男性和6名女性组成的13人小组中,选出5个人,有多少种选法?




解答:这仍然是简单的组合问题,我们选择5个人,不考虑顺序。
总选法 = C(13, 5) = 13! / (8! * 5!)
我们只需写出这个表达式即可,无需完全计算数值。



接下来,我们为问题增加一个约束条件。



问题:从上述7男6女的13人小组中,选出恰好包含3名男性和2名女性的5人委员会,有多少种选法?




解答:这个问题需要分步考虑:
- 先从7名男性中选出3名:有 C(7, 3) 种方法。
- 再从6名女性中选出2名:有 C(6, 2) 种方法。



由于这两步是独立的,总的选法数是它们的乘积:
总选法 = C(7, 3) * C(6, 2) = [7! / (4! * 3!)] * [6! / (4! * 2!)]





处理“至少”与“至多”条件




组合问题中经常出现“至少”或“至多”的条件,我们需要仔细分析所有符合条件的情况。




问题:从上述13人小组中,选出至少包含2名女性的5人委员会,有多少种选法?





解答:“至少2名女性”意味着女性人数可以是2、3、4或5名。我们需要分别计算每种情况,然后求和。




以下是所有符合条件的情况:
- 情况1:选2女,3男。选法数:
C(6, 2) * C(7, 3) - 情况2:选3女,2男。选法数:
C(6, 3) * C(7, 2) - 情况3:选4女,1男。选法数:
C(6, 4) * C(7, 1) - 情况4:选5女,0男。选法数:
C(6, 5) * C(7, 0)





总选法数为以上四种情况选法数之和。





问题:从上述13人小组中,选出至多包含1名女性的5人委员会,有多少种选法?






解答:“至多1名女性”意味着女性人数只能是0或1。同样,我们分情况计算。
- 情况1:选0女,5男。选法数:
C(6, 0) * C(7, 5) - 情况2:选1女,4男。选法数:
C(6, 1) * C(7, 4)



总选法数为以上两种情况选法数之和。




另一种思路是,从所有可能的选法(C(13, 5))中,减去包含2名或以上女性的选法(即上一题的结果)。两种方法答案一致。




综合应用:构词问题




让我们将组合与之前学过的排列知识结合起来,解决一个构词问题。




问题:用5个辅音和3个元音组成一个8字母的单词(假设字母可重复使用?原题未明确,通常此类问题指从字母集合中选取不同字母进行排列)。已知英文字母有21个辅音和5个元音。可以组成多少个这样的8字母单词?





解答:这个问题需要三步:
- 选择5个不同的辅音:从21个辅音中选5个,有 C(21, 5) 种方法。
- 选择3个不同的元音:从5个元音中选3个,有 C(5, 3) 种方法。
- 排列这8个选出的字母:8个不同字母的全排列有 8! 种方法。




因此,总单词数为:
总单词数 = C(21, 5) * C(5, 3) * 8!
对应选项B。



变体问题:在以上构成的单词中,有多少个是以字母‘A’开头的?




解答:增加“以A开头”的条件后,步骤需要调整:
- 选择辅音:不变,仍有 C(21, 5) 种方法。
- 选择元音:由于‘A’已被固定为首字母,我们只需要从剩下的4个元音中选出2个,有 C(4, 2) 种方法。
- 排列字母:首字母‘A’位置固定,只需排列剩下的7个字母,有 7! 种方法。


因此,符合条件的单词数为:
总单词数 = C(21, 5) * C(4, 2) * 7!
对应选项A。






挑战问题:派对邀请





最后,我们看一个需要创造性思维的问题。






问题:有n对夫妇被邀请参加一个派对。规则是:每位丈夫如果出席,则必须由他的妻子陪同;但妻子可以单独出席,无需丈夫陪同。问有多少种可能的出席情况组合?





解答:对于每一对夫妇来说,他们出席派对的可能性只有三种互斥的情况:
- 丈夫和妻子都出席。
- 只有妻子出席。
- 两人都不出席。


丈夫单独出席的情况被规则禁止。




由于有n对夫妇,且每对夫妇都有3种独立的选择,因此总的可能情况数为:
总情况数 = 3 * 3 * 3 * ... * 3 (n个3相乘) = 3^n
对应选项B。





总结



本节课中我们一起学习了组合数学的核心内容:
- 组合与排列的关键区别在于顺序是否重要。
- 掌握了组合的计算公式:C(n, r) = n! / [(n-r)! * r!]。
- 通过多个例子,学习了如何解决基础组合问题、包含分类的选择问题、以及带有“至少”、“至多”条件的复杂问题。
- 我们还将组合与排列结合,解决了实际的构词问题。
- 最后,通过派对邀请的挑战性问题,锻炼了将实际问题转化为组合模型的能力。




理解组合是学习概率论和许多计算机科学算法(如抽样、搜索空间分析)的重要基础。
007:阶乘运算与恒等式 🧮






在本节课中,我们将转换一下思路,深入探讨一些与阶乘运算相关的恒等式。我们将学习一个在处理组合数时非常有用的恒等式——帕斯卡恒等式,并了解其在二项式定理和多项式系数中的应用。



帕斯卡恒等式介绍



上一节我们介绍了组合数的基本概念。本节中,我们来看看一个重要的组合恒等式:帕斯卡恒等式。该恒等式在计算组合数时非常有用。


帕斯卡恒等式的公式如下:


[
\binom{n}{r} = \binom{n-1}{r} + \binom{n-1}{r-1}
]



接下来,我们将通过代数推导来证明这个恒等式。


帕斯卡恒等式的推导





我们将从等式的右边开始,将其展开为阶乘形式,然后推导出等式的左边。



首先,写出等式的右边:

[
\binom{n-1}{r} + \binom{n-1}{r-1} = \frac{(n-1)!}{(n-1-r)! \cdot r!} + \frac{(n-1)!}{(n-1-(r-1))! \cdot (r-1)!}
]





简化第二项的分母:



[
= \frac{(n-1)!}{(n-1-r)! \cdot r!} + \frac{(n-1)!}{(n-r)! \cdot (r-1)!}
]



为了合并两项,我们需要找到公分母。公分母是 ((n-r)! \cdot r!)。



对第一项,分子分母同时乘以 ((n-r)):




[
\frac{(n-1)!}{(n-1-r)! \cdot r!} \cdot \frac{n-r}{n-r} = \frac{(n-1)! \cdot (n-r)}{(n-r)! \cdot r!}
]


对第二项,分子分母同时乘以 (r):




[
\frac{(n-1)!}{(n-r)! \cdot (r-1)!} \cdot \frac{r}{r} = \frac{(n-1)! \cdot r}{(n-r)! \cdot r!}
]

现在两项具有相同的分母 ((n-r)! \cdot r!),可以合并:



[
\frac{(n-1)! \cdot (n-r) + (n-1)! \cdot r}{(n-r)! \cdot r!}
]





提取公因子 ((n-1)!):

[
= \frac{(n-1)! \cdot [(n-r) + r]}{(n-r)! \cdot r!}
]





简化分子:


[
= \frac{(n-1)! \cdot n}{(n-r)! \cdot r!}
]




我们知道 (n \cdot (n-1)! = n!),因此:




[
= \frac{n!}{(n-r)! \cdot r!} = \binom{n}{r}
]


这就完成了帕斯卡恒等式的推导。这个恒等式在递归计算组合数时非常有用。



二项式定理的应用


了解了帕斯卡恒等式后,我们来看看组合数在二项式定理中的应用。二项式定理提供了一种展开 ((x+y)^n) 的简便方法。



二项式定理的公式如下:




[
(x + y)^n = \sum_{k=0}^{n} \binom{n}{k} x^k y^{n-k}
]



可以看到,组合数 (\binom{n}{k}) 作为系数出现在求和式中。




让我们通过一个简单例子来理解。计算 ((x+y)^2)。



直接展开:




[
(x+y)^2 = (x+y)(x+y) = x^2 + 2xy + y^2
]

使用二项式定理,其中 (n=2):




[
(x+y)^2 = \sum_{k=0}^{2} \binom{2}{k} x^k y^{2-k}
]



以下是求和的具体项:



- 当 (k=0):(\binom{2}{0} x^0 y^2 = 1 \cdot 1 \cdot y^2 = y^2)
- 当 (k=1):(\binom{2}{1} x^1 y^1 = 2 \cdot x \cdot y = 2xy)
- 当 (k=2):(\binom{2}{2} x^2 y^0 = 1 \cdot x^2 \cdot 1 = x^2)

将各项相加,得到 (x^2 + 2xy + y^2),结果与直接展开一致。




多项式系数与分组问题

组合数还可以推广到多项式系数,用于解决将对象分成多个指定大小组的分组问题。


考虑一个例子:一个警局有10名警官,需要分配为5人巡逻、2人值班、3人后备。问有多少种不同的分组方式?





我们可以分步选择:



- 先从10人中选5人巡逻:(\binom{10}{5}) 种方式。
- 再从剩下的5人中选2人值班:(\binom{5}{2}) 种方式。
- 最后剩下的3人自动成为后备:只有1种方式(或表示为 (\binom{3}{3}=1))。



根据乘法原理,总分组方式为:



[
\binom{10}{5} \times \binom{5}{2} \times \binom{3}{3}
]



将其展开为阶乘形式:



[
\frac{10!}{5!5!} \times \frac{5!}{2!3!} \times \frac{3!}{3!0!} = \frac{10!}{5! \cdot 2! \cdot 3!}
]



这个结果体现了多项式系数的一般形式。如果将 (n) 个对象分成 (r) 个组,各组大小分别为 (n_1, n_2, ..., n_r)(且 (n_1 + n_2 + ... + n_r = n)),那么分组方式的总数为:




[
\frac{n!}{n_1! \cdot n_2! \cdot ... \cdot n_r!}
]


这个公式在解决复杂分组问题时非常高效。



综合示例:单败淘汰赛




最后,我们来看一个综合运用计数原理的例子:计算NFL(32支球队)单败淘汰赛所有可能的完整赛果序列。




“完整赛果序列”指的是从第一轮所有对阵到最终冠军的每一场比赛胜者都确定的一种具体情景。


分析过程:



- 第一轮(32进16):将32支球队配对成16场比赛。
- 不考虑对局顺序,只是分成16个“2人组”的方式有:(\frac{32!}{(2!)^{16} \cdot 16!})。这里 ((2!)^{16}) 是因为每个2人组内部无序,除以 (16!) 是因为16个组之间也无序。
- 但更重要的是,对于每一场确定的配对,都有2种可能的胜者。16场比赛,所以第一轮赛果有 (2^{16}) 种可能。
- 因此,第一轮所有可能的(配对方式 + 赛果)组合数为:(\frac{32!}{(2!)^{16} \cdot 16!} \times 2^{16} = \frac{32!}{16!})。(因为 ((2!)^{16} = 2^{16}),相互抵消)





- 第二轮(16进8):第一轮后剩下16支球队。同理,将其配对并决定胜者,所有可能的结果数为:(\frac{16!}{8!})。



- 后续轮次:依此类推。
- 第三轮(8进4):(\frac{8!}{4!})
- 第四轮(4进2):(\frac{4!}{2!})
- 决赛(2进1):(\frac{2!}{1!})



- 总序列数:根据乘法原理,将所有轮次的可能性相乘:
[
\text{总序列} = \left( \frac{32!}{16!} \right) \times \left( \frac{16!}{8!} \right) \times \left( \frac{8!}{4!} \right) \times \left( \frac{4!}{2!} \right) \times \left( \frac{2!}{1!} \right)
]
观察上式,可以发现中间项全部约去:
[
\text{总序列} = 32! \times \frac{1}{1!} = 32!
]
这个有趣的结果意味着,32支球队单败淘汰赛所有可能的完整赛果序列数量,等同于将这32支球队进行全排列的数量 (32!)。这展示了组合计数问题中不同模型之间的深刻联系。





总结


本节课中我们一起学习了:
- 帕斯卡恒等式 (\binom{n}{r} = \binom{n-1}{r} + \binom{n-1}{r-1}) 及其代数推导。这是一个递归计算组合数的重要工具。
- 二项式定理 ((x + y)^n = \sum_{k=0}^{n} \binom{n}{k} x^k y^{n-k}),其中组合数作为展开式的系数。
- 多项式系数 (\frac{n!}{n_1! \cdot n_2! \cdot ... \cdot n_r!}),用于计算将对象划分为多个指定大小组的分组方式总数。
- 通过NFL单败淘汰赛的复杂例子,综合运用了分组思想和乘法原理,并得出了总赛果序列数为 (32!) 的结论。




这些恒等式和原理是组合数学的基础,在概率论、算法分析及计算机科学的诸多领域都有广泛应用。
008:不可区分物品分配问题 🧮






在本节课中,我们将要学习如何将不可区分的物品分配给不同的人或容器。这是一个基础的组合计数问题,理解它对于后续学习概率论至关重要。







上一节我们介绍了可区分物品的分配问题,本节中我们来看看当物品不可区分时,情况有何不同。



核心概念与公式

当我们需要将 n 个不可区分的物品分配给 r 个可区分的接收者(如人、容器)时,分配方式的总数由以下组合公式给出:





公式: C(n + r - 1, r - 1)
这个公式本质上是在求解一个线性方程:x₁ + x₂ + ... + xᵣ = n,其中每个 xᵢ 代表第 i 个接收者得到的物品数量,且 xᵢ ≥ 0。









示例一:分配鲜花 🌹🌼
让我们通过一个具体例子来理解这个公式。




假设我们有 10朵玫瑰 和 15朵雏菊,需要将它们分配给 两个女孩。两种花是各自不可区分的(所有玫瑰相同,所有雏菊相同),但女孩是可区分的。



分配玫瑰
对于玫瑰,我们需要满足方程:x₁ + x₂ = 10,其中 x₁, x₂ ≥ 0。
- n = 10 (玫瑰总数)
- r = 2 (女孩数量)




代入公式:
C(10 + 2 - 1, 2 - 1) = C(11, 1) = 11
因此,分配10朵玫瑰给两个女孩有 11种 方式。



分配雏菊
对于雏菊,我们需要满足方程:x₁ + x₂ = 15,其中 x₁, x₂ ≥ 0。
- n = 15 (雏菊总数)
- r = 2 (女孩数量)

代入公式:
C(15 + 2 - 1, 2 - 1) = C(16, 1) = 16
因此,分配15朵雏菊给两个女孩有 16种 方式。






计算总分配方式
由于分配玫瑰和分配雏菊是两个独立的事件,根据乘法原理,总分配方式为:
11 × 16 = 176
所以,将10朵玫瑰和15朵雏菊分配给两个女孩,总共有 176种 不同的分配方式。




上一节我们处理了接收者获得物品数量可以为0的情况。接下来,我们看看当接收者有最低数量要求时,问题该如何解决。

示例二:分配球到有条件的瓮中 ⚽⚽⚽



现在,假设我们要将 20个相同的球 分配到 3个不同的瓮 中,但有以下条件:
- 瓮1至少要有 1个 球。
- 瓮2至少要有 2个 球。
- 瓮3至少要有 3个 球。




我们依然需要满足方程:x₁ + x₂ + x₃ = 20,但现在 x₁ ≥ 1, x₂ ≥ 2, x₃ ≥ 3。



为了使用标准公式(要求 xᵢ ≥ 0),我们可以进行变量替换:
令 u₁ = x₁ - 1,则 u₁ ≥ 0
令 u₂ = x₂ - 2,则 u₂ ≥ 0
令 u₃ = x₃ - 3,则 u₃ ≥ 0



将原方程用新变量表示:
(u₁ + 1) + (u₂ + 2) + (u₃ + 3) = 20
简化后得到:
u₁ + u₂ + u₃ = 14


现在,我们有了一个符合标准形式的新方程:u₁ + u₂ + u₃ = 14,其中 u₁, u₂, u₃ ≥ 0。
- n = 14 (可自由分配的球数)
- r = 3 (瓮的数量)




代入公式:
C(14 + 3 - 1, 3 - 1) = C(16, 2)



计算组合数:
C(16, 2) = (16 × 15) / (2 × 1) = 120




因此,在满足每个瓮最低球数要求的前提下,将20个相同的球分配到3个不同的瓮中,总共有 120种 分配方式。
总结与重要性 📚
本节课中我们一起学习了不可区分物品的分配问题。





我们掌握了核心公式 C(n + r - 1, r - 1),它用于计算将 n 个相同物品分配给 r 个不同接收者的方式数,前提是每个接收者得到的物品数可以为零。我们还学习了如何处理接收者有最低数量要求的情况,即通过变量替换将问题转化为标准形式。






理解如何高效、准确地计算可能性总数,是统计学和概率论的基础。概率的本质,就是在所有可能的结果中,计算成功结果所占的比例。因此,扎实的计数能力是继续深入学习统计方法的基石。


如果在学习过程中有任何疑问,请通过电子邮件、短信或课程讨论板与老师或同学交流。祝大家顺利完成作业!我是约翰霍普金斯大学的 I. McCellaough 博士。
009:R语言入门教程 🚀

在本节课中,我们将学习R语言的基础知识,包括变量赋值、基本运算、向量操作、数据表处理以及如何创建自定义函数。课程内容旨在帮助初学者快速上手R语言,并将其应用于计数和组合数学的计算中。
RStudio环境介绍 📊


RStudio是R语言的集成开发环境,包含四个主要窗口。


- 左上角是脚本窗口,用于编写和加载R代码。我们首先加载了
stattools包,这是进行统计和概率分析所需的基础包。 - 左下角是控制台窗口,可以直接输入命令并查看结果。
- 右上角是环境窗口,显示当前已定义的变量及其值。
- 右下角是多功能窗口,可以管理文件、查看图表、安装包和获取帮助。
变量赋值与基本运算 ➕


上一节我们熟悉了RStudio界面,本节中我们来看看如何创建变量并进行计算。



在R中,为变量赋值推荐使用箭头操作符 <-,而不是等号 =。这源于计算机科学中将值“指向”变量的传统。

a <- 3
b <- 5



赋值后,输入变量名即可查看其值。

a
# 输出: [1] 3
我们可以对变量进行各种基本数学运算。


d <- a + b # 加法
a - b # 减法
a * b # 乘法
a / b # 除法
a ^ b # 乘方
exp(a) # 指数函数
log(a) # 自然对数
log10(a) # 以10为底的对数

工作目录与环境管理 📁

了解如何运算后,我们需要学习如何管理R的工作环境。工作目录是R读取和保存文件的默认位置。
以下是管理环境和目录的常用命令。



getwd(): 获取当前工作目录的路径。setwd(“path/to/directory”): 设置新的工作目录。ls(): 列出当前环境中所有变量的名称。rm(list = ls()): 清除当前工作环境中的所有变量。在切换不同项目或问题时,这是一个好习惯。


向量的创建与操作 🔢


R语言的核心数据结构之一是向量,它是一组有序的数字列表。c() 函数用于“连接”多个值以创建向量。



x <- c(2, 5, 1, 3)


除了手动输入,R提供了多种快速创建序列向量的方法。



y <- 1:4: 创建从1到4的整数序列。length(x): 获取向量x的长度(元素个数)。z <- rep(2, times=10): 将数字2重复10次。seq(1, 10, by=2): 创建从1到10,步长为2的序列。seq(1, 10, length.out=20): 创建在1到10范围内均匀分布的20个数字序列。

使用数据表与描述性统计 📈

对于结构化数据,data.table是一种高效且易于操作的数据结构。首先需要加载data.table包。

library(data.table)

然后可以创建数据表,并为各列命名。


d <- data.table(Tall = c(2, 1, 3, 5),Grande = c(2, 1, 3, 5),Venti = c(2, 1, 3, 5)
)


创建数据表后,我们可以方便地计算各列的描述性统计量。使用$符号可以访问数据表中的特定列。

mean(d$Tall) # 平均值
median(d$Grande) # 中位数
sd(d$Venti) # 标准差
min(d$Tall) # 最小值
max(d$Grande) # 最大值
sum(d$Venti) # 求和
创建自定义函数:排列与组合 ⚙️


最后,我们将学习如何创建自定义函数来解决排列组合问题。在R中,使用function关键字定义函数。
排列数公式为:P(n, x) = n! / (n-x)!
perm <- function(n, x) {factorial(n) / factorial(n - x)
}


组合数公式为:C(n, x) = n! / (x! * (n-x)!)
comb <- function(n, x) {factorial(n) / (factorial(x) * factorial(n - x))
}
定义函数后,即可调用它们进行计算。


factorial(10) # 计算10的阶乘
perm(10, 10) # 10个元素的全排列数
perm(10, 5) # 从10个元素中选取5个进行排列
comb(10, 10) # 从10个元素中选取10个的组合数(仅1种)
comb(10, 3) # 从10个元素中选取3个的组合数
总结 ✨






本节课中我们一起学习了R语言的基础操作。我们掌握了如何为变量赋值、进行基本数学运算、管理工作目录、创建和操作向量、使用data.table处理数据并计算描述性统计量,最后还学习了如何创建自定义函数来计算排列数和组合数。建议你在练习中使用本课介绍的R脚本,并根据需要修改它以完成作业。
010:样本空间与事件 🎲

在本节课中,我们将学习样本空间和事件的基本概念。样本空间是概率论的基础,它定义了某个实验所有可能结果的集合。理解样本空间是计算事件概率的第一步。
概述
首先,我们给出样本空间的定义。样本空间是一个实验所有可能结果的集合。关键在于,我们必须明确地定义所有可能的结果。如果遗漏了某些结果,就没有清晰地建立样本空间。
例如,假设有一个实验是确定新生儿的性别。那么样本空间 S 就是所有可能结果的集合:S = {女孩, 男孩}。任何一次新生儿性别的观察结果,都必然是这两个结果之一。
样本空间的例子

上一节我们介绍了样本空间的定义,本节中我们来看看几个具体的例子,以加深理解。
例子1:赛马排名
假设一个实验的结果是赛马比赛的名次顺序。如果有7匹马,编号为1到7。

- 一种可能的结果是马匹按
1, 2, 3, 4, 5, 6, 7的顺序完成比赛。 - 另一种可能的结果是
2, 1, 3, 4, 5, 6, 7。 - 实际上,所有可能的结果是7匹马所有可能的排列顺序。

在这种情况下,样本空间的大小(即所有可能排列的数量)是 7的阶乘,记为:
公式: 7! = 7 × 6 × 5 × 4 × 3 × 2 × 1
例子2:从袋中取字母
假设一个袋子里有三个字母:A, B, C。实验是每次一个地从袋中取出两个字母(取出后放回)。我们关心取出的顺序。
以下是所有可能的结果(排列):
- 第一次取
A,第二次取B:记为AB - 第一次取
A,第二次取C:记为AC - 第一次取
B,第二次取A:记为BA - 第一次取
B,第二次取C:记为BC - 第一次取
C,第二次取A:记为CA - 第一次取
C,第二次取B:记为CB
因此,样本空间是集合 S = {AB, AC, BA, BC, CA, CB}。总共有6种可能的结果。
排列与组合:顺序是否重要? 🔀
在第二个例子中,我们注意到 AB 和 BA 被视为不同的结果,因为取出的顺序不同。当顺序重要时,我们处理的是排列问题。
从n个不同元素中取出k个元素的排列数公式为:
公式: P(n, k) = n! / (n - k)!
在我们的例子中,n=3, k=2,所以:
计算: P(3, 2) = 3! / (3-2)! = (3×2×1) / 1 = 6
这与我们手动列出的6种结果一致。
现在,考虑另一种情况:如果顺序不重要,即 AB 和 BA 被视为同一种结果(只关心最终拿到了A和B这两个字母)。
那么,样本空间将变为:
A和BA和CB和C
此时,样本空间的大小从6减少到了3。当顺序不重要时,我们处理的是组合问题。
从n个不同元素中取出k个元素的组合数公式为:
公式: C(n, k) = n! / [k! × (n - k)!]
在我们的例子中,n=3, k=2,所以:
计算: C(3, 2) = 3! / [2! × (3-2)!] = (3×2×1) / [(2×1) × 1] = 6 / 2 = 3
这与我们简化后的3种结果一致。

重要说明 📝
当我们谈论样本空间时,需要注意它有两种表示方式:
- 作为集合:明确列出所有可能的结果,例如
S = {AB, AC, BC}。 - 作为数量:指该集合中元素的总数,例如
|S| = 3。
在上下文中需要明确使用的是哪一种含义。无论如何定义,都必须确保它包含了实验的所有可能结果。
总结
本节课中我们一起学习了:
- 样本空间的定义:一个实验所有可能结果的集合。
- 通过新生儿性别、赛马排名和取字母等例子,理解了如何构建样本空间。
- 区分了排列(顺序重要)和组合(顺序不重要)两种情况,并回顾了相应的计算公式
P(n, k)和C(n, k)。 - 明确了样本空间既可以表示为一个结果列表,也可以表示为该列表的大小(结果数量)。

理解并准确定义样本空间,是后续学习事件概率计算的基石。
011:事件论 📊

在本节课中,我们将要学习概率论中的一个核心概念:事件。我们将了解事件的定义、如何表示事件,以及如何通过集合运算(如并集、交集和补集)来组合和分析多个事件。
什么是事件?
上一节我们介绍了样本空间的概念,它是一个实验所有可能结果的集合。本节中我们来看看事件。
在概率论中,样本空间的任意一个子集被称为一个事件。我们通常用大写字母(如 E)来表示一个事件。
定义:事件 E 是样本空间 S 的任意一个子集。
例如,假设我们有一个装有字母 A、B、C 的袋子。我们进行一个实验:不放回地抽取两个字母,并考虑其排列顺序。那么样本空间 S 包含以下6种结果:
S = {AB, AC, BA, BC, CA, CB}
我们可以定义一个事件 E,它包含所有出现字母 A 的结果。以下是这个事件的具体构成:
E = {AB, AC, BA, CA}
我们可以数出事件 E 中包含4个结果。同样,我们可以定义另一个事件 F,它包含所有出现字母 C 的结果:
F = {AC, BC, CA, CB}
事件 F 也包含4个结果。
一个事件可以包含样本空间中的所有结果(即 E = S),但它不能包含不属于样本空间 S 的结果。
事件的集合运算
当我们定义了多个事件后,我们常常需要分析它们之间的关系。这涉及到集合的三种基本运算:并集、交集和补集。
以下是这三种运算的定义和示例。
并集 (Union)
事件 E 和 F 的并集,记作 E ∪ F,表示结果发生在 E 或 F 中(或同时发生)。
公式:E ∪ F = {x | x ∈ E 或 x ∈ F}
在我们的例子中,计算 E ∪ F:
AB在E中。AC在E和F中。BA在E中。BC在F中。CA在E和F中。CB在F中。
因此,E ∪ F = {AB, AC, BA, BC, CA, CB},这恰好等于整个样本空间 S。
交集 (Intersection)
事件 E 和 F 的交集,记作 E ∩ F 或简写为 EF,表示结果同时发生在 E 和 F 中。
公式:E ∩ F = {x | x ∈ E 且 x ∈ F}
计算 E ∩ F:
AC同时存在于E和F中。CA同时存在于E和F中。
因此,E ∩ F = {AC, CA},包含两个结果。
补集 (Complement)
事件 E 的补集,记作 E^C 或 E',表示结果不发生在 E 中,但仍在样本空间 S 内。它代表“非 E”。
公式:E^C = {x ∈ S | x ∉ E}
计算事件 E 的补集 E^C:
AB在E中,所以不属于补集。AC在E中。BA在E中。BC不在E中,所以属于补集。CA在E中。CB不在E中,所以属于补集。
因此,E^C = {BC, CB}。
需要注意的是,E^C 不一定等于我们之前定义的另一个事件 F。虽然 E^C 中的结果 (BC, CB) 也出现在 F 中,但 F 还包含了其他结果 (AC, CA)。

总结
本节课中我们一起学习了概率论中事件的核心概念。
- 我们首先明确了事件是样本空间的子集。
- 接着,我们学习了如何用集合运算来组合和分析事件:
- 并集 (
∪) 对应逻辑“或”。 - 交集 (
∩) 对应逻辑“与”。 - 补集 (
^C或') 对应逻辑“非”。
- 并集 (
- 我们通过具体的字母排列例子,计算了事件的并集、交集和补集,并理解了它们之间的区别与联系。

掌握这些集合运算是理解更复杂概率计算(如加法法则)的基础。
012:事件关系与维恩图

在本节课中,我们将学习事件之间的一些重要关系,包括互斥、子集和相等。我们还将通过维恩图来直观地理解这些关系,并介绍集合运算的三个基本代数性质:交换律、结合律和分配律。
事件间的重要关系
除了并集和交集,事件之间还存在其他几种重要关系。
首先,如果事件 E 和事件 F 的交集是空集,我们称这两个事件是互斥的。这意味着没有哪个结果能同时属于 E 和 F。互斥事件也意味着它们是相互独立的。
在讨论子集时,我们使用特定的符号。如果 E 是 F 的子集,我们写作 E ⊆ F。反之,如果 F 是 E 的子集,则写作 F ⊆ E。如果 E 是 F 的子集,同时 F 也是 E 的子集,那么我们就说 E 等于 F,记作 E = F。
直观理解:维恩图
为了更直观地理解这些关系,我们引入一种强大的图形化工具——维恩图。
首先,我们画一个方框,它代表样本空间 S,即一个实验或观察中所有可能结果的集合。
在这个方框内,我们可以画出事件 E 和事件 F,它们都是 S 的子集。
并集的图形表示
如果我们想表示 E 和 F 的并集 E ∪ F,在维恩图中,它就是被 E 和 F 覆盖的所有区域的总和,包括它们重叠的部分。
交集的图形表示
要表示 E 和 F 的交集 E ∩ F,在维恩图中,它就是 E 和 F 两个圆圈重叠的部分。这个区域代表同时满足 E 和 F 的结果。
补集的图形表示
事件 E 的补集 Eᶜ,在维恩图中表示样本空间 S 内所有不在 E 中的区域。
子集的图形表示
如果 E 是 F 的子集(E ⊆ F),那么在维恩图中,代表 E 的圆圈会完全包含在代表 F 的圆圈内部。
集合运算的代数性质
理解了图形表示后,我们来看看处理集合(事件)时需要遵循的几个基本代数规则。这些规则能帮助我们简化复杂的集合表达式。
以下是三个核心性质:
-
交换律
交换律允许我们改变运算中事件的顺序。对于并集和交集都成立。- 并集交换律: E ∪ F = F ∪ E
- 交集交换律: E ∩ F = F ∩ E
-
结合律
结合律允许我们改变运算的分组方式,而不改变结果。- 并集结合律: (E ∪ F) ∪ G = E ∪ (F ∪ G)
- 交集结合律: (E ∩ F) ∩ G = E ∩ (F ∩ G)

- 分配律
分配律描述了并集和交集运算之间的相互作用。- 交集对并集的分配律: (E ∪ F) ∩ G = (E ∩ G) ∪ (F ∩ G)
- 并集对交集的分配律: (E ∩ F) ∪ G = (E ∪ G) ∩ (F ∪ G)
总结

本节课中,我们一起学习了事件之间的关键关系:互斥、子集和相等。我们通过维恩图直观地展示了这些关系以及并集、交集和补集的含义。最后,我们介绍了集合运算的三个基本代数性质——交换律、结合律和分配律,这些性质为我们提供了分析和简化复杂事件表达式的有力工具。掌握这些概念是理解后续概率论知识的重要基础。
013:德摩根定律 📚

在本节课中,我们将学习集合论中一个非常重要的工具——德摩根定律。该定律揭示了集合的并集、交集与补集运算之间的深刻关系,是后续概率论和逻辑推理的基础。
概述
德摩根定律包含两条规则,它们描述了如何将并集的补集转换为补集的交集,以及如何将交集的补集转换为补集的并集。理解这两条定律,能帮助我们更灵活地处理复杂的集合运算问题。
定律内容
以下是德摩根定律的两条核心规则。
定律一:并集补集的转换
第一条定律指出,有限个事件并集的补集,等于这些事件各自补集的交集。
用公式表示如下:
[
\left( \bigcup_{i=1}^{n} E_i \right)^c = \bigcap_{i=1}^{n} E_i^c
]
为了更直观地理解,我们可以考虑最简单的情况,即两个事件 A 和 B。此时定律简化为:
[
(A \cup B)^c = A^c \cap B^c
]
定律二:交集补集的转换
第二条定律指出,有限个事件交集的补集,等于这些事件各自补集的并集。
用公式表示如下:
[
\left( \bigcap_{i=1}^{n} E_i \right)^c = \bigcup_{i=1}^{n} E_i^c
]
同样地,对于两个事件 A 和 B,定律简化为:
[
(A \cap B)^c = A^c \cup B^c
]
定律证明
上一节我们介绍了德摩根定律的内容,本节中我们来看看如何证明它。我们将以两个事件的简化形式为例进行证明。
证明定律一:(A ∪ B)^c = A^c ∩ B^c
我们采用元素法进行证明,即证明等式两边的集合包含完全相同的元素。
-
第一步:假设一个元素属于左边集合
假设存在一个结果x,它属于集合(A ∪ B)^c。用符号表示为:
[
x \in (A \cup B)^c
] -
第二步:推导元素的性质
根据补集的定义,如果x属于(A ∪ B)的补集,那么x就一定不属于A和B的并集(A ∪ B)。
这意味着x既不在集合A中,也不在集合B中。即:
[
x \notin A \quad \text{且} \quad x \notin B
] -
第三步:转换到补集
如果x不在A中,那么根据定义,x就在A的补集A^c中。同理,x也在B的补集B^c中。
因此,x同时属于A^c和B^c。 -
第四步:得出元素属于右边集合
一个元素同时属于两个集合,就意味着它属于这两个集合的交集。所以:
[
x \in A^c \cap B^c
] -
完成证明
我们证明了:如果x ∈ (A ∪ B)^c,那么必然有x ∈ A^c ∩ B^c。反之,该推理过程也可逆推,证明如果x ∈ A^c ∩ B^c,则x ∈ (A ∪ B)^c。
因此,两个集合相等。证明完毕(Q.E.D.)。
证明定律二:(A ∩ B)^c = A^c ∪ B^c
我们使用类似的逻辑来证明第二条定律。
-
第一步:假设一个元素属于左边集合
假设存在一个结果x,它属于集合(A ∩ B)^c。即:
[
x \in (A \cap B)^c
] -
第二步:推导元素的性质
根据补集的定义,如果x属于(A ∩ B)的补集,那么x就一定不属于A和B的交集(A ∩ B)。
这意味着x至少不在A和B中的一个集合里。即:
[
x \notin A \quad \text{或} \quad x \notin B
]
(注意:这里是“或”的关系,与定律一证明中的“且”不同。) -
第三步:转换到补集
如果x不在A中,那么x就在A^c中。或者,如果x不在B中,那么x就在B^c中。
因此,x至少属于A^c和B^c中的一个。 -
第四步:得出元素属于右边集合
一个元素至少属于两个集合中的一个,就意味着它属于这两个集合的并集。所以:
[
x \in A^c \cup B^c
] -
完成证明
同理,我们证明了(A ∩ B)^c和A^c ∪ B^c包含相同的元素,因此两个集合相等。证明完毕(Q.E.D.)。

总结
本节课中我们一起学习了德摩根定律。我们首先概述了该定律在集合运算中的核心地位,然后明确给出了它的两条规则:
- 并集的补集等于各自补集的交集:
(A ∪ B)^c = A^c ∩ B^c - 交集的补集等于各自补集的并集:
(A ∩ B)^c = A^c ∪ B^c

接着,我们通过严谨的元素法,一步步证明了这两条定律在简化情况(两个事件)下的正确性。理解并掌握德摩根定律,将为后续学习概率论中的事件关系、布尔代数以及逻辑推理打下坚实的基础。
014:概率公理体系 🎲

在本节课中,我们将学习概率论的基础——概率公理体系。我们将了解如何从样本空间出发,通过一系列基本规则(公理)来定义和计算事件的概率。这些公理是概率论所有后续发展的基石。
样本空间回顾
上一节我们介绍了样本空间的概念。样本空间是某个实验所有可能结果的集合。例如,抛一枚硬币两次,其样本空间 S 可以表示为:
S = { (正面, 正面), (正面, 反面), (反面, 正面), (反面, 反面) }
这个样本空间包含四个等可能的基本结果。
基于样本空间,我们可以计算事件的概率。例如,事件“第一次抛掷得到正面”包含两个结果:(正面, 正面) 和 (正面, 反面)。因此,其概率为:
P(第一次正面) = 有利结果数 / 总结果数 = 2 / 4 = 1/2
事件“至少出现一次正面”包含三个结果,其概率为 3/4。事件“两次都是正面”的概率为 1/4,而事件“没有正面”的概率为 0。
相对频率法
另一种定义概率的方法是使用相对频率。其核心思想是,当实验重复次数趋于无穷时,事件发生的频率会收敛于其概率。
公式:
P(E) = lim (n→∞) [ (事件E发生的次数) / (总实验次数 n) ]
例如,抛硬币时,随着抛掷次数 n 的增加,出现正面的比例会越来越接近 0.5。
然而,并非所有情况都能方便地进行大量重复实验。当我们可以明确列出样本空间时,概率公理体系为我们提供了计算概率的理论框架。
概率公理
概率公理是三条关于概率函数 P 必须满足的基本规则。它们直观且构成了概率论的基础。
以下是三条核心公理:
公理一:任何事件 E 的概率都是一个介于 0 和 1 之间的数。
0 ≤ P(E) ≤ 1
其中,P(E) = 0 表示事件不可能发生,P(E) = 1 表示事件必然发生。
公理二:整个样本空间 S(即必然事件)的概率为 1。
P(S) = 1
公理三:对于任意一系列互斥事件(即它们不可能同时发生),这些事件之并的概率等于它们各自概率之和。
设 E1, E2, E3, ... 是一系列互斥事件,则:
P(E1 ∪ E2 ∪ E3 ∪ ...) = P(E1) + P(E2) + P(E3) + ...
这个性质称为可加性。
公理应用示例
为了理解公理三,让我们看一个具体的例子。
假设我们掷一个均匀的六面骰子。每个面朝上的可能性相同,因此:
P(掷出1) = P(掷出2) = P(掷出3) = P(掷出4) = P(掷出5) = P(掷出6) = 1/6
现在,考虑事件“掷出一个偶数点”,即掷出 2、4 或 6。这些事件是互斥的(一次掷骰只能出现一个结果)。根据公理三,我们可以将它们的概率相加:
P(偶数点) = P(掷出2) + P(掷出4) + P(掷出6)= 1/6 + 1/6 + 1/6= 3/6 = 1/2
因此,掷出偶数点的概率是 50%。
另一个例子能帮助我们理解公理的完备性。假设事件 E1 就是整个样本空间 S(即 P(E1) = 1),而其他所有事件 E2, E3, ... 都与 E1 互斥(即它们的交集为空集)。根据互斥性,这些其他事件的概率必须为 0。那么,根据公理三:
P(S) = P(E1 ∪ E2 ∪ E3 ∪ ...) = P(E1) + P(E2) + P(E3) + ... = 1 + 0 + 0 + ... = 1
这与公理二完全一致,展示了公理体系的自洽性。
总结
本节课中,我们一起学习了概率论的核心基础——概率公理体系。我们首先回顾了通过枚举样本空间来计算概率的方法,然后介绍了通过相对频率定义概率的思想。最后,我们详细阐述并应用了三条概率公理:
- 概率值介于 0 与 1 之间。
- 必然事件的概率为 1。
- 互斥事件之并的概率等于各事件概率之和(可加性)。

这些公理虽然简单,却是构建整个概率论大厦的基石,确保了概率计算的一致性和逻辑性。在后续课程中,我们将基于这些公理推导出更多有用的概率性质和公式。
015:简单命题分析 📊

在本节课中,我们将学习概率论中的四个基本命题。这些命题是理解更复杂概率概念的基础,我们将通过直观的解释和具体的例子来掌握它们。
命题一:事件与其补事件的概率之和为1
上一节我们介绍了概率的基本概念,本节中我们来看看第一个简单命题。该命题指出,任何一个事件发生的概率与其不发生的概率之和总是等于1。
用公式表示如下:
P(E) + P(E') = 1
其中,E' 表示事件 E 的补事件(即 E 不发生)。由此可以推导出:
P(E') = 1 - P(E)
这个结论非常直观。例如,抛一枚硬币,正面朝上的概率是0.5,那么正面不朝上(即反面朝上)的概率就是 1 - 0.5 = 0.5。
命题二:子事件的概率
理解了事件与其补事件的关系后,我们来看第二个命题。该命题涉及事件的包含关系。
如果事件 E 是事件 F 的子集(即 E 发生必然导致 F 发生),那么事件 E 的概率小于或等于事件 F 的概率。
用公式表示如下:
如果 E ⊆ F,则 P(E) ≤ P(F)
例如,掷一个骰子:
- 令事件
E为“点数为1”。 - 令事件
F为“点数为奇数”。
显然,E是F的子集。P(E) = 1/6,而P(F) = 1/2,满足1/6 ≤ 1/2。
命题三:两个事件的并集概率(容斥原理)
上一节我们讨论了事件的包含关系,本节中我们来看看如何处理两个事件至少有一个发生的情况。这是概率论中一个极其重要的公式,称为容斥原理。
对于任意两个事件 E 和 F,它们至少有一个发生的概率(即并集的概率)等于各自概率之和减去它们同时发生的概率(即交集的概率)。
用公式表示如下:
P(E ∪ F) = P(E) + P(F) - P(E ∩ F)
这个公式的核心在于减去重叠部分 P(E ∩ F)。如果 E 和 F 互斥(不可能同时发生),则 P(E ∩ F) = 0,公式简化为 P(E) + P(F)。
应用示例
以下是应用该命题解决实际问题的一个例子:
杰伊在假期带了两本书。她喜欢第一本书的概率是0.5,喜欢第二本书的概率是0.4,同时喜欢两本书的概率是0.3。请问她不喜欢任何一本书的概率是多少?
解题步骤:
- 定义事件:设
E为“喜欢第一本书”,F为“喜欢第二本书”。已知P(E)=0.5,P(F)=0.4,P(E ∩ F)=0.3。 - 计算她喜欢至少一本书的概率:
P(E ∪ F) = 0.5 + 0.4 - 0.3 = 0.6。 - “不喜欢任何一本书”是“喜欢至少一本书”的补事件。根据命题一:
P(不喜欢任何书) = P((E ∪ F)') = 1 - P(E ∪ F) = 1 - 0.6 = 0.4。
因此,杰伊不喜欢任何一本书的概率是 0.4。
命题四:多个事件的并集概率(广义容斥原理)
最后,我们将命题三推广到多个事件的情况。这是容斥原理的一般形式。
对于 n 个事件 E₁, E₂, ..., Eₙ,它们至少有一个发生的概率由以下公式给出:
P(E₁ ∪ E₂ ∪ ... ∪ Eₙ) = Σ P(Eᵢ) - Σ P(Eᵢ ∩ Eⱼ) + Σ P(Eᵢ ∩ Eⱼ ∩ Eₖ) - ... + (-1)^(n+1) P(E₁ ∩ E₂ ∩ ... ∩ Eₙ)
其中,第一个求和是对所有单个事件,第二个求和是对所有两两组合,第三个求和是对所有三三组合,依此类推,符号正负交替。

三个事件的情况
为了理解这个一般公式,我们来看 n=3 的特例,即三个事件 E, F, G 的并集概率:
P(E ∪ F ∪ G) = P(E) + P(F) + P(G) - P(E∩F) - P(E∩G) - P(F∩G) + P(E∩F∩G)
这个公式可以通过反复应用命题三(两个事件的容斥原理)推导出来。它先加所有单个事件的概率,再减去所有两两相交的概率,最后加上三个事件同时发生的概率,以修正之前被重复减去的部分。
总结 📝
本节课中我们一起学习了概率论的四个基础命题:
- 互补性:
P(E) + P(E') = 1。 - 单调性:如果
E ⊆ F,则P(E) ≤ P(F)。 - 两个事件的容斥原理:
P(E ∪ F) = P(E) + P(F) - P(E ∩ F)。这是计算事件并集概率的核心工具。 - 多个事件的广义容斥原理:提供了计算任意多个事件并集概率的通用公式,是命题三的推广。

掌握这些命题是进行更复杂概率分析和推理的基石。
016:等可能结果场景 🎲

在本节课中,我们将学习当样本空间中所有结果出现的可能性都相等时,如何计算事件的概率。这是本模块的最后一讲,我们将综合运用之前学到的知识。
概述
当样本空间 S 是一个有限集,并且其中每个结果发生的可能性都相等时,概率的计算会变得非常直接。本节将介绍其核心公式,并通过具体例子展示其应用。
等可能结果的定义
首先,我们定义等可能结果场景。设样本空间 S 是一个有限集:
S = {1, 2, 3, ..., n}
如果其中每个结果发生的概率都相等,那么对于任意结果 i,其概率为:
P({i}) = 1 / n
其中,i = 1, 2, ..., n。
基于此,对于任意事件 E(即 S 的一个子集),其概率可以计算为事件 E 包含的结果数量与样本空间 S 总结果数量之比:
P(E) = |E| / |S|
这里,|E| 表示事件 E 包含的结果数,|S| 表示样本空间 S 的总结果数。
实例分析:从碗中取球
为了深入理解这个概念,我们来看一个具体的例子。
假设一个碗中有 6个白球 和 5个黑球,总共11个球。我们随机从中抽取3个球。我们想知道事件 E 的概率:抽到的3个球中,恰好有 1个白球 和 2个黑球。
我们将用两种方法来计算这个概率:第一种考虑抽取的顺序,第二种不考虑顺序。你会发现,在等可能结果的假设下,两种方法会得到相同的答案。
方法一:考虑顺序(排列)
在这种方法中,我们认为抽取 白,黑,黑 和抽取 黑,白,黑 是不同的结果。
首先,我们需要计算样本空间 S 的大小。从11个球中依次抽取3个球,考虑顺序,总共有多少种可能?
第一次抽取有11种选择,第二次有10种,第三次有9种。因此:
|S| = 11 × 10 × 9 = 990
接下来,我们计算事件 E(恰好1白2黑)包含的结果数。事件 E 可以通过以下三种互斥的排列模式发生:
- 第一个是白球,后两个是黑球。
- 第二个是白球,第一个和第三个是黑球。
- 第三个是白球,前两个是黑球。
由于这些模式是互斥的,事件 E 的总结果数是这三种模式结果数的和。
以下是每种模式的结果数计算:
- 模式1 (白, 黑, 黑): 6 × 5 × 4 = 120
- 模式2 (黑, 白, 黑): 5 × 6 × 4 = 120
- 模式3 (黑, 黑, 白): 5 × 4 × 6 = 120
因此,事件 E 的总结果数为:
|E| = 120 + 120 + 120 = 360
现在,我们可以计算概率:
P(E) = |E| / |S| = 360 / 990 = 4 / 11 ≈ 0.363
方法二:不考虑顺序(组合)
现在,我们假设球的抽取顺序不重要,即我们只关心最终手里是哪三个球,而不关心它们被抽出的先后顺序。
在这种情况下,样本空间 S 的大小是从11个球中任意选出3个球的组合数:
|S| = C(11, 3) = 11! / (3! × 8!) = (11 × 10 × 9) / (3 × 2 × 1) = 165
对于事件 E(恰好1白2黑),我们需要从6个白球中选1个,同时从5个黑球中选2个。其组合数为:
|E| = C(6, 1) × C(5, 2) = 6 × 10 = 60
因此,概率为:
P(E) = |E| / |S| = 60 / 165 = 4 / 11 ≈ 0.363
两种方法的比较与总结
正如计算结果所示,无论我们是否考虑抽取的顺序,最终得到的概率都是 4/11 或约 0.363。
这个例子说明了等可能结果概率计算的核心要点:当样本空间中每个基本结果发生的可能性相同时,计算事件概率的关键在于正确地计数。你可以根据问题的具体情况和便利性,选择使用排列(考虑顺序)或组合(不考虑顺序)的方法来计数,只要应用得当,它们会导向相同的正确答案。
本节总结
本节课我们一起学习了等可能结果场景下的概率计算。
- 我们首先定义了等可能结果,并给出了核心公式 P(E) = |E| / |S|。
- 然后,我们通过一个从碗中取球的经典例子,演示了如何应用这个公式。
- 我们分别使用考虑顺序的排列方法和不考虑顺序的组合方法进行了计算,并验证了它们结果的一致性。
- 最后我们指出,在等可能前提下,概率计算的本质是计数问题,可以根据问题灵活选择计数工具。


掌握这一基础而强大的方法,是理解更复杂概率模型的重要一步。
017:等可能结果与集合运算实例

在本节课中,我们将通过两个具体实例来学习如何计算等可能结果的概率,以及如何运用集合运算解决实际问题。我们将分析扑克牌中拿到顺子的概率,并使用维恩图解决一个涉及多个集合的计数问题。
扑克牌顺子概率计算
上一节我们介绍了等可能结果的概念,本节中我们来看看如何将其应用于一个经典的概率问题:计算在扑克牌游戏中拿到一手顺子的概率。
在扑克游戏中,玩家从一副52张的牌中抽取5张。由于抽牌顺序无关紧要,我们使用组合数来定义样本空间。样本空间S的大小为从52张牌中任选5张的组合数,即 C(52, 5)。我们假设所有可能的手牌是等可能出现的。
接下来,我们需要计算事件“拿到一手顺子”包含多少种可能的手牌。顺子是指五张点数连续的牌,例如A-2-3-4-5或2-3-4-5-6。
以下是顺子可能的起始点数:
- A, 2, 3, 4, 5
- 2, 3, 4, 5, 6
- 3, 4, 5, 6, 7
- 4, 5, 6, 7, 8
- 5, 6, 7, 8, 9
- 6, 7, 8, 9, 10
- 7, 8, 9, 10, J
- 8, 9, 10, J, Q
- 9, 10, J, Q, K
- 10, J, Q, K, A
总共有10种不同的点数组合可以构成顺子。
对于每一种点数组合(例如A-2-3-4-5),每张牌都有4种不同的花色。因此,构成该特定点数顺子的方式总数为 4^5。
然而,有一种特殊情况需要排除:同花顺(包括皇家同花顺)。同花顺本身是顺子,但它属于更高级别的牌型,在计算普通顺子概率时通常需要单独考虑。每种花色有1个皇家同花顺(10-J-Q-K-A),因此总共有4个皇家同花顺需要从计数中减去。
综合以上信息,拿到一手顺子的总方式数为:10 * (4^5) - 4。
因此,拿到顺子的概率计算公式为:
P(顺子) = [10 * (4^5) - 4] / C(52, 5)
计算结果约为0.0039。
俱乐部运动参与人数问题
看过了概率计算,现在让我们运用集合运算来解决一个实际的计数问题。这个问题涉及多个集合的交集与并集。
假设一个俱乐部有成员参与三种运动:网球(T)、壁球(S)和羽毛球(B)。已知信息如下:
- 36名成员打网球。
- 28名成员打壁球。
- 18名成员打羽毛球。
- 22名成员同时打网球和壁球。
- 12名成员同时打网球和羽毛球。
- 9名成员同时打壁球和羽毛球。
- 4名成员同时参与所有三项运动。
我们需要计算至少参与一项运动的成员人数。
解决此类问题最直观的方法是使用维恩图。三个两两相交的圆可以清晰地表示出所有可能的交集区域。
根据概率论中的容斥原理,三个集合的并集大小可以通过以下公式计算:
|T ∪ S ∪ B| = |T| + |S| + |B| - |T ∩ S| - |S ∩ B| - |T ∩ B| + |T ∩ S ∩ B|
这个公式的逻辑是:先将三个集合的个体数量相加,然后减去两两交集部分(因为它们被重复计算了),最后再加回三个集合的交集部分(因为在减去两两交集时,这部分被多减了一次)。
将已知数据代入公式:
|T ∪ S ∪ B| = 36 + 28 + 18 - 22 - 12 - 9 + 4
计算得出结果为43。
值得注意的是,在这个问题中,我们不需要知道俱乐部的总人数n。我们直接计算出了目标集合的绝对大小,而不是概率。公式中的每一项都是具体的人数,因此最终结果43就是至少参与一项运动的成员人数。
总结


本节课中我们一起学习了两个运用基础概率与集合知识的实例。首先,我们通过组合计数的方法,计算了扑克牌中拿到顺子这一特定手牌的概率。接着,我们利用容斥原理和维恩图,解决了一个涉及多个集合交并关系的实际计数问题,求出了至少参与一项活动的具体人数。这两个例子展示了如何将抽象的数学原理应用于具体场景的分析与计算。
018:R语言概率探索教程 🎲

在本教程中,我们将学习如何使用R语言编程来探索概率。我们将从设置工作环境开始,逐步学习如何定义样本空间、进行模拟实验、处理集合运算,并最终计算事件的概率。




准备工作:加载工具包与函数


在开始之前,我们需要加载一些必要的R包和自定义函数。这些工具集中在一个名为Stat tools的文件中,通过source命令运行,可以一次性加载所有需要的功能。这些自定义函数是为特定任务编写的,不会在全局环境中自动可用。


# 清除当前环境中的所有变量
rm(list = ls())# 加载自定义函数和所需包
source("Stat_tools.R")


运行上述代码后,所需的包和函数就被加载到当前R会话中,可供后续使用。
定义样本空间



样本空间是一个实验所有可能结果的集合。在R中,我们可以用多种方式定义它。

使用数据框定义



我们可以使用data.frame来创建一个简单的样本空间。例如,定义一个物体落地后可能的状态:


lands <- data.frame(outcome = c("up", "down", "side"))
lands




运行后,变量lands就包含了三个可能的结果:up、down和side。




使用sample函数模拟



对于掷骰子或抛硬币这类有固定数量结果的实验,我们可以使用sample函数进行模拟。



以下是模拟掷一个六面骰子30次的方法:



die <- sample(1:6, size = 30, replace = TRUE)
die


同样地,我们可以模拟抛一枚均匀硬币30次:



coin <- sample(c("Heads", "Tails"), size = 30, replace = TRUE)
coin





使用prob包中的函数



prob包(在source时已加载)提供了更便捷的函数来生成标准实验的样本空间。



例如,生成抛一次硬币的样本空间:



tosscoin(times = 1)



生成抛三次硬币的样本空间(此时样本空间大小为2³ = 8):



tosscoin(times = 3)



对于掷骰子,也有对应的函数:





# 掷一个骰子
rolldie(times = 1)
# 掷两个骰子(样本空间大小为6² = 36)
rolldie(times = 2)




扑克牌与抽球实验




prob包还内置了扑克牌的样本空间:



# 查看牌堆的前几张牌
head(cards())
# 查看牌堆的最后几张牌
tail(cards())



对于从瓮中抽球的经典概率实验,我们可以使用urnsamples函数,并指定是否放回:




# 从装有1,2,3三个球的瓮中抽两个球,有放回
urnsamples(1:3, size = 2, replace = TRUE)
# 从瓮中抽两个球,无放回
urnsamples(1:3, size = 2, replace = FALSE)
注意:有放回时,可能抽到相同数字(如(1,1));无放回时,则不可能。




集合运算:并集、交集与差集



在定义了样本空间后,我们经常需要处理事件的集合。R可以方便地进行集合运算。




首先,让我们以一副标准扑克牌(不含大小王)为例建立样本空间:

S <- cards(makespace = FALSE)





假设我们定义两个事件:
- 事件A:抽到红桃(Hearts)。
- 事件B:抽到点数为5到8的牌。


A <- subset(S, suit == "Heart")
B <- subset(S, rank %in% 5:8)


现在,我们可以对这两个集合进行运算:

以下是计算并集(A或B发生)的方法:





union(A, B)

以下是计算交集(A和B同时发生)的方法:


intersect(A, B)


以下是计算差集(在A中但不在B中)的方法:


setdiff(A, B)
注意:setdiff(A, B)与setdiff(B, A)的结果通常不同。



我们还可以利用差集求一个事件的补集(不在该事件中的结果):


# 事件A(红桃)的补集,即所有非红桃的牌
setdiff(S, A)

构建概率空间与计算概率

概率空间不仅包含样本空间,还包含每个结果对应的概率。



等可能结果


对于像均匀骰子这样的实验,每个结果概率相等。prob包可以自动处理:

# 方法1:使用probspace函数明确指定概率
S_die <- 1:6
P <- rep(1/6, times = 6)
prob_space1 <- probspace(S_die, probs = P)# 方法2:直接使用rolldie并设置makespace=TRUE,这是最简洁的方式
prob_space2 <- rolldie(times = 1, makespace = TRUE)
prob_space2


非等可能结果


对于非均匀的硬币,我们需要指定每个结果的概率:




# 创建一个不公平的硬币,正面朝上概率0.7,反面0.3
unfair_coin <- tosscoin(times = 1, makespace = TRUE)
probs(unfair_coin) <- c(0.7, 0.3)
unfair_coin# 或者使用iidspace函数直接创建(例如抛三次这种不公平硬币)
iidspace(c("H", "T"), ntrials = 3, probs = c(0.7, 0.3))




计算事件概率



现在,我们通过两个例子来学习如何计算具体事件的概率。





例1:掷两个骰子,点数和为7的概率。



首先建立两个均匀骰子的概率空间:



S_two_dice <- rolldie(times = 2, makespace = TRUE)


然后,找出点数和为7的所有结果:



event_sum7 <- subset(S_two_dice, X1 + X2 == 7)


最后,计算概率。有两种等价方法:
- 对事件中所有结果的概率求和。
- 用事件的结果数除以样本空间的结果总数。




# 方法1:概率求和
sum(event_sum7$probs)# 方法2:计数法
nrow(event_sum7) / nrow(S_two_dice)# 方法3:使用prob函数(最直接)
prob(S_two_dice, event = X1 + X2 == 7)
三种方法都会得到相同的结果:1/6 ≈ 0.1667。



例2:掷八个骰子,点数和为26的概率。



这个例子手动计算几乎不可能,但用R则很简单。样本空间非常巨大(6⁸ = 1,679,616种可能),但R可以高效处理。





S_eight_dice <- rolldie(times = 8, makespace = TRUE)
event_sum26 <- subset(S_eight_dice, X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 == 26)
prob(S_eight_dice, event = X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 == 26)
计算得到的概率约为0.0748。


总结 🎯
在本教程中,我们一起学习了使用R语言进行概率探索的基本技能。我们从加载必要的工具开始,然后学习了如何定义各种实验的样本空间,包括简单的列表、模拟抽样以及使用专门的prob包。接着,我们探讨了如何在R中对事件进行集合运算,如求并集、交集和差集。最后,我们重点学习了如何构建概率空间(包括等可能和非等可能结果),并通过实际例子演示了计算特定事件概率的多种方法。








掌握这些技能,你将能够利用R的强大计算能力,解决那些手工计算繁琐甚至不可能完成的概率问题。请务必尝试教程中提到的其他示例,以巩固你的理解。
019:条件概率理论 🎲






在本节课中,我们将要学习条件概率。条件概率是概率论中的一个核心概念,它描述了在已知某个事件发生的情况下,另一个事件发生的概率。我们将通过几个抛硬币的例子,直观地理解如何计算条件概率。








示例一:两枚硬币的选择




假设鲍勃从一个袋子中选择一枚硬币。袋子里有两枚硬币:一枚是公平硬币,另一枚是两面都是正面的硬币。
公平硬币意味着出现正面或反面的概率各为50%。两面都是正面的硬币则意味着抛掷结果永远是正面。




我们的问题是:在鲍勃抛掷一次硬币并观察到正面的条件下,他选到公平硬币的概率是多少?



为了解答这个问题,我们使用一种强大的工具——概率树来分析所有可能的结果。
以下是构建概率树的步骤:
- 首先,鲍勃有两种选择:公平硬币或两面都是正面的硬币。
- 如果选择公平硬币,抛掷结果可能是正面或反面。
- 如果选择两面都是正面的硬币,抛掷结果只能是正面。





现在,我们已知观察到的结果是正面。因此,所有导致反面的分支(即公平硬币抛掷出反面的情况)都不在我们的考虑范围内。


在剩余的样本空间中,总共有三种可能得到正面:
- 选择公平硬币并抛出正面。
- 选择两面都是正面的硬币并抛出正面(第一种情况)。
- 选择两面都是正面的硬币并抛出正面(第二种情况,虽然结果相同,但在计数上视为不同的可能性路径)。


在这三种可能中,只有第一种情况(选择公平硬币并抛出正面)符合“选到公平硬币”的条件。




因此,概率计算如下:
P(公平硬币 | 观察到正面) = 1 / 3





示例延伸:观察到两次正面


上一节我们介绍了在观察到一次正面的情况下计算条件概率。本节中我们来看看,如果鲍勃抛掷两次硬币并都观察到正面,那么他选到公平硬币的概率是多少。



我们继续扩展概率树:
- 如果第一次抛掷公平硬币得到正面,第二次抛掷可能是正面或反面。
- 如果第一次抛掷两面都是正面的硬币得到正面,第二次抛掷仍然是正面。



现在,我们已知观察到的结果是两次正面。因此,所有包含反面的分支(例如,公平硬币在第二次抛掷出现反面)都不在考虑范围内。


在剩余的样本空间中,总共有五种可能得到两次正面:
- 选择公平硬币,第一次正面,第二次正面。
- 选择两面都是正面的硬币,第一次正面,第二次正面(情况A)。
- 选择两面都是正面的硬币,第一次正面,第二次正面(情况B)。
- 选择两面都是正面的硬币,第一次正面,第二次正面(情况C)。
- 选择两面都是正面的硬币,第一次正面,第二次正面(情况D)。

在这五种可能中,只有第一种情况符合“选到公平硬币”的条件。





因此,概率计算如下:
P(公平硬币 | 观察到两次正面) = 1 / 5






示例二:三枚硬币与有偏硬币
现在让我们看一个更复杂的例子。假设鲍勃从三枚硬币中选择一枚:其中两枚是公平硬币,一枚是有偏硬币。

这枚有偏硬币被设计为抛出正面的概率是 2/3,抛出反面的概率是 1/3。






我们的问题是:在鲍勃抛掷一次硬币并观察到正面的条件下,他选到公平硬币的概率是多少?

我们再次使用概率树。但这里有一个关键点:公平硬币的结果(正/反)概率相等,而有偏硬币的结果概率不相等。为了在同一个样本空间中公平地比较和计数,我们需要找到一个共同的分母。

公平硬币有两种等可能结果,有偏硬币有三种可能结果(但概率权重不同)。为了平衡,我们将每个结果“拆分”以确保每条路径的权重一致。最小公倍数是6。
- 对于公平硬币:我们将“正面”拆分为3条等价的路径,将“反面”也拆分为3条等价的路径。
- 对于有偏硬币:根据其
2/3对1/3的概率,我们将“正面”拆分为2条路径,将“反面”拆分为1条路径。
经过这样的调整,每枚硬币在树状图中都对应6条等可能的基本结果路径。
现在,我们已知观察到的结果是正面。因此,所有导致反面的分支都不在考虑范围内。





在剩余的样本空间中,总共有10条可能得到正面的路径:
- 来自第一枚公平硬币:3条路径。
- 来自第二枚公平硬币:3条路径。
- 来自有偏硬币:2条路径。


在这10条路径中,有6条(来自两枚公平硬币)符合“选到公平硬币”的条件。


因此,概率计算如下:
P(公平硬币 | 观察到正面) = 6 / 10 = 3 / 5






总结


本节课中我们一起学习了条件概率的计算方法。我们通过构建概率树来枚举所有可能的结果,并在已知某个事件(条件)发生的情况下,通过计数满足条件的结果总数以及其中符合目标事件的结果数,来求得条件概率。
核心步骤可以总结为:
- 列出所有可能的结果(样本空间)。
- 根据已知条件,排除不满足条件的结果。
- 在剩余的结果中,计数满足目标事件的结果数量。
- 计算概率:
P(目标事件 | 已知条件) = (满足条件且满足目标的结果数) / (满足条件的结果总数)。






这种方法直观且强大,是理解更复杂概率问题的基础。
020:条件概率典型问题 🧮




在本节课中,我们将通过一个具体的例子来学习条件概率。我们会探讨如何计算条件概率,理解其含义,并介绍一个非常重要的公式——贝叶斯规则。



概述与问题引入


假设你可以在两种超能力中选择一种:第一种是能说世界上任何语言,第二种是能演奏任何乐器。你会如何选择?




在课堂上,我们收集了15名学生的选择数据,并根据性别和能力偏好整理成下表:




| 能力/性别 | 男性 | 女性 | 总计 |
|---|---|---|---|
| 语言 | 7 | 1 | 8 |
| 乐器 | 3 | 4 | 7 |
| 总计 | 10 | 5 | 15 |



上一节我们介绍了概率的基本概念,本节中我们将利用这个表格来学习条件概率。






基础概率计算




首先,我们来计算一些简单的概率。


- 选择语言的概率:班级总共有15人,其中8人选择了语言。因此,概率为:
P(语言) = 8 / 15




- 是女性的概率:班级中有5名女性。因此,概率为:
P(女性) = 5 / 15 = 1/3






理解条件概率 🎯




现在,我们引入条件概率。条件概率是指在已知某个事件发生的前提下,另一个事件发生的概率。

例如,我们想知道:在已知某人选择了乐器的条件下,此人是女性的概率是多少?




我们用符号 P(女性 | 乐器) 来表示这个条件概率。计算时,我们的关注范围缩小到“选择乐器”的这组人(共7人)。在这7人中,有4人是女性。因此:
P(女性 | 乐器) = 4 / 7


请注意,P(女性) = 1/3 ≈ 0.333,而 P(女性 | 乐器) = 4/7 ≈ 0.571。这两个概率不相等。




这意味着“性别”和“能力选择”这两个事件不是独立的,它们之间存在某种依赖关系。 知道一个人选择了乐器,会改变我们对其性别的概率判断。





练习与常见误区



让我们练习另一个条件概率的计算:已知某人是男性,他选择语言的概率是多少?

计算过程如下:
- 条件“是男性”将我们的关注范围限定在男性列(共10人)。
- 在这10名男性中,有7人选择了语言。
- 因此,概率为:
P(语言 | 男性) = 7 / 10 = 0.7





一个重要的问题是:P(A|B) 是否等于 P(B|A)?




答案是否定的。我们可以用刚才的数据验证:
P(女性 | 乐器) = 4/7P(乐器 | 女性) = 4/5(在5名女性中,4人选择了乐器)





显然,4/7 ≠ 4/5。因此,条件概率的顺序至关重要,不能随意调换。





条件概率的语义辨析



理解条件概率的表述非常重要。以 P(语言 | 男性) = 0.7 为例,以下哪种解释是正确的?
A. 70% 的男性选择了语言。
B. 70% 的语言选择者是男性。




让我们分析一下:
- 选项A关注的是“男性”这个群体,计算其中选择语言的比例,这正是
P(语言 | 男性)的定义。 - 选项B关注的是“选择语言”这个群体,计算其中男性的比例,这实际上是
P(男性 | 语言)。根据表格,这个值是7/8 = 87.5%,并非70%。




因此,P(语言 | 男性) = 0.7 的正确含义是:70% 的男性选择了语言。





联合概率与贝叶斯规则 🔗





现在,我们计算联合概率,即两个事件同时发生的概率。例如,某人既是男性又选择语言的概率。

从表格中可以直接看出,满足条件的人数是7,总人数是15,所以:
P(男性 ∩ 语言) = 7 / 15



这个联合概率可以通过条件概率推导出来:
P(男性 ∩ 语言) = P(语言 | 男性) * P(男性) = (7/10) * (10/15) = 7/15
同样,也可以写作:
P(男性 ∩ 语言) = P(男性 | 语言) * P(语言) = (7/8) * (8/15) = 7/15



由此,我们可以得到著名的贝叶斯规则(Bayes‘ Rule) 的一般形式:
P(A | B) = [P(B | A) * P(A)] / P(B)


贝叶斯规则揭示了如何通过“反向”的条件概率 P(B|A) 来计算我们关心的条件概率 P(A|B),它在统计学和机器学习中有着极其广泛的应用。








总结



本节课中我们一起学习了:
- 条件概率
P(A|B)的计算与含义,它表示在事件B发生的条件下,事件A发生的概率。 - 条件概率
P(A|B)通常不等于P(B|A),需要注意区分。 - 理解了条件概率陈述的真实语义(例如,“70%的男性选择语言”)。
- 介绍了联合概率与贝叶斯规则,该规则建立了不同条件概率之间的联系,是统计学中一个强大而基础的工具。


通过具体的例子和计算,我们希望你能对条件概率这一核心概念有更直观和扎实的理解。
021:瓮中红球抽取实验 🎱
在本节课中,我们将通过一个具体的例子来学习条件概率的计算。这个例子涉及从一个瓮中不放回地抽取两个球,并计算两个球都是红色的概率。
实验设定

首先,我们来明确实验的设定。假设我们有一个瓮,里面装有8个红球和4个白球。实验内容是:不放回地从瓮中连续抽取两个球。这意味着,我们抽出一个球后,不会将其放回瓮中,然后再抽取第二个球。
我们假设在每次抽取时,瓮中每个球被选中的可能性是相等的。我们的目标是计算:连续抽出的两个球都是红球的概率。

定义事件
为了清晰地分析问题,我们首先定义两个事件:
- 设事件 R₁ 为“第一次抽出的球是红球”。
- 设事件 R₂ 为“第二次抽出的球是红球”。
因此,我们要求解的概率是 P(R₁ ∩ R₂),即事件 R₁ 和 R₂ 同时发生的概率。
计算条件概率
上一节我们定义了事件,本节中我们来看看如何计算关键的条件概率。根据乘法法则,我们有:
P(R₁ ∩ R₂) = P(R₁) × P(R₂ | R₁)
其中,P(R₂ | R₁) 表示在“第一次抽到红球”的条件下,“第二次也抽到红球”的概率。这是我们需要计算的核心条件概率。
以下是计算 P(R₂ | R₁) 的推理过程:
- 在第一次抽球前,瓮中共有 12 个球(8红 + 4白)。
- 如果第一次抽到了红球(事件 R₁ 发生),那么抽完后,瓮中还剩下 11 个球。
- 由于第一次抽走了一个红球,剩下的 11 个球中,红球数量变为 7 个,白球仍为 4 个。
- 在第二次抽取时,每个球被抽中的可能性依然相等。因此,在 R₁ 发生的条件下,第二次抽到红球的概率就是剩余红球数除以总球数。
所以,条件概率的计算公式为:
P(R₂ | R₁) = 7 / 11

求解最终概率
现在我们已经得到了条件概率,可以将其代入乘法公式来求解最终答案。
我们知道:
- P(R₁):第一次抽到红球的概率。初始时,12个球中有8个红球,所以 P(R₁) = 8 / 12 = 2 / 3。
- P(R₂ | R₁):在第一次抽到红球的条件下,第二次抽到红球的概率,我们已计算出为 7 / 11。
将这两个概率相乘,即可得到两个球都是红球的概率:
P(R₁ ∩ R₂) = P(R₁) × P(R₂ | R₁) = (2/3) × (7/11) = 14/33
因此,连续两次不放回地抽到红球的概率是 14/33。
总结

本节课中,我们一起学习了如何应用条件概率和乘法法则解决一个经典的不放回抽样问题。我们首先定义了事件,然后计算了在第一次抽球结果已知的条件下,第二次抽球的概率,最后通过乘法得到了联合概率。这个例子清晰地展示了条件概率在序贯实验中的重要作用。
022:贝叶斯定理再探讨 🔄




在本节课中,我们将重新审视贝叶斯定理。我们将通过一个具体的例子,深入理解如何运用贝叶斯定理解决涉及条件概率的问题,并推导出计算事件总概率的通用公式。





样本空间与事件分解




为了更直观地理解,我们首先考虑一个样本空间。假设我们有两个事件:事件 A 和事件 B。







如上图所示,整个矩形代表样本空间。圆圈 A 和 B 分别代表两个事件。它们的交集区域记为 A ∩ B。事件 A 可以分解为两个互斥的部分:
- 在 B 内的部分:A ∩ B
- 不在 B 内的部分:A ∩ Bᶜ (其中 Bᶜ 是 B 的补集)



由于 A ∩ B 和 A ∩ Bᶜ 没有重叠,它们是互斥的。因此,事件 A 的概率可以表示为这两个互斥部分概率之和:


P(A) = P(A ∩ B) + P(A ∩ Bᶜ)




应用贝叶斯定理展开



上一节我们将事件 A 分解成了两个部分。现在,我们可以利用贝叶斯定理(条件概率公式)对每一部分进行展开。




根据贝叶斯定理,我们有:
- P(A ∩ B) = P(A | B) * P(B)
- P(A ∩ Bᶜ) = P(A | Bᶜ) * P(Bᶜ)



将这两个等式代入 P(A) 的公式中,我们得到一个非常重要的全概率公式:





P(A) = P(A | B) * P(B) + P(A | Bᶜ) * P(Bᶜ)




由于 P(Bᶜ) = 1 - P(B),这个公式也可以写成:




P(A) = P(A | B) * P(B) + P(A | Bᶜ) * (1 - P(B))


这个公式是解决许多概率问题的核心工具,它允许我们通过考虑不同条件(这里是 B 和 Bᶜ)下的概率来求一个事件的总概率。



实例解析:事故概率计算

让我们通过一个具体问题来应用上述公式。以下是问题描述:
- 30% 的人是易出事故的。
- 易出事故的人,在一年内发生事故的概率是 40%。
- 不易出事故的人,在一年内发生事故的概率是 20%。



问题(3a):一个新司机在一年内发生事故的概率是多少?

我们定义事件:
- A:司机在一年内发生事故。
- P:司机是易出事故的。


根据全概率公式,新司机发生事故的概率为:


P(A) = P(A | P) * P(P) + P(A | Pᶜ) * P(Pᶜ)


现在,我们将题目给出的数值代入公式:
- P(A | P) = 0.40 (已知易出事故者的事故概率)
- P(P) = 0.30 (易出事故者的比例)
- P(A | Pᶜ) = 0.20 (不易出事故者的事故概率)
- P(Pᶜ) = 1 - 0.30 = 0.70 (不易出事故者的比例)
计算过程如下:
P(A) = (0.40 * 0.30) + (0.20 * 0.70) = 0.12 + 0.14 = 0.26






因此,一个新司机在一年内发生事故的概率是 0.26 或 26%。


逆向推理:应用贝叶斯公式




在解决了直接概率问题后,我们来看一个逆向问题。这需要直接使用贝叶斯定理的标准形式。


问题(3b):如果一个新司机在一年内发生了事故,那么他是易出事故的人的概率是多少?
现在我们要求的是条件概率 P(P | A),即在已知发生事故(A)的条件下,司机是易出事故者(P)的概率。



根据贝叶斯定理:
P(P | A) = P(A | P) * P(P) / P(A)


我们已经从题目和上一问的计算中知道了所有需要的值:
- P(A | P) = 0.40
- P(P) = 0.30
- P(A) = 0.26 (从3a得出)
代入公式计算:
P(P | A) = (0.40 * 0.30) / 0.26 = 0.12 / 0.26 ≈ 0.4615




所以,如果一个新司机发生了事故,那么他属于易出事故人群的概率大约是 46.15%。



总结

本节课我们一起深入探讨了贝叶斯定理的应用。
- 我们首先通过文氏图理解了事件如何被分解为互斥的部分。
- 接着,我们推导并掌握了计算事件总概率的关键公式:P(A) = P(A|B)P(B) + P(A|Bᶜ)P(Bᶜ)。
- 然后,我们运用这个公式解决了一个实际问题,计算了新司机的事故概率。
- 最后,我们使用贝叶斯定理的标准形式 P(B|A) = P(A|B)P(B)/P(A) 解决了一个逆向概率问题,即在已知结果的情况下推断原因的可能性。





通过这两个例子,我们可以看到贝叶斯定理如何将复杂的条件概率问题分解为已知或更易计算的组成部分,是统计学中一个极其强大的推理工具。
023:独立性检验 🔍








在本节课中,我们将要学习概率论中的一个核心概念:独立性。我们将通过具体的例子来理解什么是独立事件,并学习如何检验两个事件是否独立。







上一节我们讨论了依赖事件,本节中我们来看看独立事件。



让我给你一个例子。假设事件A表示“随机抽取一张牌,它是Ace”。事件B表示“随机抽取一张牌,它是黑桃”。




那么,事件A和B同时发生的概率,即抽到黑桃A的概率,是1/52。因为一副牌有52张,黑桃A只有一张。





我们也可以分别计算事件A和事件B的概率。事件A(抽到Ace)的概率是4/52,即1/13。事件B(抽到黑桃)的概率是13/52,即1/4。



有趣的是,在这个例子中,事件A的概率乘以事件B的概率,其结果恰好等于事件A和B同时发生的概率:
P(A) * P(B) = (1/13) * (1/4) = 1/52 = P(A ∩ B)





这个发现引出了我们的核心规则:如果两个事件A和B满足 P(A ∩ B) = P(A) * P(B),那么我们就称事件A和B是独立的。这是独立性的定义。






如果A和B独立,那么A与B的补集(即B不发生的事件)也是独立的。




现在,让我们重新审视一个之前提出的问题:P(A|B) 在什么情况下会等于 P(B|A)?

根据贝叶斯定理,我们知道:
P(A|B) = P(A ∩ B) / P(B)
P(B|A) = P(A ∩ B) / P(A)



要使这两个条件概率相等,即 P(A ∩ B) / P(B) = P(A ∩ B) / P(A),需要满足以下条件之一:


以下是可能的选项:
P(A) = P(B)P(A) = 0或P(B) = 0P(A ∩ B) = 0- 以上都不是



让我们来分析一下。如果 P(A) = P(B),那么等式两边的分母相同,等式自然成立。如果 P(A ∩ B) = 0(即A和B是互斥事件),那么等式两边都等于0,等式也成立。而如果 P(A) = 0 或 P(B) = 0,会导致条件概率的定义出现问题(分母为零),因此不是有效情况。


所以,正确的答案是:当 P(A) = P(B) 或 P(A ∩ B) = 0 时,P(A|B) 等于 P(B|A)。







本节课中我们一起学习了独立事件的定义:如果两个事件A和B满足 P(A ∩ B) = P(A) * P(B),则它们是独立的。我们还利用贝叶斯定理探讨了 P(A|B) = P(B|A) 成立的条件,即两个事件的概率相等,或者它们互斥(同时发生的概率为零)。理解独立性是进行更复杂概率分析和统计推断的重要基础。
024:医学检测实例分析 🧪







在本节课中,我们将通过一个医学检测的实例,深入探讨条件概率和贝叶斯定理的应用。我们将学习如何计算在检测结果为阳性的情况下,一个人实际患病的概率,并理解检测准确性与实际患病概率之间的差异。






问题设定





假设某一人群中,有 10% 的人患有某种疾病。




以下是检测的准确性信息:
- 如果一个人确实患病,检测有 10% 的概率出现假阴性(即检测结果为阴性)。
- 如果一个人没有患病,检测有 30% 的概率出现假阳性(即检测结果为阳性)。
现在,我们随机选择一个人进行检测,结果为阳性。问题是:这个人实际患病的概率是多少?




以下是几个选项:
A. 小于或等于 10%
B. 25%
C. 介于 30% 到 40% 之间
D. 大约 50%

定义事件与构建概率树




为了清晰地分析问题,我们首先定义两个事件:
- 事件 A:此人患病。
- 事件 B:检测结果为阳性。


我们想知道的是条件概率 P(A|B),即在检测结果为阳性的条件下,此人患病的概率。根据贝叶斯定理,这可以表示为:
P(A|B) = P(A ∩ B) / P(B)


接下来,我们使用概率树来枚举所有可能的情况。以下是构建概率树的步骤:


- 第一层分支:此人是否患病。
- P(A) = 0.1 (患病)
- P(¬A) = 0.9 (未患病)


- 第二层分支:在患病与否的条件下,检测结果。
- 若患病 (A):
- 检测为阳性(正确):概率为 1 - 0.1 = 0.9
- 检测为阴性(假阴性):概率为 0.1
- 若未患病 (¬A):
- 检测为阳性(假阳性):概率为 0.3
- 检测为阴性(正确):概率为 1 - 0.3 = 0.7
- 若患病 (A):



现在,我们计算每条路径的联合概率:
- 路径1 (患病且阳性):
0.1 * 0.9 = 0.09 - 路径2 (患病且阴性):
0.1 * 0.1 = 0.01 - 路径3 (未患病且阳性):
0.9 * 0.3 = 0.27 - 路径4 (未患病且阴性):
0.9 * 0.7 = 0.63


所有路径概率之和为 1,验证了计算的完整性。






计算目标概率


根据概率树的结果,我们可以找到所需的概率:
- P(A ∩ B) (患病且检测阳性)对应路径1:0.09
- P(B) (检测结果为阳性)是路径1和路径3的概率之和:
0.09 + 0.27 = 0.36
因此,我们要求的概率为:
P(A|B) = P(A ∩ B) / P(B) = 0.09 / 0.36 = 0.25




所以,答案是 25%,对应选项 B。





深入思考:准确率与预测概率的差异
一个有趣的现象是,虽然检测结果为阳性,但实际患病的概率只有25%。然而,如果我们计算这个检测的整体准确率,结果却高得多。
以下是检测准确率的计算过程:
检测正确的情况有两种:
- 患病且检测为阳性(真阳性):概率为 0.09
- 未患病且检测为阴性(真阴性):概率为 0.63

因此,整体准确率为:0.09 + 0.63 = 0.72,即 72%。




为什么72%的准确检测,给出的阳性预测值只有25%?核心原因在于疾病的基础患病率很低(仅10%)。由于患病是罕见事件,即使检测有一定误差,绝大多数阳性结果实际上来自未患病的庞大群体(假阳性)。这使得在得到一个阳性结果时,它更可能是一个错误警报,而非真正的患病信号。




这个原理在计算机科学,特别是机器学习中至关重要。当我们处理类别不平衡的数据集(例如,欺诈交易检测、罕见疾病诊断)时,一个分类器可能整体准确率很高,但对于识别那些罕见的正类样本(真正例)的能力可能非常弱。因此,在选择和评估模型时,不能只看整体准确率,还需要关注精确率、召回率等针对特定类别的指标。




扩展案例:重复检测
假设检测结果为阳性的是一位孕妇,而治疗该疾病的药物有50%的概率伤害胎儿。作为医生,你会怎么做?一个合理的策略是进行重复检测。

如果两次检测独立且结果均为阳性,那么此人实际患病的概率会如何变化?


我们可以沿用之前的概率树思路,在第一次检测结果的基础上,对“患病”和“未患病”两个分支,分别以相同的条件概率(患病者90%阳性,未患病者30%阳性)进行第二次检测的展开计算。




通过计算(过程略),我们可以得到,在两次独立检测均为阳性的条件下,此人实际患病的概率将上升至 8/16 = 50%。重复检测显著提高了预测的置信度,为临床决策提供了更可靠的依据。





总结
本节课中,我们一起学习了如何应用条件概率和贝叶斯定理解决医学检测问题。我们通过构建概率树,清晰地分析了“患病”和“检测结果”两个事件的关系,并计算出在特定检测结果下的后验概率。





我们重点理解了基础概率(先验概率) 对结果产生的巨大影响,以及检测的整体准确率与针对阳性结果的预测值之间的关键区别。最后,我们探讨了通过重复独立检测来提高预测置信度的策略。这些概念是理解统计推断和在计算机科学中构建可靠分类系统的基础。
025:嘉年华骰子悖论 🎲






在本节课中,我们将要学习一个有趣的概率悖论,称为“嘉年华骰子悖论”。我们将通过一个简单的游戏来理解概率计算中的一个常见陷阱,并学习如何正确计算多个事件并集的概率。







游戏规则

嘉年华骰子是一个游戏。玩家需要从1到6中选择一个数字。然后,玩家会投掷三枚公平的骰子。




玩家获胜的条件是:至少有一枚骰子显示的数字与玩家选择的数字匹配。







一个直觉上的“证明”
一个常见的直觉是:每枚骰子出现玩家所选数字的概率是 1/6。投掷三枚骰子,那么获胜的概率似乎是:
P(获胜) = 1/6 + 1/6 + 1/6 = 1/2
这看起来玩家有50%的胜率。然而,这个结论正确吗?




上一节我们介绍了游戏规则和直觉上的概率计算,本节中我们来看看为什么这个直觉是错误的。





错误分析与正确计算




直觉计算错误的原因在于,它假设了三个事件(第一枚骰子命中、第二枚骰子命中、第三枚骰子命中)是互斥的。但实际上,可能有两枚甚至三枚骰子同时命中玩家所选数字,这些重叠的情况被重复计算了。

为了正确计算至少一枚骰子命中的概率,我们需要使用容斥原理。


设事件 A_i 为“第 i 枚骰子显示玩家所选数字”。那么获胜的概率是:
P(获胜) = P(A1 ∪ A2 ∪ A3)


根据容斥原理,这个概率的正确计算公式为:
P(A1 ∪ A2 ∪ A3) = P(A1) + P(A2) + P(A3)- P(A1 ∩ A2) - P(A1 ∩ A3) - P(A2 ∩ A3)+ P(A1 ∩ A2 ∩ A3)


以下是各项概率的具体值:
P(A1) = P(A2) = P(A3) = 1/6P(A1 ∩ A2) = P(A1 ∩ A3) = P(A2 ∩ A3) = (1/6) * (1/6) = 1/36P(A1 ∩ A2 ∩ A3) = (1/6) * (1/6) * (1/6) = 1/216

将数值代入公式:
P(获胜) = (1/6 + 1/6 + 1/6) - (1/36 + 1/36 + 1/36) + (1/216)= 1/2 - 3/36 + 1/216= 1/2 - 1/12 + 1/216≈ 0.5 - 0.08333 + 0.00463≈ 0.4213

因此,玩家的真实获胜概率约为 42.13%,而不是50%。这证实了庄家(嘉年华)在游戏中占有优势。





一般性规则与注意事项



从上面的计算中,我们可以总结出一个关于条件概率下并集计算的一般规则。对于事件A、B和条件C:
P(A ∪ B | C) = P(A | C) + P(B | C) - P(A ∩ B | C)




然而,必须注意这个公式的方向性。它不能随意反向推导或应用于其他结构。

例如,考虑以下命题:如果事件C和D互斥(C ∩ D = ∅),那么 P(A | C ∪ D) 是否等于 P(A | C) + P(A | D)?



答案是否定的。我们可以通过一个思想实验来反驳:假设在条件C下,A必然发生(P(A|C)=1);在条件D下,A也必然发生(P(A|D)=1)。那么 P(A|C) + P(A|D) = 2,这显然不可能是一个概率值(概率值必须在0到1之间)。因此,这个等式不成立。


总结





本节课中我们一起学习了嘉年华骰子悖论。我们了解到,在计算多个事件“至少发生一个”的概率时,不能简单地将单个事件的概率相加,因为事件之间可能存在重叠。我们必须使用容斥原理来减去重叠部分被重复计算的概率。通过正确的计算,我们发现玩家的胜率实际上低于50%,这揭示了此类游戏庄家占优的本质。同时,我们也强调了概率公式的应用有其特定条件和方向,不能随意推广。
026:歧视诉讼悖论 📊



在本节课中,我们将通过一个著名的真实案例——伯克利大学歧视诉讼案,来探讨一个关于条件概率的统计悖论。我们将学习如何用数学公式描述问题,并理解为什么局部数据与整体数据可能呈现出看似矛盾的结果。

案例背景



伯克利大学曾面临一起诉讼。一位数学教授在申请终身教职时被拒绝,她因此提起诉讼,指控伯克利大学存在性别歧视。她提供的证据并非关于教职评审,而是关于博士生的录取情况。她指出,在伯克利大学的全部22个系中,每个系录取的女性博士生比例都低于男性。



然而,伯克利大学反驳称,从整个大学的层面来看,博士生项目中录取的女性总数实际上多于男性。


这就引出了一个核心问题:这可能吗? 是否可能每个系录取的女性比例都更低,但全校加总后女性总数反而更多?
问题建模



为了分析这个问题,我们使用条件概率来建模。我们以两个系为例进行说明。


首先定义一些符号:
- A 表示事件“被录取”。
- F_CS 表示“女性申请计算机科学系”。
- F_EE 表示“女性申请电气工程系”。
- M_CS 表示“男性申请计算机科学系”。
- M_EE 表示“男性申请电气工程系”。
原告(教授)的指控可以表述为以下两个条件概率不等式:
- P(A | F_CS) < P(A | M_CS)
- P(A | F_EE) < P(A | M_EE)



即,在每个系内部,女性申请者的录取概率都低于男性申请者。

而校方的反驳可以表述为:
- P(A | (F_CS ∪ F_EE)) > P(A | (M_CS ∪ M_EE))

即,将两个系合并看待时,女性申请者的总体录取概率高于男性。



用具体数字验证可能性
现在,我们通过一组具体的数字来验证这种情况是否可能发生。




假设计算机科学系的录取情况如下:
- 女性申请者:1人申请,0人被录取。录取率 = 0/1 = 0%
- 男性申请者:100人申请,50人被录取。录取率 = 50/100 = 50%
- 显然,
0% < 50%,满足第一个不等式。


假设电气工程系的录取情况如下:
- 女性申请者:100人申请,70人被录取。录取率 = 70/100 = 70%
- 男性申请者:1人申请,1人被录取。录取率 = 1/1 = 100%
- 显然,
70% < 100%,满足第二个不等式。


现在,我们计算两个系合并后的总体录取率:
- 总体女性:申请总数 = 1 + 100 = 101,录取总数 = 0 + 70 = 70。总体录取率 = 70/101 ≈ 69.3%
- 总体男性:申请总数 = 100 + 1 = 101,录取总数 = 50 + 1 = 51。总体录取率 = 51/101 ≈ 50.5%
- 比较结果:
69.3% > 50.5%


结论:尽管在每个系里,女性的录取率都低于男性,但从整体上看,女性的总体录取率却高于男性。这证明了所述情况在数学上是完全可能的。
案例结果与思考
这位数学教授最终赢得了诉讼,获得了终身教职。




这个案例引发了更深层次的思考:
- 教授赢得官司,是因为她发现了大学数据中存在的逻辑悖论,还是因为她“滥用”统计学来赢得官司?
- 即使整体结果“公平”,但每个系都存在的录取率差异,是否本身就意味着不公平?
- 不同性别申请者向不同院系递交申请的数量分布,如何影响我们对“公平”的判断?


这些问题都可以通过统计学的工具进行更深入的探索。
本节总结
本节课我们一起学习了一个经典的统计悖论——辛普森悖论在现实生活中的体现(伯克利录取案)。我们了解到:
- 局部比较与整体比较可能得出相反结论。这是条件概率中一个需要警惕的现象。
- 数据聚合方式会影响分析结果。在查看统计数据时,必须清楚数据是如何被分组的。
- 相关关系不等于因果关系。录取率的差异可能由多种复杂因素(如申请者的专业选择偏好、背景等)导致,不能直接简化为性别歧视。




这个悖论提醒我们,在进行统计推断时,必须仔细审视数据的结构和条件,避免得出片面或错误的结论。在后续课程或练习中,我们还会遇到更多类似的例子。
027:随机变量基础 🎲

在本节课中,我们将学习随机变量的基本概念。随机变量是统计学和计算机科学中用于描述随机实验结果的数学工具。我们将通过一个简单的抛硬币实验来理解它的定义、性质以及如何计算其概率。
随机变量的定义
上一节我们介绍了计数和概率的基本概念。本节中,我们来看看如何用数学函数来描述随机实验的结果。
随机变量是一个函数,它将随机实验的每个可能结果映射到一个数值。例如,在抛硬币实验中,我们可以定义一个随机变量来表示出现正面的次数。
公式:设 Y 是一个随机变量,它表示在三次抛硬币实验中观察到正面的次数。Y 可以取值为 0、1、2 或 3。
计算随机变量的概率
为了理解随机变量的行为,我们需要计算它取每个可能值的概率。以下是计算这些概率的步骤。
计算 P(Y = 0)
首先,我们计算三次抛掷都没有出现正面的概率。这等价于三次都得到反面。
公式:P(Y = 0) = P(反面, 反面, 反面)
由于每次抛掷是独立的,且得到反面的概率是 1/2,因此:
代码:
P(Y = 0) = (1/2) * (1/2) * (1/2) = 1/8
计算 P(Y = 1)
接下来,我们计算恰好出现一次正面的概率。这有三种可能的情况:正面出现在第一次、第二次或第三次抛掷。
以下是所有可能的结果组合:
- 反面,反面,正面
- 反面,正面,反面
- 正面,反面,反面
每种特定序列(如“反面,反面,正面”)的概率都是 1/8。因此,总概率是这三种情况概率之和。
公式:P(Y = 1) = P({反面, 反面, 正面} ∪ {反面, 正面, 反面} ∪ {正面, 反面, 反面})
代码:
P(Y = 1) = (1/8) + (1/8) + (1/8) = 3/8
计算 P(Y = 2)
现在,我们计算恰好出现两次正面的概率。同样,这也有三种可能的序列。
以下是所有可能的结果组合:
- 反面,正面,正面
- 正面,反面,正面
- 正面,正面,反面
每种序列的概率是 1/8,总概率为三者之和。
代码:
P(Y = 2) = (1/8) + (1/8) + (1/8) = 3/8
计算 P(Y = 3)
最后,我们计算三次都出现正面的概率。只有一种序列:“正面,正面,正面”。
代码:
P(Y = 3) = (1/2) * (1/2) * (1/2) = 1/8
概率分布的性质

一个有效的随机变量,其所有可能取值的概率之和必须等于1。这确保了我们的概率模型覆盖了所有可能的结果。
公式:∑ P(Y = i) = 1,其中 i 取遍随机变量 Y 的所有可能值。
让我们验证我们例子中的随机变量 Y:
代码:
P(Y=0) + P(Y=1) + P(Y=2) + P(Y=3) = 1/8 + 3/8 + 3/8 + 1/8 = 1
计算结果为1,这证实了我们定义的随机变量 Y 及其概率是完整且正确的。
总结
本节课中我们一起学习了随机变量的基础。我们了解到随机变量是一个将实验结果数值化的函数。通过抛掷三枚硬币的例子,我们定义了随机变量 Y 为正面朝上的次数,并计算了它取0、1、2、3每个值的概率。最后,我们验证了所有概率之和为1,这是随机变量概率分布的一个基本性质。掌握这些概念是理解更复杂统计模型的关键第一步。
028:硬币抛掷随机变量 🪙










在本节课中,我们将学习如何为一个特定的抛硬币实验定义随机变量,并计算该随机变量取各个可能值的概率。我们将从一个具体的例子出发,逐步抽象化,最终得到一个通用的概率公式。


实验设定





上一节我们讨论了抛掷三次硬币的实验。本节中,我们来看看一个略有不同的实验。





我们进行一系列独立的抛硬币试验。每次抛掷,硬币出现正面的概率是 P。我们持续抛掷硬币,直到出现一次正面为止。但是,我们设定一个最大抛掷次数 n。这意味着,我们会在以下两个条件中先满足的那个时刻停止抛掷:
- 抛出了正面。
- 抛掷次数达到了预设的最大值 n。







定义随机变量





基于这个实验,我们定义一个随机变量 X。这个随机变量是一个函数,其输出值是硬币被抛掷的次数。




用公式表示,随机变量 X 定义为:
X = 抛掷硬币的次数(直到出现正面或达到最大抛掷次数 n)







计算概率分布






接下来,我们计算随机变量 X 取不同值时的概率。




当 X = 1 时




X = 1 意味着第一次抛掷就得到了正面。
这个事件的概率就是单次抛掷出现正面的概率 P。
因此:
P(X = 1) = P






当 X = 2 时





X = 2 意味着第一次是反面,第二次是正面。
第一次出现反面的概率是 1 - P,第二次出现正面的概率是 P。由于每次抛掷独立,概率相乘。
因此:
P(X = 2) = (1 - P) * P





当 X = 3 时



X = 3 意味着前两次是反面,第三次是正面。
概率为两次反面和一次正面概率的乘积。
因此:
P(X = 3) = (1 - P)² * P






寻找规律





观察以上结果,我们可以发现一个模式。






对于 X = k(其中 k 是 1, 2, 3, ..., n-1),要抛掷 k 次,意味着前 k-1 次都是反面,第 k 次是正面。
其概率公式为:
P(X = k) = (1 - P)^(k-1) * P






当 X = n 时的特殊情况




当 X = n 时,情况略有不同。它包含了两种可能的结果序列:
- 前 n-1 次是反面,第 n 次也是反面(此时因达到最大抛掷次数 n 而停止)。
- 前 n-1 次是反面,第 n 次是正面(此时因出现正面而停止)。







因此,我们需要计算这两种序列的概率之和。





以下是计算过程:
P(X = n) = P(前n-1次是反面,第n次是反面) + P(前n-1次是反面,第n次是正面)= (1 - P)^(n-1) * (1 - P) + (1 - P)^(n-1) * P= (1 - P)^(n-1) * [(1 - P) + P]= (1 - P)^(n-1) * 1= (1 - P)^(n-1)



所以,当随机变量取最大值 n 时,其概率公式为:
P(X = n) = (1 - P)^(n-1)





总结





本节课中,我们一起学习了如何为一个“抛硬币直到出现正面或达到最大次数”的实验定义随机变量 X,并完整推导了它的概率分布。




我们得到了以下核心公式:
- 对于 k = 1, 2, ..., n-1: P(X = k) = (1 - P)^(k-1) * P
- 对于 k = n: P(X = n) = (1 - P)^(n-1)

这个分布涵盖了随机变量 X 所有可能的取值(从 1 到 n),并给出了每个值对应的概率,从而完整描述了该实验的统计特性。
029:硬币抛掷证明过程 🪙










在本节课中,我们将学习如何验证一个离散随机变量的概率质量函数是否正确。我们将通过一个具体的例子——抛掷硬币直到出现正面——来演示如何证明所有可能结果的概率之和等于1,这是概率函数必须满足的基本条件。






上一节我们介绍了抛掷硬币直到出现正面这个实验,并推导了随机变量 X(表示首次出现正面所需的抛掷次数)的概率公式。本节中我们来看看如何验证这个公式的正确性。






我们之前计算得出,随机变量 X 等于 n 的概率为:
P(X = n) = p * (1-p)^{n-1}





其中,p 是单次抛掷出现正面的概率,n 是抛掷次数。





验证这个公式是否正确的唯一方法是,证明所有可能结果(即 n 从1到无穷大)的概率之和等于1。如果总和不为1,那么这个公式就是不正确的。








为了进行验证,我们首先需要理解一个关键概念:所有可能事件的并集的概率。对于我们的随机变量 X,所有可能事件的并集就是 X 取遍所有可能值的事件。





以下是计算概率之和的步骤:






- 首先,我们写出所有可能事件的并集及其概率。事件“X 取某个值”是互斥的(即不可能同时发生),因此并集的概率等于各个事件概率之和。
P(⋃_{i=1}^{n} {X = i}) = Σ_{i=1}^{n} P(X = i)






- 接下来,我们将之前推导的概率公式代入求和式中。为了便于计算,我们将求和上限设为 n-1,然后单独加上第 n 项。
Σ_{i=1}^{n} P(X = i) = Σ_{i=1}^{n-1} [p * (1-p)^{i-1}] + (1-p)^{n-1}





- 现在,我们需要计算这个求和式。我们注意到求和部分 Σ_{i=1}^{n-1} [p * (1-p)^{i-1}] 是一个几何级数(等比数列)。回忆几何级数的求和公式:
Σ_{i=0}^{m-1} a * r^{i} = a * (1 - r^{m}) / (1 - r)





- 为了应用这个公式,我们需要调整我们的求和式。令 a = p, r = (1-p), 并且注意到我们的求和下标是从 i=1 开始,而公式是从 i=0 开始。我们可以通过变量替换来适配公式。最终,应用几何级数求和公式,我们得到:
Σ_{i=1}^{n-1} [p * (1-p)^{i-1}] = p * [1 - (1-p)^{n-1}] / [1 - (1-p)]






- 对上式进行化简。分母 1 - (1-p) 等于 p。分子中的 p 与分母的 p 相消,得到:
1 - (1-p)^{n-1}






- 最后,我们将这个结果代回步骤2的总概率公式中:
总概率 = [1 - (1-p)^{n-1}] + (1-p)^{n-1} = 1






通过上述推导,我们证明了对于任意正整数 n,所有概率 P(X = i) 的和确实等于1。这验证了我们之前推导的概率质量函数 P(X = n) = p * (1-p)^{n-1} 是正确的。





本节课中我们一起学习了如何验证离散随机变量概率分布的正确性。我们通过抛掷硬币的实例,应用几何级数求和公式,严谨地证明了所有可能结果的概率之和为1。这个验证过程展示了概率论公理的实际应用,也巩固了我们对随机变量及其概率函数的理解。值得注意的是,在这个具体问题中,概率函数实际上只依赖于出现反面的次数 (1-p)^{n-1},这体现了该分布的特性。
030:期望值计算 📊

在本节课中,我们将学习概率论与统计学中的一个核心概念——期望值。期望值本质上是一个随机变量所有可能取值的加权平均,它回答了“平均而言,这个随机变量会是多少?”的问题。
什么是期望值?🤔
上一节我们介绍了随机变量的概念,本节中我们来看看如何计算它的“中心”或“平均”值,即期望值。
首先,每一个随机变量都有一个期望值。我们使用大写字母 E 来表示随机变量 X 的期望值,记作 E[X]。
从概念上讲,期望值是一个加权平均值。我们需要考虑随机变量所有可能的取值,并用每个值出现的概率对其进行“加权”。其计算公式如下:
E[X] = Σ (x_i * P(X = x_i))
其中:
- x_i 是随机变量 X 的第 i 个可能取值。
- P(X = x_i) 是 X 取值 x_i 的概率。
- Σ 表示对所有可能的 i 求和。
通过例子理解期望值 🎲
为了更清晰地理解这个概念,让我们看一个简单的例子。
假设我们投掷一枚公平的骰子。这个实验的随机变量 X 表示掷出的点数。
由于是公平骰子,掷出任何一点(1到6)的概率都是 1/6。现在,我们使用公式计算期望值:
E[X] = (1 * 1/6) + (2 * 1/6) + (3 * 1/6) + (4 * 1/6) + (5 * 1/6) + (6 * 1/6) = 21/6 = 3.5
计算结果 3.5 可能让你感到疑惑:骰子不可能掷出 3.5 点。这引出了期望值的一个关键点:它不一定等于随机变量可能的某个具体取值。就像计算数字 3 和 4 的平均值是 3.5 一样,期望值 3.5 代表了所有可能结果的平均水平或“平衡点”。
一个更复杂的例子:校车问题 🚌
让我们通过一个更贴近生活的例子来深化理解。
假设一个班级有 120 名学生,他们乘坐三辆巴士去参加活动:
- 巴士1:36 名学生
- 巴士2:40 名学生
- 巴士3:44 名学生
巴士到达后,我们随机选择一名学生。定义随机变量 X 为“被选中学生所乘坐巴士上的学生总数”。X 的可能取值只能是 36、40 或 44。
要计算 E[X],我们需要每个值对应的概率。选中巴士1上学生的概率是 36/120,巴士2是 40/120,巴士3是 44/120。
因此,期望值计算如下:
E[X] = (36 * 36/120) + (40 * 40/120) + (44 * 44/120)
简化计算后,结果约为 40.267。
期望值与平均值的区别 ⚖️
这个结果揭示了一个有趣的现象。如果我们简单地计算每辆巴士的平均学生数(120名学生 / 3辆巴士),结果是 40。

然而,我们计算出的期望值 ~40.267 却略高于这个简单平均值。这是为什么呢?
关键在于“加权”的过程。想象一个跷跷板或天平,两端的重量不同。较重的 44 名学生这个“权重”将平衡点(期望值)拉向了自己一侧。在期望值的计算中,学生人数多的巴士被选中的概率也更高(因为学生多),因此它对最终“平均”值的贡献更大,导致期望值偏向于较大的数字。
这完美诠释了期望值的本质:它寻找的是概率分布上的“重心”或“平衡点”,而不仅仅是数字的算术平均。
总结 📝
本节课中我们一起学习了期望值的核心概念。
- 定义:期望值 E[X] 是随机变量所有可能取值的概率加权平均。
- 公式:E[X] = Σ (x_i * P(X = x_i))。
- 理解:期望值代表长期实验的平均结果,是概率分布的“重心”,它不一定等于随机变量的某个具体可能值。
- 关键洞见:期望值受高概率结果的影响更大,这使其与简单算术平均值区分开来,尤其在数据分布不均匀时。
掌握期望值是理解许多高级统计概念(如方差、协方差及各种概率模型)的基础。
031:随机变量函数的期望

在本节课中,我们将学习如何计算一个随机变量函数的期望值。我们将通过一个具体的例子,展示如何从已知的随机变量出发,定义一个新的随机变量,并计算其期望值。
上一节我们介绍了随机变量期望值的基本概念,本节中我们来看看当期望值的目标不是一个随机变量本身,而是它的函数时,该如何处理。
核心概念:随机变量函数的期望
假设存在一个离散随机变量 X。如果我们将 X 输入到一个函数 g 中,那么输出 g(X) 也是一个随机变量。我们可以将这个新的随机变量记为 Y,即 Y = g(X)。
我们的目标是计算这个新随机变量 Y 的期望值,即 E[Y] 或 E[g(X)]。
计算步骤示例
为了理解如何计算,我们来看一个具体的例子。
假设我们有一个离散随机变量 X,其概率质量函数如下:
- 当 X = -1 时,概率 P(X = -1) = 0.2
- 当 X = 0 时,概率 P(X = 0) = 0.5
- 当 X = 1 时,概率 P(X = 1) = 0.3
现在,我们定义一个新的随机变量 Y,它是 X 的平方,即 Y = g(X) = X²。我们需要计算 Y 的期望值 E[Y]。
第一步:确定新随机变量 Y 的概率分布
由于 Y 本身也是一个随机变量,我们必须先找出它的所有可能取值及其对应的概率。
以下是确定 Y 概率分布的步骤:
- 找出 Y 的可能取值:由于 X 只能取 -1, 0, 1,那么 Y = X² 的可能取值是 0 和 1。
- 计算每个取值的概率:
- Y = 1 的情况:当 X = -1 或 X = 1 时,X² 都等于 1。因此,P(Y = 1) = P(X = -1) + P(X = 1) = 0.2 + 0.3 = 0.5。
- Y = 0 的情况:当 X = 0 时,X² 等于 0。因此,P(Y = 0) = P(X = 0) = 0.5。
现在,我们得到了新随机变量 Y 的概率质量函数:
- P(Y = 0) = 0.5
- P(Y = 1) = 0.5
第二步:计算 Y 的期望值
有了 Y 的概率分布,我们就可以像计算普通随机变量期望值一样来计算 E[Y]。公式为所有可能取值乘以其概率之和:
E[Y] = Σ [y * P(Y = y)]

将数值代入公式:
E[Y] = (0 * 0.5) + (1 * 0.5) = 0.5
因此,随机变量 Y = X² 的期望值 E[Y] = 0.5。
方法总结
本节课中我们一起学习了计算随机变量函数期望值的方法。整个过程可以总结为以下两个核心步骤:
- 定义新变量:根据函数 g 和原随机变量 X,定义新随机变量 Y = g(X)。
- 计算期望:确定 Y 的所有可能取值及其概率,然后使用期望值的基本公式 E[Y] = Σ [y * P(Y = y)] 进行计算。

关键在于,即使 Y 是 X 的函数,我们计算其期望值时,依然遵循“所有可能值乘以其概率权重后求和”这一根本原则,这与计算原随机变量 X 期望值的思想是完全一致的。
032:随机变量的方差 📊

在本节课中,我们将学习随机变量的另一个重要属性——方差。我们将探讨为什么仅靠期望值不足以完全描述一个随机变量,并学习方差的计算方法及其意义。
概述
上一节我们介绍了随机变量的期望值,它描述了随机变量的“中心”位置。本节中,我们来看看另一个关键属性——方差,它用于衡量随机变量取值围绕其期望值的“离散”或“扩散”程度。
为什么需要方差?
为了理解方差的重要性以及为什么仅靠期望值不够,我们可以看一个简单的例子。
假设有三个随机变量:W、Y 和 Z。它们的概率质量函数如下:
- 随机变量 W: 它只能取一个值 0,且概率为 1。即 P(W=0) = 1。
- 随机变量 Y: 它可以取两个值 -1 和 1,每个值的概率均为 0.5。即 P(Y=-1) = 0.5,P(Y=1) = 0.5。
- 随机变量 Z: 它可以取两个值 -100 和 100,每个值的概率均为 0.5。即 P(Z=-100) = 0.5,P(Z=100) = 0.5。
现在,计算这三个随机变量的期望值:
- E[W] = 0,因为其取值恒为 0。
- E[Y] = (-1)0.5 + (1)0.5 = 0。
- E[Z] = (-100)0.5 + (100)0.5 = 0。
可以看到,这三个描述完全不同现象的随机变量,其期望值却都是 0。如果只用期望值来描述它们,我们将无法区分它们之间的差异。显然,我们还需要一个度量来描述这些值围绕中心(期望值)的“扩散”程度。这个度量就是方差。
方差的定义
方差衡量的是随机变量取值与其期望值之间的平均平方距离。其正式定义如下:
对于一个随机变量 X,其期望值为 μ = E[X],则方差 Var(X) 定义为:
Var(X) = E[ (X - μ)² ]
这个公式的含义是:计算随机变量 X 的每个可能取值与期望值 μ 的偏差(距离),将其平方(以避免正负抵消),然后对所有可能取值求该平方偏差的加权平均(即期望值)。
方差的计算公式(替代形式)
根据期望值的性质,我们可以从上述定义推导出一个更便于计算的替代公式。
我们从定义开始推导:
- Var(X) = E[ (X - μ)² ]
- 展开平方项:= E[ X² - 2μX + μ² ]
- 根据期望的线性性质:= E[X²] - E[2μX] + E[μ²]
- 由于 μ 是常数(期望值),可以提到期望符号外:= E[X²] - 2μE[X] + μ²
- 因为 E[X] = μ,代入得:= E[X²] - 2μ² + μ²
- 简化后得到最终公式:Var(X) = E[X²] - (E[X])²
这个替代公式非常有用:
方差 = 随机变量平方的期望值 - 期望值的平方
重要提示:E[X²] 和 (E[X])² 是两个完全不同的量。前者是先对 X 的每个取值平方,再求平均;后者是先求 X 的平均值,再对这个平均值进行平方。
总结


本节课中我们一起学习了随机变量的方差。
- 我们了解到,仅靠期望值(中心位置)无法完全描述随机变量的行为,还需要方差来描述其取值的离散程度(扩散程度)。
- 方差 Var(X) 的正式定义是 E[ (X - μ)² ],即随机变量取值与期望值之差的平方的平均值。
- 我们推导出了一个更实用的计算公式:Var(X) = E[X²] - (E[X])²。这个公式在解决实际问题时通常更方便。
033:伯努利随机变量与质量函数 📊

在本节课中,我们将深入学习随机变量,特别是两种在统计学和计算机科学中极为常见的类型:伯努利随机变量和二项随机变量。我们将探讨它们的定义、概率质量函数以及如何在实际问题中应用它们。
伯努利随机变量
上一节我们介绍了随机变量的基本概念。本节中,我们来看看一种最简单的离散随机变量——伯努利随机变量。
伯努利随机变量描述的是只有两种可能结果的单次试验。通常,我们将这两种结果定义为“成功”和“失败”。
以下是伯努利随机变量的核心定义:
- 可能取值:我们将“成功”记为
1,“失败”记为0。 - 概率:设成功的概率为
p,则失败的概率为1-p。 - 公式:其概率质量函数可以简洁地表示为:
其中,P(X=1) = p P(X=0) = 1-pp的取值范围在0到1之间。
二项随机变量
理解了单次试验后,我们自然要扩展到多次独立重复试验的情况,这就引出了二项随机变量。
二项随机变量本质上是一系列独立的伯努利试验的总和。它由两个参数定义:
- n:独立试验的次数。
- p:单次试验中成功的概率。
以下是二项随机变量的核心概念:
- 概率质量函数:随机变量
X(表示n次试验中成功的次数)取值为i的概率由以下公式给出:
其中,P(X=i) = C(n, i) * p^i * (1-p)^(n-i)i = 0, 1, 2, ..., n,C(n, i)是组合数,表示从n次试验中选出i次成功的方式数。 - 验证:所有可能取值的概率之和必须为
1。利用二项式定理可以证明:Σ P(X=i) = [p + (1-p)]^n = 1^n = 1 - 期望与方差:二项随机变量的期望(均值)和方差有非常简洁的公式:
期望 E[X] = n * p 方差 Var(X) = n * p * (1-p)
应用示例:抛硬币
现在,我们通过一个具体例子来看看如何应用二项分布。
问题:抛掷一枚均匀硬币5次。设随机变量 X 为出现正面的次数,求 X 的概率质量函数。
解答:
这是一个典型的二项分布问题,参数为 n=5,p=0.5。
我们需要计算 X 从 0 到 5 每个取值的概率。
以下是具体的计算过程:
- X=0(全是反面):
P(X=0) = C(5,0) * (0.5)^0 * (0.5)^5 = 1 * 1 * 1/32 = 1/32 - X=1(恰好一次正面):
P(X=1) = C(5,1) * (0.5)^1 * (0.5)^4 = 5 * (1/2) * (1/16) = 5/32 - X=2:
P(X=2) = C(5,2) * (0.5)^2 * (0.5)^3 = 10 * (1/4) * (1/8) = 10/32 - X=3:
P(X=3) = C(5,3) * (0.5)^3 * (0.5)^2 = 10/32(由对称性) - X=4:
P(X=4) = C(5,4) * (0.5)^4 * (0.5)^1 = 5/32 - X=5(全是正面):
P(X=5) = C(5,5) * (0.5)^5 * (0.5)^0 = 1/32
因此,概率质量函数为:P(X) = [1/32, 5/32, 10/32, 10/32, 5/32, 1/32]。所有概率之和为 1,验证正确。
提示:当
p=0.5时,二项系数C(n, i)构成了著名的帕斯卡三角形。对于n=5,系数正是1, 5, 10, 10, 5, 1。
应用示例:产品质量检测
上一个例子中概率是对称的。现在,我们看一个概率不对称的实际情况。
问题:某公司生产螺丝,每个螺丝有 1% 的概率是次品。每包装有 10 个螺丝。公司承诺,若一包中次品数超过 1 个则退款。求需要退款的包裹比例。
解答:
参数:n=10,p=0.01。
设随机变量 X 为一包中的次品数。我们需要求 P(X >= 2)。
更简便的方法是计算其互补事件:
P(X >= 2) = 1 - P(X=0) - P(X=1)
以下是计算步骤:
- P(X=0):
P(X=0) = C(10,0) * (0.01)^0 * (0.99)^10 ≈ 0.9044 - P(X=1):
P(X=1) = C(10,1) * (0.01)^1 * (0.99)^9 ≈ 0.0914 - 最终结果:
P(X >= 2) = 1 - 0.9044 - 0.0914 ≈ 0.0043
因此,大约只有 0.43% 的包裹需要退款,这是一个很低的比率。
计算二项概率的递推方法
当 p ≠ 0.5 时,我们可以使用递推关系高效地计算一系列二项概率,而无需逐个计算组合数。
已知 P(X=k),可以通过以下公式计算 P(X=k+1):
P(X=k+1) = [ p/(1-p) ] * [ (n-k)/(k+1) ] * P(X=k)

示例:设 n=6,p=0.4,且已知 P(X=0) = (0.6)^6 ≈ 0.0467。
- 计算
P(X=1):
P(X=1) = (0.4/0.6) * (6/1) * P(X=0) = (2/3)*6*0.0467 ≈ 0.1866 - 计算
P(X=2):
P(X=2) = (0.4/0.6) * (5/2) * P(X=1) = (2/3)*2.5*0.1866 ≈ 0.3110
... 以此类推,直至计算出所有P(X=k)。
这种方法在编写程序或手动计算一系列概率时非常高效。
总结
本节课中我们一起学习了离散随机变量中两个最重要的类型。
- 我们首先定义了伯努利随机变量,它描述单次二元试验。
- 然后我们将其扩展为二项随机变量,它描述了
n次独立伯努利试验中成功的总次数。我们学习了它的概率质量函数、期望和方差公式。 - 我们通过“抛硬币”和“产品质量检测”两个例子,实践了如何应用二项分布解决实际问题。
- 最后,我们介绍了一种利用递推关系高效计算二项概率的方法,特别是在
p不等于0.5的情况下。

掌握二项分布是理解许多统计推断和机器学习算法的基础。接下来,我们将继续学习其他重要的离散分布,如泊松分布。
034:二项分布实例与进阶
在本节课中,我们将通过一个具体的次品检测实例,深入学习二项随机变量的应用。随后,我们将探讨二项分布的核心性质,并学习一种更通用的概率计算方法。
次品检测实例研究 🧪
上一节我们介绍了二项随机变量的基本概念,本节中我们来看看一个实际应用案例。
假设一家公司生产某种产品,每个产品有1%的概率是次品。因此,我们可以定义:
- 成功概率
p:产品为次品,p = 0.01 - 失败概率
1-p:产品合格,1-p = 0.99
公司进行独立测试,并提供退款保证:如果一个包含10个产品的包装中,至多只有1个是次品,则无需处理;如果次品数超过1个,公司则需要退款更换。问题是:公司需要更换的包装比例是多少?
我们首先定义随机变量:
- 设随机变量
X表示一个包装中次品螺丝的数量。 - 参数为:试验次数
n = 10,单次成功(次品)概率p = 0.01。
公司需要更换包装的情况是次品数超过1个,即 X > 1。其概率计算如下:
P(需要更换) = P(X > 1)= 1 - P(X ≤ 1)= 1 - [P(X=0) + P(X=1)]
根据二项分布概率公式 P(X=k) = C(n, k) * p^k * (1-p)^(n-k),我们可以进行计算:
P(X=0) = C(10, 0) * (0.01)^0 * (0.99)^10
P(X=1) = C(10, 1) * (0.01)^1 * (0.99)^9
将两者代入公式:
P(需要更换) = 1 - [C(10,0)*(0.01)^0*(0.99)^10 + C(10,1)*(0.01)^1*(0.99)^9]
计算结果约为 0.004。这意味着,大约只有0.4%的包装需要被更换,这对公司而言是非常有利的。
二项分布的核心性质 📊
在深入研究了具体实例后,我们来系统总结二项随机变量的几个关键性质。对于任何离散随机变量分布(如二项分布、泊松分布、超几何分布),我们通常关注以下三点:
- 概率质量函数:描述随机变量取每个可能值的概率的函数。
- 期望值:随机变量的平均值或长期预期结果。
- 方差:衡量随机变量取值与其期望值之间的离散程度。
对于参数为 n 和 p 的二项随机变量 X ~ Binomial(n, p),这三个性质的具体公式如下:
-
概率质量函数:
P(X = i) = C(n, i) * p^i * (1-p)^(n-i), 其中i = 0, 1, ..., n -
期望值:
E[X] = n * p -
方差:
Var(X) = n * p * (1-p)
书中和网络上都有这些公式的标准证明,它们对于理解二项分布的行为至关重要。
通用概率计算方法 🔄
之前我们介绍过在成功与失败概率相等(如抛掷公平硬币)时,可以利用帕斯卡三角等对称性来计算概率。然而,当 p ≠ 0.5 时,我们需要一种更通用的方法。
以下是计算二项分布累积概率的通用公式:
P(X ≤ i) = Σ_{k=0}^{i} [C(n, k) * p^k * (1-p)^(n-k)], 其中 i = 0, 1, ..., n
为了更高效地计算所有 P(X=k) 的值,我们可以利用一个递归关系。该关系表明,后一项概率可以通过前一项概率计算得出:

P(X = k+1) = [p/(1-p)] * [(n-k)/(k+1)] * P(X = k)
这个递推公式的证明在教材的相关命题中,我们通过一个例子来展示它的实用性。
假设有一个二项过程,参数为 n=6, p=0.4,且我们知道起始点 P(X=0) = 0.6^6。
以下是利用递归公式计算概率质量函数的过程:
-
计算
P(X=1):
P(X=1) = (0.4/0.6) * (6-0)/(0+1) * P(X=0) = (4/6) * (6/1) * P(X=0) -
计算
P(X=2):
P(X=2) = (0.4/0.6) * (6-1)/(1+1) * P(X=1) = (4/6) * (5/2) * P(X=1) -
依此类推,直到计算出
P(X=6)。
通过这种方式,我们可以依次算出 k=0 到 k=6 的所有概率。由于 p ≠ 0.5,最终得到的概率分布将不是对称的。计算完成后,务必验证所有概率之和是否等于1,这是检验计算正确性的有效方法。
总结 📝
本节课中我们一起学习了:
- 如何将二项分布应用于次品检测等实际问题,并计算相关概率。
- 二项分布的三个核心性质:概率质量函数、期望值(
E[X]=np)和方差(Var(X)=np(1-p))。 - 当成功概率与失败概率不相等时,如何利用递归公式高效地计算二项分布的所有概率值,从而构建完整的概率分布。

掌握二项分布是理解离散随机变量的重要一步。接下来,我们可以继续学习泊松分布、超几何分布等其他常见的离散分布,它们都遵循类似的分析模式:寻找概率质量函数、期望和方差。
035:离散随机变量 📊
在本教程中,我们将学习如何在R语言中处理和分析离散随机变量。我们将从基本概念入手,通过具体示例演示如何计算期望值、方差、概率质量函数和累积分布函数,并介绍如何使用R内置函数和自定义工具包来简化这些计算。
概述
上一节我们介绍了离散随机变量的理论概念。本节中,我们将使用R语言将这些概念付诸实践。我们将学习如何手动计算期望值和方差,然后利用R函数高效地完成相同任务,并通过一系列示例加深理解。
基本概念与手动计算
首先,我们从一个简单的例子开始:投掷一枚硬币三次,统计正面朝上的次数。这是一个离散随机变量。
样本空间包含8种等可能的结果。我们定义随机变量X为正面朝上的次数,其取值可以是0、1、2或3。对应的频率(或概率)如下:
- X = 0 的频率为 1/8
- X = 1 的频率为 3/8
- X = 2 的频率为 3/8
- X = 3 的频率为 1/8
在R中,我们可以这样设置并计算:
# 定义支持集(可能取值)和概率
x <- c(0, 1, 2, 3)
f <- c(1, 3, 3, 1) / 8# 计算期望值 (均值 mu)
mu <- sum(x * f)
# 输出:1.5# 计算方差
variance <- sum((x - mu)^2 * f)
# 输出:0.75# 计算标准差
std_dev <- sqrt(variance)
累积分布函数(CDF)是概率的累加和。我们可以使用 cumsum() 函数来计算:
# 计算累积分布函数 (CDF)
cdf <- cumsum(f)
# 输出:0.125 0.500 0.875 1.000
使用 discrete_distribution 函数
为了更高效地工作,我们可以使用自定义函数 discrete_distribution。它需要两个参数:support(支持集)和 prob(对应概率)。
以下是使用该函数完成相同计算的步骤:
# 定义离散分布
dist <- discrete_distribution(support = c(0, 1, 2, 3), prob = c(1, 3, 3, 1)/8)# 计算期望值
E(dist)
# 输出:1.5# 计算方差
V(dist)
# 输出:0.75# 计算标准差
SD(dist)

我们还可以计算概率质量函数(PMF)和累积分布函数(CDF)在特定点的值:
# 计算 PMF 在 x=2 的值
d(dist, 2)
# 输出:0.375# 计算 CDF 在 x=2 的值 (即 P(X <= 2))
p(dist, 2)
# 输出:0.875
此外,我们可以从这个分布中生成随机数:
# 生成10个来自该分布的随机数
r(dist, 10)
二项分布示例
二项分布是一种常见的离散分布。假设进行5次独立的公平硬币投掷,我们想得到正面朝上次数的PMF。
在R中,我们可以使用 binomial 类来处理:
# 创建二项分布对象,参数 n=5, p=0.5
bx <- binomial(size = 5, prob = 0.5)# 计算期望值、方差
E(bx)
V(bx)# 计算 x=2 时的 PMF 和 CDF
d(bx, 2)
p(bx, 2)# 生成随机数
r(bx, 30)# 绘制概率质量函数图
graph(bx)
# 以表格形式查看PMF
graph(bx, table = TRUE)
R基础包中也提供了函数 dbinom 和 pbinom 来实现相同的计算。
综合应用示例
现在,我们通过几个例子来综合运用以上知识。
示例1:抽球问题
一个罐子有20个编号1-20的球。随机无放回地抽取3个球。打赌至少有一个球的号码大于等于17。求赢赌的概率。
思路:计算至少一个球号码≥17的互补事件(所有球号码≤16)的概率。
# 定义样本空间:从20个球中无放回抽取3个的所有组合
S <- combn(20, 3) # 这是一个矩阵
# 样本空间大小
nrow(S) # 或使用组合数公式 choose(20,3) = 1140# 更高效的方法:使用概率空间(假设已加载相关工具函数)
# 这里我们计算互补事件概率:所有球号码 <= 16
# 从16个球(1-16)中抽取3个的组合数
favorable <- choose(16, 3)
total <- choose(20, 3)
prob_no_large <- favorable / total# 赢赌的概率是互补事件的概率
prob_win <- 1 - prob_no_large
# 输出:约 0.5088
示例2:掷公平骰子的方差
随机变量X代表掷一个公平六面骰子的结果。计算其方差。
dist_die <- discrete_distribution(support = 1:6, prob = rep(1/6, 6))
V(dist_die)
# 输出:2.916667
示例3:已知缺陷概率

已知某公司生产的螺丝有0.01的概率是缺陷的,且相互独立。公司以10个一包出售,并保证每包最多有1个缺陷螺丝。求公司需要退货换新的包裹比例。

思路:缺陷螺丝数量X服从二项分布 B(n=10, p=0.01)。需要替换的情况是X ≥ 2。计算P(X ≥ 2) = 1 - P(X ≤ 1)。


bx_defect <- binomial(size = 10, prob = 0.01)
prob_replace <- 1 - p(bx_defect, 1) # 1 - P(X <= 1)
# 输出:约 0.0043
示例4:泊松分布
假设书页上的印刷错误数服从参数 λ = 0.5 的泊松分布。求一页上至少有一个错误的概率。
思路:至少有一个错误即 P(X ≥ 1) = 1 - P(X = 0)。
px <- poisson(lambda = 0.5)
prob_at_least_one <- 1 - d(px, 0) # 或 1 - p(px, 0),因为P(X=0)就是CDF在0的值
# 输出:约 0.3935


示例5:放射性粒子计数
已知1克放射性材料在1秒内放出的α粒子数平均为3.2个,近似服从泊松分布。求不超过2个粒子出现的概率。
px_alpha <- poisson(lambda = 3.2)
prob_no_more_than_two <- p(px_alpha, 2)
# 输出:约 0.3799


总结

在本教程中,我们一起学习了如何在R语言中处理离散随机变量。我们从手动计算期望值和方差开始,逐步引入了 discrete_distribution 等便利函数来自动化这些计算。我们重点探讨了二项分布和泊松分布这两种重要的离散分布,并通过多个实际示例练习了如何计算概率质量函数(PMF)、累积分布函数(CDF)以及解决相关的概率问题。掌握这些工具将帮助你更高效地将统计理论应用于计算实践。
036:连续型随机变量 📊

在本节课中,我们将要学习连续型随机变量的概念。我们将探讨它与之前学过的离散型随机变量有何不同,并介绍其核心的数学描述工具——概率密度函数。




上一节我们介绍了离散型随机变量,本节中我们来看看连续型随机变量。

离散型随机变量的取值是可数的,例如掷骰子的点数。但现实世界中存在许多不可数的数值,例如时间。如果你跑完2英里用时12分钟,这个“12分钟”是精确的12分钟,还是12分0.1秒,或是12分0.0001毫秒?时间是连续的,其周围有无限多个可能的取值,无法一一计数。因此,对于时间这类连续的量,我们需要使用连续型随机变量来描述。

从样本空间到实数轴







随机变量是将样本空间中的事件映射到实数轴上的函数。例如,我女儿小时候为了够到高处的玩具,会叠放豆袋椅和凳子。这个事件本身没有数字,直到我们用“叠放的高度”这个规则将其映射为一个数值。

同样,对于跑步事件,我们通过“用时”这个规则,将其映射到时间轴上的一个数值。我们可以用一个函数 f(x) 来描述这个数值出现的频率或可能性。在图中,x轴可能代表时间,函数曲线的高低则表示该时间出现的可能性大小。








概率密度函数





我们称这个描述连续随机变量频率的函数为概率密度函数,简称 PDF。它与离散随机变量的概率质量函数类似,但存在关键差异。


首先需要理解的是,对于一个连续随机变量 X,取到某一个精确值的概率是多少?例如,概率 P(X = a) 是多少?
答案是 0。因为连续随机变量的取值有无限多种可能,取到其中某一个特定点的概率,在数学上等于无穷分之一,其极限为0。就像你永远无法通过“每次前进剩余距离的一半”这种方式精确到达终点一样。








既然无法计算单点的概率,我们就需要通过区间来评估概率。



概率即面积






对于连续随机变量,我们计算的是它落在某个区间 [a, b] 内的概率。这个概率在几何上等于概率密度函数曲线下,从 a 到 b 所围成的面积。





因此,概率的计算公式为:
P(a ≤ X ≤ b) = ∫[a, b] f(x) dx




这与离散随机变量形成对比。对于离散变量,概率质量函数像一系列“质量块”,区间概率是这些质量块的求和。而对于连续变量,概率密度函数是一条连续的曲线,区间概率是曲线下的积分(面积)。





概率密度函数的条件





一个函数 f(x) 要成为有效的概率密度函数,必须满足以下三个条件:





以下是三个必要条件:
- 总概率为1:函数曲线下的总面积必须等于1。这表示所有可能事件发生的总概率为100%。
∫[-∞, ∞] f(x) dx = 1 - 单点概率为零:如前所述,取任何特定值的概率为0。
P(X = a) = ∫[a, a] f(x) dx = 0 - 非负性:概率密度函数值必须永远大于或等于0,不能为负。
f(x) ≥ 0, 对所有 x 成立



本节课中我们一起学习了连续型随机变量的核心概念。我们了解到它与离散型随机变量的根本区别在于取值不可数,且单点概率为零。我们引入了概率密度函数作为描述工具,并知道概率通过计算PDF曲线下的面积(即积分)来获得。最后,我们明确了PDF必须满足的三个数学条件。理解这些是学习后续连续分布(如正态分布)的基础。
037:概率密度函数与累积分布函数


在本节课中,我们将学习概率密度函数和累积分布函数的核心概念。我们将从离散随机变量的概率质量函数和累积分布函数入手进行回顾,然后重点探讨连续随机变量的情况,并解释两者之间的关键区别与联系。
离散情况回顾
上一节我们介绍了离散随机变量的基本概念,本节中我们来看看其核心函数:概率质量函数和累积分布函数。
概率质量函数
概率质量函数描述了离散随机变量取每个特定值的概率。对于随机变量X,其PMF记作 P(X = x)。
以下是PMF的关键特性:
- 所有可能取值的概率之和必须等于1。
- 计算随机变量落在区间 [a, b] 内的概率,只需将区间内所有可能取值的概率相加。
累积分布函数
累积分布函数描述了随机变量取值小于或等于某个特定值的概率。对于随机变量X,其CDF记作 F(x) = P(X ≤ x)。
以下是CDF的定义公式:
F(x) = Σ P(y),其中求和针对所有满足 y ≤ x 的y值。
CDF是一个从0单调递增至1的阶梯函数。通过CDF,我们可以直接读取“X小于等于某值”的概率。
连续情况引入
理解了离散情况后,我们现在将概念扩展到连续随机变量。核心区别在于,连续随机变量取任意单个具体值的概率为0,我们转而关注它在某个区间内的概率。
概率密度函数
在连续情况下,我们使用概率密度函数代替概率质量函数。PDF记作 f(x)。
以下是PDF的关键特性:
- PDF曲线下的总面积必须等于1,即 ∫_{-∞}^{∞} f(x) dx = 1。
- PDF在某点的值不是概率,而是概率密度。计算随机变量落在区间 [a, b] 内的概率,需要计算PDF在该区间下的面积。

计算区间概率的公式为:
P(a ≤ X ≤ b) = ∫_{a}^{b} f(x) dx
连续累积分布函数
连续随机变量的累积分布函数定义与离散情况类似,但将求和替换为积分。
CDF的定义公式为:
F(x) = P(X ≤ x) = ∫_{-∞}^{x} f(t) dt
CDF F(x) 给出了从负无穷累积到x点的概率总量。它是一个从0到1的平滑递增函数。
核心关系与重要说明
了解了PDF和CDF各自的定义后,我们来看看它们之间深刻的内在联系。
根据微积分基本定理,PDF和CDF互为微积分运算的逆过程:
- CDF是PDF的积分:F(x) = ∫ f(x) dx
- PDF是CDF的导数:f(x) = dF(x)/dx
这意味着,在PDF最高的区域,CDF的增长斜率也最大,即概率累积得最快。
以下是关于连续概率的两个重要推论:
- 对于任意具体值a,有 P(X = a) = 0。因此,在连续情况下,P(X < a) 与 P(X ≤ a) 是等价的。
- CDF通常直接给出“小于”某值的概率。若想求“大于”某值的概率,可利用互补原理:P(X > b) = 1 - F(b),或通过积分计算:P(X > b) = ∫_{b}^{∞} f(x) dx。
总结
本节课中我们一起学习了概率密度函数和累积分布函数。我们从离散随机变量的PMF和CDF出发进行回顾,然后重点转移到连续随机变量,引入了PDF作为描述概率分布的工具,以及CDF作为累积概率的函数。我们掌握了计算区间概率的方法,并理解了PDF与CDF通过微积分基本定理建立的导数与积分关系。最后,我们明确了连续随机变量取单点概率为零的特性,以及如何利用CDF计算“大于”某值的概率。这些概念是理解连续概率分布的基础。
038:密度函数应用案例 📊


在本节课中,我们将通过一个具体的例子,学习如何应用概率密度函数(PDF)来解决实际问题。我们将使用一个关于教授讲课时间的案例,来演示如何确定密度函数中的未知常数,以及如何计算特定事件的概率。
概述
我们将分析一个场景:一位大学教授的讲课时间总是超过整点,但会在整点后的两分钟内结束。我们定义变量 X 为从整点结束到讲课结束所经过的时间。假设 X 的概率密度函数(PDF)为 f(x) = kx²,其中 0 ≤ x ≤ 2,否则为0。我们的目标是:
- 确定常数 k 的值。
- 绘制对应的密度曲线。
- 计算讲课在整点后一分钟内结束的概率。
确定常数 k 的值
上一节我们介绍了概率密度函数的基本概念。本节中,我们来看看如何利用其核心性质来确定未知参数。
概率密度函数的一个关键性质是:整个定义域上的曲线下总面积必须等于1。这可以用以下公式表示:
[
\int_{-\infty}^{\infty} f(x) , dx = 1
]
在我们的例子中,函数 f(x) 仅在区间 [0, 2] 上非零。因此,我们可以将积分范围限制在这个区间上:
[
\int_{0}^{2} kx^2 , dx = 1
]
以下是求解 k 的步骤:
- 计算积分:[ \int kx^2 , dx = k \cdot \frac{x^3}{3} ]
- 代入积分上下限:[ \left[ k \cdot \frac{x^3}{3} \right]_{0}^{2} = k \cdot \frac{2^3}{3} - k \cdot \frac{0^3}{3} = \frac{8k}{3} ]
- 令其等于1:[ \frac{8k}{3} = 1 ]
- 解得:[ k = \frac{3}{8} ]
因此,完整的概率密度函数为:
[
f(x) =
\begin{cases}
\frac{3}{8}x^2 & \text{for } 0 \leq x \leq 2 \
0 & \text{otherwise}
\end{cases}
]
计算特定事件的概率
确定了密度函数后,我们就可以用它来计算事件的概率。对于连续型随机变量,概率等于密度函数在相应区间上的积分。
现在,我们来计算“讲课在整点后一分钟内结束”的概率。这对应的事件是 X < 1。其概率计算如下:
[
P(X < 1) = \int_{0}^{1} f(x) , dx = \int_{0}^{1} \frac{3}{8}x^2 , dx
]
以下是计算过程:
- 提出常数:[ \frac{3}{8} \int_{0}^{1} x^2 , dx ]
- 计算积分:[ \int x^2 , dx = \frac{x^3}{3} ]
- 代入上下限:[ \frac{3}{8} \left[ \frac{x^3}{3} \right]_{0}^{1} = \frac{3}{8} \cdot \left( \frac{1^3}{3} - \frac{0^3}{3} \right) ]
- 简化计算:[ \frac{3}{8} \cdot \frac{1}{3} = \frac{1}{8} ]
所以,讲课在整点后一分钟内结束的概率是 1/8。

总结
本节课中我们一起学习了概率密度函数的实际应用。我们通过一个教授讲课时间的案例,完整地演示了如何:
- 利用“总面积等于1”的性质,求解密度函数中的未知常数 k。
- 通过积分密度函数,计算连续型随机变量在某个区间内取值的概率。

这个例子清晰地展示了如何将概率密度函数的理论性质应用于解决具体的统计问题。掌握这些步骤,是理解和运用连续概率分布的基础。
039:连续随机变量的均值与期望 📊






在本节课中,我们将要学习连续随机变量的两个核心概念:期望值和方差。我们将探讨它们的定义、直观含义以及计算方法,并理解它们与离散随机变量中对应概念的联系与区别。






连续随机变量的期望值




上一节我们介绍了连续随机变量的概念。本节中,我们来看看如何衡量它的“中心”或“平均值”。对于连续随机变量,我们不称之为“均值”,而称之为期望值。



对于离散随机变量,期望值的计算是求和:每个可能的值乘以其对应的概率质量,然后相加。其公式为:
E[X] = Σ [x * P(X=x)]



对于连续随机变量,这个思路是相似的,只是将求和替换为积分,将概率质量函数替换为概率密度函数。连续随机变量X的期望值公式为:
E[X] = ∫ x * f(x) dx
其中,f(x) 是X的概率密度函数,积分在整个定义域上进行。


为了理解这个公式,我们可以看一个离散的例子。假设掷一个公平的六面骰子,每个面出现的概率是1/6。期望值计算为:
(1 * 1/6) + (2 * 1/6) + ... + (6 * 1/6) = 3.5
这个过程是将每个值按其出现的频率(概率)进行加权平均。对于连续分布,我们无法这样“数数”,但思想完全一致:我们用积分代替求和,用密度代替质量,来计算一个加权平均值。
期望值的直观含义是:如果我们从这个分布中反复抽样无数次,这些样本的长期平均值就会趋近期望值。例如,如果一个人每天跑两英里,他的跑步时间分布期望值是12分钟,那么长期来看,他的平均跑步时间就会在12分钟左右。









期望值的性质:函数的期望



有时我们需要计算随机变量某个函数的期望值。例如,将跑步时间乘以3再减去5。这该如何计算?
方法很简单:只需将期望值公式中的 x 替换为函数 g(x) 即可。随机变量X的函数 g(X) 的期望值公式为:
E[g(X)] = ∫ g(x) * f(x) dx
这表示我们是对函数值 g(x) 进行加权平均,权重仍然是概率密度 f(x)。







连续随机变量的方差





了解了数据的“中心”后,我们还需要知道数据围绕这个中心分散的程度。这就是方差。



对于离散随机变量,方差是每个值与期望值之差的平方,再乘以其概率质量,然后求和。公式为:
Var(X) = Σ [(x - E[X])^2 * P(X=x)]

同样地,对于连续随机变量,我们将求和替换为积分,将概率质量替换为概率密度。连续随机变量X的方差公式为:
Var(X) = ∫ (x - E[X])^2 * f(x) dx
方差有时也记作 σ²。







为什么方差要计算平方差?



你可能会问,为什么要计算平方的期望,而不是直接计算差值 (x - E[X]) 的期望?




以下是原因:
- 避免正负抵消:观测值可能分布在期望值的两侧,有的差值为正,有的为负。如果直接求和,正负差值会相互抵消,总和为零,这无法衡量离散程度。
- 绝对值的局限性:一个自然的想法是使用绝对值
|x - E[X]|来避免抵消。然而,绝对值函数在零点不可导(有一个“尖点”),这在数学处理上,特别是使用微积分时,会带来不便。 - 平方的优势:对差值进行平方
(x - E[X])^2同样能使所有值变为非负,同时它产生的是一个平滑的二次函数,非常适合进行积分等微积分运算。因此,历史上统计学家选择了平方差来定义方差。





标准差:方差的直观尺度



方差有一个问题:由于我们对差值进行了平方,方差的单位是原始数据单位的平方。例如,如果跑步时间的单位是分钟,方差的单位就是“分钟²”,这很难直观理解。


为了解决这个问题,我们引入了标准差。标准差是方差的平方根:
σ = √Var(X)


标准差的直观含义是:它大致描述了观测值到期望值的“平均距离”。它和原始数据具有相同的单位,因此更容易理解和解释数据的离散程度。





总结





本节课中我们一起学习了连续随机变量的两个核心数字特征:
- 期望值:衡量随机变量分布的中心趋势或长期平均值。计算公式为
E[X] = ∫ x * f(x) dx。 - 方差:衡量随机变量取值围绕期望值的离散程度。计算公式为
Var(X) = ∫ (x - E[X])^2 * f(x) dx。使用平方差是为了数学处理的便利。 - 标准差:是方差的平方根
σ = √Var(X),提供了与原始数据同单位的、更直观的离散度度量。



理解期望值和方差是进行更复杂统计推断的基础,它们分别描述了数据分布的位置和形状。
040:均匀分布实例解析 📊






在本节课中,我们将通过一个连续随机变量的例子来学习均匀分布。我们将推导其概率密度函数、期望值和方差,并理解其在实际场景中的应用。


概述





我们将分析一个连续随机变量,并使用均匀分布作为例子。均匀分布的特点是,在某个区间内的所有值出现的可能性均等。


均匀分布的定义



均匀分布的概率密度函数图像是一个矩形。它表示在区间 [A, B] 内的所有值都是等可能出现的。

推导概率密度函数




现在,我们面临一个挑战性问题:概率密度函数 f(x) 在区间 A < x < B 内等于什么?以下是几个选项:
- A:
B - B:
(B - A) / 2 - C:
1 / (B - A) - D: 以上都不是




请暂停视频,根据你对概率密度函数性质的理解,尝试推导出正确答案。


(假设你已经思考完毕)


现在,我们使用一个“排除法”提示。选项A和B是不正确的。如果你选择了它们,请再思考一下。


正确答案是 C:1 / (B - A)。



我们是如何得到这个答案的呢?根据概率密度函数的性质,其在整个定义域上的积分(即曲线下的总面积)必须等于1。



对于均匀分布,这个面积是一个矩形:
- 高度 是概率密度函数值
f(x)。 - 宽度 是区间长度
(B - A)。



因此,面积公式为:
f(x) * (B - A) = 1
解这个方程,得到:
f(x) = 1 / (B - A)



这个推导过程展示了如何利用概率密度函数的基本性质(总面积为1、非负性、单点概率为0)来求解未知的分布参数。




计算期望值


上一节我们推导了均匀分布的概率密度函数,本节中我们来看看如何计算它的期望值(均值)。



随机变量 X 的期望值 E[X] 定义为:
E[X] = ∫(从 A 到 B) x * f(x) dx

其中 f(x) = 1 / (B - A)。

所以:
E[X] = ∫(从 A 到 B) x * [1 / (B - A)] dx


这是一个简单的积分计算。请暂停视频,尝试自己完成这个计算。



(计算过程)
E[X] = 1/(B-A) * ∫(从 A 到 B) x dx = 1/(B-A) * [ (1/2)x^2 ] (从 A 到 B)
= 1/(B-A) * (1/2)(B^2 - A^2) = (B^2 - A^2) / [2(B-A)]






利用平方差公式 B^2 - A^2 = (B - A)(B + A),可得:
E[X] = [(B - A)(B + A)] / [2(B - A)] = (A + B) / 2


因此,均匀分布的期望值就是区间 [A, B] 的中点。这与我们的直观理解相符:所有值等可能出现,平均值自然落在正中间。

计算方差与标准差


知道了期望值,我们接下来计算均匀分布的方差,它衡量了数据的离散程度。
方差 Var(X) 的计算公式为:
Var(X) = E[(X - E[X])^2] = ∫(从 A 到 B) (x - E[X])^2 * f(x) dx


将 E[X] = (A+B)/2 和 f(x) = 1/(B-A) 代入公式。请暂停视频,尝试写出完整的积分表达式。







完整的积分表达式为:
Var(X) = ∫(从 A 到 B) [x - (A+B)/2]^2 * [1/(B-A)] dx



通过计算这个积分(过程略),我们可以得到方差的结果:
Var(X) = (B - A)^2 / 12
这个结果很有意思:方差与区间宽度 (B-A) 的平方成正比。区间越宽,数据越分散,方差越大;区间越窄,数据越集中,方差越小。这完全符合我们的直觉。至于为什么除以12,这是一个由积分计算得出的常数。
标准差 σ 是方差的平方根:
σ = sqrt(Var(X)) = (B - A) / sqrt(12)



总结与应用





本节课中,我们一起学习了连续均匀分布。我们不仅了解了它的形状,更重要的是,我们实践了如何运用概率密度函数的性质来:
- 推导具体的密度函数
f(x) = 1/(B-A)。 - 计算其期望值
E[X] = (A+B)/2。 - 计算其方差
Var(X) = (B-A)^2/12和标准差。


你应该能够将这种方法应用到其他更复杂的分布中去。
为什么使用均匀分布? 它很好地表达了“所有可能性均等”的概念。一个典型的例子是:如果你在某个公交站等一辆每15分钟一班的公交车,并且你没有看时间,那么你的等待时间 X 就服从区间 [0, 15] 分钟上的均匀分布。在0到15分钟之间的任意等待时长都是等可能的。




关键要点:对于连续随机变量,我们通过概率密度函数来描述它,并利用积分来计算其期望值和方差。这是处理任何连续分布的基础方法。
041:累积分布函数详解 📊








在本节课中,我们将要学习一个连接离散随机变量与连续随机变量的核心概念——累积分布函数。我们将探讨它的定义、直观含义、数学表达以及与概率质量函数和概率密度函数的关系。




概述




累积分布函数是一个统一的概念,它允许我们在离散和连续随机变量之间进行比较。它通过“累积”概率的方式,为我们提供了一种描述随机变量取值小于或等于某个特定值的概率的工具。



从PMF和PDF到CDF



上一节我们介绍了概率质量函数和概率密度函数。本节中我们来看看累积分布函数如何将它们联系起来。



对于离散随机变量,我们有一个概率质量函数。它看起来像一系列柱状图,每个柱子的高度代表该点对应的概率值。我们称之为PMF。


对于连续随机变量,我们有一个概率密度函数。以均匀分布为例,它在区间[a, b]上是一条水平的直线,我们称之为PDF。
累积分布函数的作用是随时间累积信息。它累积从最低的x值到当前x值的概率总和。



以下是离散随机变量的CDF形成过程:
- 在到达第一个概率质量点之前,累积概率为0。
- 当到达第一个概率质量点时,累积概率会瞬间“跳跃”到该点的概率值。
- 在到达下一个概率质量点之前,累积概率保持这个值不变。
- 当到达下一个点时,累积概率会再次跳跃,增加该点的概率值。
- 这个过程持续进行,直到最后一个点,累积概率最终达到1。
因此,离散随机变量的CDF是一个阶梯函数。




对于连续随机变量,其CDF的形成过程则不同:
- 在点a之前,累积概率为0。
- 从点a到点b,由于概率密度是常数,我们持续地“添加”概率切片。
- 累积概率以恒定的速率线性增长。
- 在点b之后,累积概率达到1并保持不变。

因此,对于均匀分布,其CDF是一条从0到1的斜线。如果概率密度不是常数,CDF的斜率就会变化,形成更复杂的曲线。




CDF的核心定义与解释




累积分布函数,用大写字母 F(x) 表示,其核心定义是:它给出了随机变量X取值小于或等于某个特定值x的概率。


对于连续随机变量,这一定义可以用积分公式精确描述:
F(x) = P(X ≤ x) = ∫_{-∞}^{x} f(t) dt




这个公式是本节课最重要的概念。它意味着F(x)的值等于概率密度函数f(t)曲线下,从负无穷到x点所围成的面积。你需要仔细理解这一点:CDF在x点的值,直接对应着PDF曲线下左侧的总面积。



对于离散随机变量,其定义是类似的,但使用求和代替积分:
F(x) = P(X ≤ x) = Σ_{k ≤ x} P(X = k)


即,对所有小于等于x的k值,将其对应的概率质量相加。



CDF的值域具有重要性质:无论对于离散还是连续随机变量,其累积分布函数F(x)的取值范围总是在0和1之间。这是因为概率的总和(或积分)为1。


CDF与PDF/PMF的关系




现在,让我们更深入地看看CDF与之前学过的函数之间的关系。


对于连续随机变量,CDF和PDF通过微积分基本定理紧密相连。我们刚刚看到,CDF是PDF的积分。反之,PDF是CDF的导数:
f(x) = dF(x)/dx



导数的几何意义是斜率。这解释了为什么均匀分布的CDF是一条斜线(斜率恒定),而其PDF是一条水平线(导数为常数)。PDF描述了概率发生的“速率”,而CDF则累积了这些速率产生的“总量”。



对于离散随机变量,PMF与CDF的关系则体现在“跳跃”上。CDF在某个点x的“跳跃高度”,恰好等于PMF在该点x的概率值P(X = x)。而在连续情况下,在任意单点上的概率P(X = x) = 0。

总结




本节课中我们一起学习了累积分布函数。我们了解到:
- CDF 是一个统一框架,用于描述离散和连续随机变量的概率累积行为。
- 它的定义是 F(x) = P(X ≤ x),表示随机变量小于等于x的概率。
- 对于连续变量,CDF是PDF的积分(
F(x) = ∫_{-∞}^{x} f(t) dt);PDF是CDF的导数(f(x) = dF(x)/dx)。 - 对于离散变量,CDF是PMF的累加和(
F(x) = Σ_{k ≤ x} P(X = k)),其图形是阶梯函数。 - CDF的值域始终在 [0, 1] 区间内。





理解累积分布函数是掌握概率分布如何工作的关键一步,它为后续学习更多的统计方法和概率模型奠定了坚实的基础。
042:正态分布理论 📊



在本节课中,我们将要学习统计学中最重要的概率分布——正态分布。我们将从标准正态分布开始,了解其定义、性质、密度函数,并探讨其为何如此重要。







标准正态分布



上一节我们介绍了概率分布的基本概念,本节中我们来看看正态分布。正态分布,也称为高斯分布,是统计学中最核心的分布。我们首先从标准正态分布开始。





标准正态分布记作 N(0, 1)。这里的两个参数分别表示:
- 均值 (μ) = 0
- 方差 (σ²) = 1



其概率密度函数 (PDF) 的公式如下:


f(x) = (1 / √(2π)) * e^(-x²/2)




这个函数描述了一个著名的“钟形曲线”。






理解密度函数


现在,我们来直观地理解这个密度函数。函数的核心部分是 e^(-x²/2)。我们可以通过以下步骤来构建它:


- 首先考虑 x²,这是一个开口向上的抛物线。
- 然后考虑 -x²/2,这相当于将抛物线沿x轴翻转并缩放,得到一个开口向下的抛物线。
- 最后应用指数函数 e^(-x²/2),这个操作将抛物线“转换”为我们熟悉的钟形曲线。



那么,公式前面的常数 1/√(2π) 有什么作用呢?以下是关于概率密度函数的一个关键事实:
概率密度函数曲线下的总面积必须等于1。
常数 1/√(2π) 的作用正是对函数 e^(-x²/2) 进行缩放,确保从负无穷到正无穷的积分面积恰好为1。因此,我们称这个常数为缩放常数。










正态分布的重要性



为什么正态分布比均匀分布等其他分布更重要?主要有两个原因:
1. 中心极限定理
这是最重要的原因。中心极限定理指出,无论原始数据来自何种分布(可以是均匀分布,甚至是极度偏斜的分布),只要我们从该分布中抽取足够多的样本(通常30个或以上),计算这些样本的平均值,那么这些平均值的分布将趋近于正态分布。这使得我们能够对来自任何分布的数据的典型行为进行推断。
2. 自然与人类行为的普遍性
正态分布在自然界和人类行为中极为常见。例如:
- 人群的身高分布
- 人群的智商分布
- 任务的完成时间分布
- 几乎任何涉及人类表现或特征的度量,其分布通常都接近正态。









期望与方差及推广


对于标准正态分布,其数字特征我们已经知道:
- 期望值 E[X] = 0
- 方差 Var(X) = 1

正是这两个特征定义了“标准”正态。


当然,并非所有正态分布都围绕0对称。例如,考试成绩的分布可能围绕90分左右。因此,我们需要一般正态分布,记作 N(μ, σ²),其中:
- μ 是均值,决定了分布的中心位置。
- σ² 是方差,决定了分布的离散程度。







总结


本节课中我们一起学习了正态分布理论的核心内容。我们首先认识了标准正态分布 N(0, 1) 及其钟形曲线的密度函数。我们理解了密度函数中缩放常数的作用是保证总概率为1。接着,我们探讨了正态分布极其重要的两个原因:中心极限定理保证了样本均值的正态性,以及其在现实世界中的广泛存在性。最后,我们了解了如何通过均值μ和方差σ²将标准正态推广到一般正态分布 N(μ, σ²)。掌握正态分布是理解许多统计推断方法的基础。
043:正态分布应用实例 📊



在本节课中,我们将通过一个具体的例子,学习如何计算正态分布下的概率。我们将使用标准正态分布,并演示如何利用R语言等工具来求解积分问题。




上一节我们介绍了正态分布的基本概念和概率密度函数。本节中我们来看看如何应用这些知识解决实际问题。

假设我们有一个变量 x,它服从均值为0、标准差为1的标准正态分布。我们想问的问题是:x 小于 1/3 的概率是多少?



为了回答这个问题,我们需要计算从负无穷到 1/3 的曲线下面积。这对应于概率密度函数从负无穷到 1/3 的积分。
该积分的数学表达式如下:

P(x < 1/3) = ∫_{-∞}^{1/3} (1/√(2π)) * e^(-x²/2) dx
正如之前提到的,这个积分计算起来非常复杂,无法直接手算。传统方法可能需要查表,而现代方法则使用统计软件。
我们将使用R语言来完成这个计算。在R中,计算标准正态分布累积概率的函数是 pnorm()。
以下是计算 P(x < 1/3) 的R代码:
pnorm(1/3, mean = 0, sd = 1)

运行这段代码,我们得到的结果大约是 0.6306。这意味着变量 x 取值小于 1/3 的概率约为 63.06%。





现在,让我们考虑一个相关但不同的问题:x 大于 1/3 的概率是多少?


请暂停视频,思考一下如何利用我们已经知道的结果来求解这个问题。

(暂停)

好的,假设你已经思考完毕。我们知道整个概率密度曲线下的总面积等于1。我们已经计算出 x 小于 1/3 的概率(即左侧面积)是 0.6306。
那么,x 大于 1/3 的概率(即右侧面积)就是总面积减去左侧面积。

因此,计算公式为:
P(x > 1/3) = 1 - P(x < 1/3) = 1 - 0.6306 = 0.3694


所以,变量 x 取值大于 1/3 的概率约为 36.94%。



本节课中我们一起学习了如何计算标准正态分布下的概率。我们通过一个具体例子,演示了如何利用积分概念定义概率,并借助R语言的 pnorm() 函数进行实际计算。我们还利用概率总和为1的性质,从一个概率推导出另一个互补事件的概率。掌握这些方法是理解和应用正态分布的关键步骤。
044:其他分布与风险率函数 📊

在本节课中,我们将学习几种新的概率分布,并引入一个重要的概念——风险率函数。之前我们已经讨论了均匀分布和正态分布,现在我们将把注意力转向指数分布、伽马分布和威布尔分布。课程最后,我们会介绍风险率函数的概念及其应用。
指数分布 ⏳
上一节我们介绍了正态分布,本节中我们来看看指数分布。指数分布通常用于描述事件之间的间隔时间,例如客户到达的间隔时间或设备故障的间隔时间。
指数分布的概率密度函数(PDF)由以下公式定义:
f(x) = λe^{-λx}, 其中 x ≥ 0
这里的 λ 是率参数,它表示单位时间内事件发生的平均次数。指数分布具有“无记忆性”,这意味着未来事件发生的概率与过去已经过去的时间无关。
以下是关于指数分布的一些关键点:
- 期望值(均值):E[X] = 1/λ
- 方差:Var(X) = 1/λ²
- 累积分布函数(CDF):F(x) = 1 - e^{-λx}

伽马分布与威布尔分布 🔧


在了解了指数分布之后,我们接下来介绍伽马分布和威布尔分布。这两种分布是更一般的模型,常用于对等待时间、寿命数据和可靠性工程进行建模。

伽马分布可以看作是多个独立的指数分布随机变量之和的分布。它的概率密度函数涉及伽马函数,并有两个参数:形状参数 α 和率参数 β。

威布尔分布在可靠性分析和生存研究中非常常用,因为它可以描述故障率随时间变化(增加、减少或恒定)的情况。其概率密度函数为:
f(x) = (k/λ) * (x/λ)^{k-1} * e{-(x/λ)k}, 其中 x ≥ 0
参数 k 是形状参数,λ 是尺度参数。当 k=1 时,威布尔分布就简化为指数分布。
风险率函数 ⚠️
最后,我们引入一个与生存分析和可靠性密切相关的核心概念:风险率函数,也称为故障率函数。


风险率函数 h(t) 描述的是:在某个时间点 t 之前系统或部件尚未发生故障的条件下,在接下来瞬间发生故障的瞬时概率。其数学定义为:


h(t) = f(t) / S(t)
其中:
- f(t) 是概率密度函数(PDF)。
- S(t) = 1 - F(t) 是生存函数,表示存活到时间 t 之后的概率。
风险率函数可以帮助我们理解故障模式:
- 常数风险率(如指数分布):故障风险不随时间变化。
- 递增风险率:部件随着老化,故障风险增加。
- 递减风险率:系统在初期运行后,故障风险降低。



本节课中我们一起学习了指数分布、伽马分布和威布尔分布的基本概念及其应用场景。更重要的是,我们引入了风险率函数这一关键工具,它为我们分析系统或部件的可靠性提供了强大的理论框架。理解这些分布和概念,对于处理计算机科学中的性能分析、队列理论和系统可靠性建模等问题至关重要。
045:使用R语言处理连续随机变量 📊
在本节课中,我们将学习如何使用R编程语言来处理连续随机变量,特别是正态分布。我们将通过一个具体的例子,演示如何计算给定参数下随机变量落在某个区间内的概率。
上一节我们介绍了连续随机变量的理论基础,本节中我们来看看如何利用R软件进行实际计算。
准备工作 🛠️

首先,我们需要清除R的工作空间,以确保从一个干净的环境开始。这可以通过运行以下命令实现:
rm(list = ls())
运行此命令后,工作空间将被清空。在本练习中,我们主要使用脚本窗口输入命令,并在控制台查看结果,暂不使用RStudio的全局环境或其他高级功能。
计算正态分布的概率 📈
现在,我们来看一个具体的例子。假设随机变量X服从正态分布,其均值(mean)为3,方差(variance)为9。我们的第一个问题是:求X的值落在2和5之间的概率,即 P(2 < X < 5)。
在R中,我们使用 pnorm 函数来计算正态分布的累积分布函数(CDF)值。pnorm(q, mean, sd) 返回的是随机变量取值小于或等于 q 的概率。
以下是计算步骤:
- 首先计算 P(X ≤ 5)。
- 然后减去 P(X ≤ 2)。
- 两者的差值即为 P(2 < X < 5)。
需要注意的是,pnorm 函数需要标准差(standard deviation)作为参数,而不是方差。标准差是方差的平方根。本例中,方差为9,因此标准差为3。
以下是实现该计算的R代码:
# 计算 P(X <= 5)
prob_le_5 <- pnorm(5, mean = 3, sd = 3)# 计算 P(X <= 2)
prob_le_2 <- pnorm(2, mean = 3, sd = 3)# 计算 P(2 < X < 5) = P(X <= 5) - P(X <= 2)
prob_between_2_and_5 <- prob_le_5 - prob_le_2
prob_between_2_and_5
运行这段代码,你将得到结果约为 0.3780。这个结果与教科书中的答案一致,并且比传统查表法得到的结果更为精确。
关于查表法的说明 📖
在计算机普及之前,人们通常使用标准正态分布表(Z表)来查找概率。教科书中的方法通常是教你如何将任何正态分布转换为标准正态分布(均值为0,标准差为1),然后查表。而R的 pnorm 函数直接为我们完成了所有计算,更加方便和准确。
总结 🎯
本节课中我们一起学习了如何使用R语言处理连续随机变量中的正态分布问题。我们掌握了:
- 使用
rm(list = ls())清空工作空间。 - 使用
pnorm函数计算正态分布的累积概率。 - 通过概率相减的方法计算随机变量落在某个区间内的概率。
- 理解了直接使用R计算比传统查表法更便捷、更精确。


通过这个简单的例子,你应该能够举一反三,利用R解决其他涉及正态分布的概率计算问题。
046:联合分布概述

在本节课中,我们将学习联合分布的核心概念。我们将探讨如何描述和分析涉及两个或更多随机变量的概率模型,这是理解复杂随机现象的关键一步。
上一节我们介绍了单随机变量的概率分布,本节中我们来看看当涉及两个随机变量时,情况会如何变化。
课程大纲
我们将按以下顺序展开学习:
- 联合分布:理解两个随机变量同时取值的概率模型。
- 边缘分布:从联合分布中提取单个随机变量的分布。
- 条件分布:在已知一个随机变量取值的条件下,另一个随机变量的分布。
- 随机变量的独立性:判断两个随机变量是否相互影响。
从单变量到多变量
回顾我们之前学过的离散型单随机变量分布。例如,对于一个随机变量 X,其分布可能如下表所示:
| X | f(x) |
|---|---|
| 0 | 0.50 |
| 1 | 0.20 |
| 2 | 0.30 |
这里,f(x) = P(X = x),且所有概率之和为1:∑ f(x) = 1。
然而,许多现实过程涉及两个或更多同时发生的随机事件。我们不仅关心单个变量的行为,更希望研究它们之间的关系。
以下是几个涉及两个随机变量的例子:
- 大学年数与修读学分:研究学生所在年级(离散)与其当前学期修读学分(离散)之间的关系。
- 球员身高与比赛得分:分析篮球运动员的身高(连续)与其在一场比赛中得分(离散)之间是否存在关联。
- 每日吸烟数量与星期几:观察一个人每天吸的雪茄数量(离散)是否与一周中的某天(离散)有关。
- 公交车接载时间与司机咖啡因摄入量:探讨公交车到站时间(连续)与司机体内咖啡因含量(连续)之间的潜在联系。
- 药物剂量与血液浓度:研究服用药物的剂量(连续)与其在血液中的测量浓度(连续)之间的关系。
请注意,这些例子中,有些变量是离散的,有些是连续的。因此,联合分布的概念将同时涵盖离散和连续两种情况。
联合分布的概念
那么,联合分布具体是什么样子呢?让我们先看一个离散型的例子。

假设我们有两个离散随机变量 X 和 Y,它们可能的取值都是 {1, 2, 3}。它们的联合概率质量函数可以表示如下:
| Y=1 | Y=2 | Y=3 | |
|---|---|---|---|
| X=1 | 0 | 1/6 | 1/6 |
| X=2 | 1/6 | 1/6 | 1/6 |
| X=3 | 1/6 | 1/6 | 0 |
上表中每个单元格的值 P(X=x, Y=y) 代表了 X 和 Y 同时取特定值的概率。例如,P(X=1, Y=2) = 1/6。所有可能组合的概率之和必须等于1。
在单变量情况下,概率分布沿着一条线(一个维度)展开。而在双变量的联合分布中,概率分布在一个平面(两个维度)上展开。如果我们考虑三个随机变量,概率将分布在一个立方体(三个维度)中。理论上,这个概念可以推广到任意多个随机变量(n维),尽管可视化会变得困难,但数学原理是相通的。在本课程中,我们将主要讨论二维或三维的情况,但其思想适用于更高维度。
为了处理连续型联合分布,我们需要借助微积分中的工具——二重积分。二重积分的形式如下:
∬_R f(x, y) dx dy
其中,f(x, y) 是联合概率密度函数,R 是积分区域。这将帮助我们计算涉及两个连续随机变量的概率。
总结
本节课中我们一起学习了联合分布的初步概念。我们了解到:
- 联合分布用于描述两个或更多随机变量同时发生的概率结构。
- 现实世界中有许多同时涉及离散和连续变量的例子。
- 离散型联合分布可以用表格表示,所有概率之和为1。
- 联合分布将概率的视角从单变量(线)扩展到了多变量(面、体)。
- 分析连续型联合分布需要用到二重积分。
在接下来的章节中,我们将深入探讨如何从联合分布中提取边缘分布和条件分布,并学习判断随机变量独立性的方法。
047:联合分布 📊

在本节课中,我们将要学习联合分布的基本概念。联合分布用于描述两个或多个随机变量同时发生的概率。我们将通过一个具体的例子来理解离散型随机变量的联合概率质量函数,并学习如何从中推导出单个变量的边缘分布。
联合分布的类型
上一节我们介绍了随机变量的概念,本节中我们来看看联合分布的具体类型。根据随机变量的类型,联合分布主要分为两种。
如果随机变量 X 和 Y 是离散型的,那么我们讨论的是联合概率质量函数。
如果随机变量 X 和 Y 是连续型的,那么我们讨论的是联合概率密度函数。
一个离散型联合分布的例子
为了更好地说明这个概念,我们来看一个使用概率质量函数的例子。
假设一个制造商生产一种矩形装置。这个矩形有长度和宽度。虽然长度和宽度通常是连续变量,但在这个制造过程中,只有特定的长度和宽度是可能的。因此,我们将其视为离散过程。
我们定义:
- 令 X 表示长度。
- 令 Y 表示宽度。
以下是可能的取值:
- X 的可能值为:129, 130, 131。
- Y 的可能值为:15, 16。
由于我们定义了 X 和 Y 的整个取值空间,这变成了一个离散过程。所有可能的 (X, Y) 组合总数为 3 × 2 = 6 种。
我们可以用一个表格来表示这个联合概率分布:
| X (长度) | Y (宽度) | 概率 |
|---|---|---|
| 129 | 15 | 0.12 |
| 129 | 16 | 0.08 |
| 130 | 15 | 0.42 |
| 130 | 16 | 0.28 |
| 131 | 15 | 0.06 |
| 131 | 16 | 0.04 |
在这个二维概率空间中,所有概率之和必须等于 1。我们可以问一些问题,例如,哪个 (X, Y) 组合出现的概率最高?答案是 (130, 15),其概率为 0.42。而 (131, 16) 出现的概率最低,为 0.04。
我们可以将联合概率写成一个函数。例如,f(129, 15) = 0.12。
从联合分布推导边缘分布
有时我们只关心其中一个变量的概率分布,例如只关心 X 的分布或只关心 Y 的分布。我们可以通过“求和”的方式从联合分布中推导出来。
假设我们想求 X = 129 的概率。由于 Y 也是变量,我们需要对 Y 的所有可能取值求和,同时保持 X = 129 不变。
计算过程如下:
P(X=129) = P(X=129, Y=15) + P(X=129, Y=16) = 0.12 + 0.08 = 0.20
我们可以为 X 的所有可能取值进行同样的计算,从而得到 X 的边缘概率分布。
以下是 X 的边缘分布计算过程:
- P(X=129) = 0.12 + 0.08 = 0.20
- P(X=130) = 0.42 + 0.28 = 0.70
- P(X=131) = 0.06 + 0.04 = 0.10
这个分布的和为 0.20 + 0.70 + 0.10 = 1,符合概率分布的要求。
同样地,我们可以计算 Y 的边缘分布。请尝试自己计算一下。
以下是 Y 的边缘分布计算过程:
- P(Y=15) = 0.12 + 0.42 + 0.06 = 0.60
- P(Y=16) = 0.08 + 0.28 + 0.04 = 0.40
这个分布的和也为 1。
边缘分布的含义

一个有趣且直观的术语是“边缘分布”。如果你观察我们计算的表格,这些求和得到的概率值恰好写在表格的边缘(即最右边一列和最下面一行)。因此,从联合分布中通过求和得到的单个变量的分布,就被称为边缘分布。
在离散型随机变量的情况下,确保联合概率总和为 1,并且每个变量的边缘分布总和也为 1,是验证计算正确性的重要方法。

本节课中我们一起学习了联合分布的基本概念,区分了离散型与连续型联合分布,并通过一个制造矩形装置的例子,详细讲解了如何构建离散型联合概率质量函数,以及如何从中推导出单个随机变量的边缘分布。理解联合分布和边缘分布是分析多个变量之间关系的基础。
048:联合概率空间与联合概率质量函数 📊

在本节课中,我们将要学习联合概率质量函数(Joint PMF)的核心概念、性质及其应用。我们将通过一个具体的例子,演示如何从实际问题中构建联合概率分布,并计算边际分布和期望值。
联合概率质量函数的定义与性质
上一节我们介绍了离散随机变量的基本概念。本节中,我们来看看当涉及两个离散随机变量时,如何描述它们的联合分布。
联合概率质量函数用于描述两个离散随机变量同时取特定值的概率。我们将其表示为 f_{X,Y}(x, y),其含义是随机变量 X 取值 x 且随机变量 Y 取值 y 的概率。
以下是联合概率质量函数必须满足的三个基本性质:
-
概率值范围:对于所有可能的
x和y,函数值必须在 0 到 1 之间。即:
0 ≤ f_{X,Y}(x, y) ≤ 1 -
归一性:所有可能组合的概率之和必须等于 1。这是概率分布的基本要求。公式表示为:
∑_x ∑_y f_{X,Y}(x, y) = 1
如果不满足此条件,则它不是一个有效的概率质量函数。 -
明确含义:函数
f_{X,Y}(x, y)直接等价于概率P(X = x, Y = y)。
边际概率质量函数
理解了联合分布后,我们常常需要关注其中一个变量的分布,而忽略另一个变量。这就是边际分布。
如果我们从联合分布 f_{X,Y}(x, y) 中想得到随机变量 X 的分布(边际分布),我们需要对另一个变量 Y 的所有可能取值求和。公式如下:
f_X(x) = ∑_y f_{X,Y}(x, y)
同理,要得到随机变量 Y 的边际分布,则对 X 的所有可能取值求和:
f_Y(y) = ∑_x f_{X,Y}(x, y)
得到边际分布后,我们就可以像处理单个随机变量一样,计算其期望值、方差等统计量。
实例分析:电池抽样问题
现在,让我们通过一个具体例子来应用以上概念。假设我们有一个袋子,里面装有:
- 3 节新电池
- 4 节旧电池(功能正常)
- 5 节缺陷电池
我们不放回地随机抽取 2 节电池。定义随机变量:
X= 抽到的新电池数量Y= 抽到的旧电池数量
我们的目标是:
- 找出联合概率分布
f_{X,Y}(x, y)。 - 计算抽到新电池数量的期望值
E[X]。
首先,注意到一个约束条件:因为总共只抽 2 节电池,所以新电池和旧电池的数量之和不能超过 2,即 X + Y ≤ 2。这个条件将限制可能的 (x, y) 组合。
样本空间总数为从 12 节电池中抽取 2 节的组合数:C(12, 2) = 66。
以下是计算联合概率的几种可能情况:
-
情况 1:
f_{X,Y}(0, 0)(无新电池,无旧电池)
这意味着抽到的 2 节电池都来自 5 节缺陷电池。
概率 =C(5, 2) / C(12, 2) = 10 / 66 -
情况 2:
f_{X,Y}(0, 1)(无新电池,1 节旧电池)
1 节来自 4 节旧电池,1 节来自 5 节缺陷电池。
概率 =[C(4, 1) * C(5, 1)] / C(12, 2) = 20 / 66 -
情况 3:
f_{X,Y}(0, 2)(无新电池,2 节旧电池)
2 节都来自 4 节旧电池。
概率 =C(4, 2) / C(12, 2) = 6 / 66 -
情况 4:
f_{X,Y}(1, 0)(1 节新电池,无旧电池)
1 节来自 3 节新电池,1 节来自 5 节缺陷电池。
概率 =[C(3, 1) * C(5, 1)] / C(12, 2) = 15 / 66 -
情况 5:
f_{X,Y}(1, 1)(1 节新电池,1 节旧电池)
1 节来自 3 节新电池,1 节来自 4 节旧电池。
概率 =[C(3, 1) * C(4, 1)] / C(12, 2) = 12 / 66 -
情况 6:
f_{X,Y}(2, 0)(2 节新电池,无旧电池)
2 节都来自 3 节新电池。
概率 =C(3, 2) / C(12, 2) = 3 / 66
其他组合如 (2,1), (1,2), (2,2) 因不满足 X + Y ≤ 2 而概率为 0。
我们可以将完整的联合概率分布整理成下表:
f_{X,Y}(x, y) |
Y=0 (旧电池数) | Y=1 | Y=2 |
|---|---|---|---|
| X=0 (新电池数) | 10/66 | 20/66 | 6/66 |
| X=1 | 15/66 | 12/66 | 0 |
| X=2 | 3/66 | 0 | 0 |
验证:所有概率之和 = (10+20+6+15+12+3)/66 = 66/66 = 1,符合归一性。
计算边际分布与期望值
现在,我们想计算抽到新电池数量 X 的期望值 E[X]。首先需要 X 的边际概率质量函数 f_X(x)。
根据公式 f_X(x) = ∑_y f_{X,Y}(x, y),我们对每一行(固定 x)求和:
f_X(0)= 10/66 + 20/66 + 6/66 = 36/66f_X(1)= 15/66 + 12/66 + 0 = 27/66f_X(2)= 3/66 + 0 + 0 = 3/66
验证:36/66 + 27/66 + 3/66 = 1。
得到边际分布后,即可计算期望值 E[X]:
E[X] = ∑_x x * f_X(x) = 0*(36/66) + 1*(27/66) + 2*(3/66) = 33/66 = 0.5
因此,从该袋中不放回地抽取 2 节电池,预期会得到 0.5 节新电池。这个结果直观上也是合理的,因为新电池只占总数的 3/12 = 0.25,抽取 2 节的期望值就是 2 * 0.25 = 0.5。
总结


本节课中我们一起学习了联合概率质量函数的核心内容。我们首先明确了联合PMF的定义和三条基本性质。接着,我们介绍了如何从联合分布中通过求和得到单个变量的边际分布。最后,我们通过一个完整的电池抽样实例,演示了如何从实际问题出发,构建联合概率分布表,计算边际分布,并最终求得随机变量的期望值。掌握这些步骤是理解多变量离散分布并进行相关计算的基础。
049:联合密度函数与概率密度函数 📊

在本节课中,我们将要学习连续型随机变量的联合概率密度函数。我们将探讨其定义、核心性质,并通过一个具体的粒子运动例子来演示如何验证和应用这些概念。
上一节我们介绍了离散型随机变量的联合概率质量函数。本节中我们来看看连续型随机变量的情况。
对于连续型随机变量,我们使用联合概率密度函数来描述其联合分布。这是一个概率密度函数。在联合分布的世界里,这个PDF具有一些特定的性质。这些性质与离散情况下的性质在直觉上相似,但我们将使用不同的数学工具(积分)来进行计算。
以下是联合概率密度函数需要满足的核心性质:
- 非负性:函数值必须大于或等于0。即
f(x, y) >= 0。 - 归一性:对整个定义域的积分必须等于1。即
∫∫ f(x, y) dx dy = 1。如果不满足,则该函数不是一个有效的PDF。 - 区域概率:对于二维空间中的任意区域R,随机变量(X, Y)落在该区域内的概率等于联合密度函数在该区域上的二重积分。即
P((X, Y) ∈ R) = ∫∫_R f(x, y) dx dy。
之前讨论的所有概念在此仍然适用,只是我们现在是在连续而非离散的二维空间中进行操作。理解这些概念的最佳方式依然是看一个例子。
让我们来看一个例子。假设有一个粒子在空间中运动。我们想要对这个粒子的运动进行建模。我们假设该粒子在一个有边界的区域内运动。
在这个案例中,区域R由两条线界定:
- 直线
x = 1 - 直线
y = x
这个区域就是粒子被限制在其内运动的范围。我们想知道的是这个粒子位于空间中某处的联合概率。
我们已知粒子的联合概率密度函数为 f(x, y) = 8xy。这意味着,给定粒子在XY坐标系中的位置,我可以根据这个函数告诉你粒子出现在该位置附近的概率密度。这个函数对于所有位于区域R内的(x, y)点有效。有了这个联合密度函数,我们就可以计算许多东西。
首先,我们需要验证这确实是一个有效的概率密度函数。根据性质二,我们需要对整个定义域进行积分,其结果应为1。
为了进行积分,我们需要先确定积分区域。区域R是一个三角形区域,由x轴(y=0)、直线x=1和直线y=x围成。
因此,我们的积分设置如下:
∫(从x=0到x=1) ∫(从y=0到y=x) 8xy dy dx
计算这个二重积分,结果确实等于1。所以,f(x, y) = 8xy 在区域R上是一个有效的PDF。
接下来,我们可以计算各种概率。例如,假设我想知道粒子位于以下坐标范围内的概率:X在0.5到1之间,Y在0到0.5之间。
这很简单,我只需要将这些值作为积分的上下限:
P(0.5 < X < 1, 0 < Y < 0.5) = ∫(从x=0.5到x=1) ∫(从y=0到y=0.5) 8xy dy dx
计算可得,这个概率等于0.375。
现在,考虑另一个概率:P(0.5 < X < 1, 0.5 < Y < 1)。如果你尝试计算这个概率,可能会遇到问题。计算结果是1.125,这违反了概率必须小于等于1的性质。
问题出在哪里?当我们设定Y在0.5到1之间,X在0.5到1之间时,我们考虑的区域有一部分(例如点(0.5, 1))实际上位于原始定义域R之外(因为当x=0.5时,y不能大于0.5)。因此,这不是一个在给定模型下有效的概率陈述,因为它包含了不可能发生的事件(粒子出现在允许区域外)。


本节课中我们一起学习了连续型随机变量联合概率密度函数的核心概念与性质。我们通过一个具体的例子,演示了如何验证一个函数是否为有效的PDF,以及如何计算粒子落在特定区域内的概率。同时,我们也看到了确保概率计算在随机变量有效定义域内进行的重要性。在接下来的课程中,我们将探讨如何计算此类联合分布的期望值。
050:期望值与边缘分布 📊

在本节课中,我们将学习如何从联合概率密度函数出发,通过计算边缘分布来求解随机变量的期望值。我们将使用一个具体的例子,逐步演示整个过程。
概述
我们有一个已定义的联合概率密度函数,需要从中找出随机变量 X 的期望值。为此,我们必须先找到 X 的边缘概率密度函数,然后利用该函数计算期望值。
回顾联合概率密度函数
上一节我们验证了一个联合概率密度函数。该函数定义为:
f(x, y) = 8xy
其定义域 R 由以下条件界定:
- x = 1
- y = x
- x 和 y 在区域 R 内
在这个区域内,该函数定义了一个有效的概率质量函数。
计算 X 的边缘概率密度函数
为了找到 X 的期望值,我们首先需要找到 X 的边缘概率密度函数。在连续型随机变量的情况下,这通过对另一个变量(这里是 Y)进行积分来实现。
边缘概率密度函数 f_X(x) 的计算公式如下:
f_X(x) = ∫ f(x, y) dy
在我们的例子中,变量 Y 的取值范围是 0 ≤ y ≤ x,而变量 X 的取值范围是 0 ≤ x ≤ 1。因此,我们可以进行积分计算:
f_X(x) = ∫ (从 0 到 x) 8xy dy
计算这个积分:
= 4x * y² | (从 0 到 x)
= 4x * (x² - 0)
= 4x³
于是,我们得到了 X 的边缘概率密度函数为 f_X(x) = 4x³。
计算 X 的期望值
现在我们已经有了 X 的边缘分布,可以计算其期望值 E[X] 了。在连续情况下,期望值是通过积分计算的,其公式为:
E[X] = ∫ x * f_X(x) dx
将我们得到的边缘分布代入公式:
E[X] = ∫ (从 0 到 1) x * (4x³) dx
= ∫ (从 0 到 1) 4x⁴ dx
= (4x⁵ / 5) | (从 0 到 1)
= 4/5
因此,随机变量 X 的期望值为 4/5。这意味着,在该概率分布下,粒子在 X 方向坐标的预期位置是 0.8。
扩展到 Y 的期望值
如果我们还想知道粒子在 Y 方向坐标的预期位置,即计算 E[Y],过程是完全类似的。
以下是需要遵循的步骤:
- 首先,通过对 X 积分,求出 Y 的边缘概率密度函数 f_Y(y)。
- 然后,使用公式 E[Y] = ∫ y * f_Y(y) dy 计算期望值。
这个过程与计算 E[X] 所遵循的模式完全相同。结合 E[X] 和 E[Y],我们就能得到粒子在整个二维空间中位置的预期坐标。
总结
本节课我们一起学习了如何从联合概率密度函数计算随机变量的期望值。关键步骤是:
- 通过对其他所有变量积分,找到目标变量的边缘概率密度函数。
- 利用公式 E[变量] = ∫ 变量 * 边缘概率密度函数 d(变量) 计算期望值。


我们通过一个具体例子 f(x, y) = 8xy 演示了计算 X 期望值的过程,并指出了计算 Y 期望值的平行路径。掌握这个方法对于理解多元随机变量的性质至关重要。
051:联合概率密度函数例题解析 📊

在本节课中,我们将通过一个具体的例题,综合运用之前所学的关于联合概率密度函数、期望值以及定义域的所有知识。我们将逐步解析如何根据给定的联合概率密度函数,求解其中的未知常数,并最终计算随机变量X的期望值。
问题概述
我们被给定一个联合概率密度函数(PDF),其形式为:
f(x, y) = C * (y² - x²) * e⁻ʸ
其中,C是一个未知常数。随机变量X和Y的定义域为:
- -y ≤ x ≤ y
- 0 ≤ y < ∞
我们的目标是:首先确定常数C的值,然后计算随机变量X的期望值E[X]。
第一步:求解常数C 🧮
由于f(x, y)是一个联合概率密度函数,它在整个定义域上的积分必须等于1。这是求解未知常数C的关键方程。
以下是求解步骤:
-
建立积分方程:
根据PDF的性质,我们有:
∫∫ f(x, y) dx dy = 1 -
代入函数与定义域:
将函数和定义域的上下限代入方程:
1 = ∫₀^∞ ∫_{-y}^{y} C * (y² - x²) * e⁻ʸ dx dy -
先对x进行内层积分:
我们将首先计算内层关于x的积分。
内层积分:∫_{-y}^{y} C * (y² - x²) * e⁻ʸ dx
由于e⁻ʸ在关于x的积分中可视为常数,计算过程如下:- 求原函数:C * e⁻ʸ * [y²x - (x³/3)]
- 代入上下限y和-y进行计算:
- 上限(y):C * e⁻ʸ * [y³ - (y³/3)] = C * e⁻ʸ * (2y³/3)
- 下限(-y):C * e⁻ʸ * [-y³ - (-y³/3)] = C * e⁻ʸ * [-y³ + (y³/3)] = C * e⁻ʸ * (-2y³/3)
- 上限值减下限值,得到内层积分结果:
C * e⁻ʸ * (2y³/3) - C * e⁻ʸ * (-2y³/3) = (4/3) * C * y³ * e⁻ʸ
-
再对y进行外层积分:
现在,我们需要计算外层积分:
1 = ∫₀^∞ (4/3) * C * y³ * e⁻ʸ dy
这是一个从0到无穷的广义积分。我们通过取极限来计算:
1 = lim_{a→∞} ∫₀ᵃ (4/3) * C * y³ * e⁻ʸ dy -
计算积分并求解C:
计算定积分∫ y³ * e⁻ʸ dy(例如使用分部积分法或查表),然后代入极限。最终,当a→∞时,包含e⁻ᵃ的项会趋于0。经过计算,我们得到:
1 = 8C
因此,常数C的值为:
C = 1/8
第二步:计算X的期望值E[X] 🎯
上一节我们成功求得了联合PDF中的常数C。本节中,我们来看看如何计算随机变量X的期望值。
期望值E[X]的公式为:
E[X] = ∫ x * f_X(x) dx
其中,f_X(x)是X的边缘概率密度函数,需要通过联合PDF对Y积分得到。
以下是计算步骤:
-
求X的边缘概率密度函数f_X(x):
边缘PDF通过对所有可能的y值积分获得:
f_X(x) = ∫ f(x, y) dy = ∫₀^∞ (1/8) * (y² - x²) * e⁻ʸ dy
计算这个积分,我们得到:
f_X(x) = (1/8) * (2 - x²)
注意:此结果仅在x满足原始定义域(即|x| ≤ y)的相应范围内有效,但幸运的是,在后续计算期望值时,积分区间会自然处理这一点。 -
建立期望值积分式:
现在,将f_X(x)代入期望值公式。由于x的定义域依赖于y(-y ≤ x ≤ y),我们直接在原始的x-y联合定义域上积分更为方便:
E[X] = ∫∫ x * f(x, y) dx dy = ∫₀^∞ ∫_{-y}^{y} x * (1/8) * (y² - x²) * e⁻ʸ dx dy -
先对x进行内层积分:
我们计算内层积分:
内层积分:∫_{-y}^{y} (1/8) * x * (y² - x²) * e⁻ʸ dx- 求原函数:(1/8) * e⁻ʸ * [ (y²x²)/2 - (x⁴)/4 ]
- 代入上下限y和-y:
- 代入x = y: (1/8) * e⁻ʸ * [ (y⁴)/2 - (y⁴)/4 ] = (1/8) * e⁻ʸ * (y⁴/4)
- 代入x = -y: (1/8) * e⁻ʸ * [ (y⁴)/2 - (y⁴)/4 ] = (1/8) * e⁻ʸ * (y⁴/4)
- 由于上下限的x值(y和-y)代入后函数值相同,相减结果为:
(1/8) * e⁻ʸ * (y⁴/4) - (1/8) * e⁻ʸ * (y⁴/4) = 0
-
得出最终结果:
内层积分的结果为0,因此无论外层关于y的积分如何,最终结果都是:
E[X] = 0
总结 📝

本节课中我们一起学习了如何完整处理一个联合概率密度函数的问题。
- 求解归一化常数:我们利用联合PDF在全定义域上积分为1的性质,通过两步积分成功解出了未知常数 C = 1/8。
- 计算期望值:我们通过先求边缘PDF再积分,或直接在联合定义域上积分的方法,计算了随机变量X的期望值。由于被积函数x * f(x, y)是关于x的奇函数(在对称区间[-y, y]上积分),最终得出 E[X] = 0。
这个例题展示了处理联合分布问题的标准流程:确定定义域、利用归一化条件求解常数、最后根据目标(如求期望、方差、边缘分布等)进行相应的积分计算。
052:条件联合概率分布 📊

在本节课中,我们将学习条件概率分布。我们将从回顾事件的条件概率概念开始,然后将其扩展到涉及多个随机变量的情况,特别是联合分布。我们将通过一个具体的例子来演示如何计算条件概率分布,并理解其与边际分布的关系。
回顾事件的条件概率
上一节我们介绍了联合概率分布。本节中,我们来看看如何将条件概率的概念应用到随机变量上。
首先,回忆一下在单一事件背景下条件概率的定义。如果有事件A和事件B,那么给定B发生的条件下A发生的概率,记作 P(A|B),其计算公式为:
P(A|B) = P(A ∩ B) / P(B)
这个公式表示,事件A在事件B已发生条件下的概率,等于事件A与事件B同时发生的概率(即它们的交集概率),除以事件B发生的概率。
扩展到随机变量的条件概率分布
现在,当我们讨论随机变量及其联合分布时,我们希望将同样的条件化思想应用到两个随机变量上,例如 X 和 Y。
假设我们有两个随机变量 X 和 Y,它们具有联合概率密度函数(或概率质量函数) f_{X,Y}(x, y)。
那么,给定 X 取某个特定值 x 的条件下,随机变量 Y 的条件概率分布定义为:
f_{Y|X}(y | x) = f_{X,Y}(x, y) / f_X(x)
其中:
- f_{X,Y}(x, y) 是 X 和 Y 的联合概率分布。
- f_X(x) 是 X 的边际概率分布(即不考虑Y时,X自身的分布)。
这个公式与事件的条件概率公式在结构上完全对应:条件概率分布 = 联合分布 / 边际分布。
实例解析:矩形容器的尺寸
为了巩固这个概念,我们来看一个具体的例子。考虑一个矩形容器的制造商,我们定义两个随机变量:
- X 表示容器的长度,可能取值为 129, 130, 131。
- Y 表示容器的宽度,可能取值为 15, 16。
假设我们已知 X 和 Y 的联合概率分布表以及计算出的边际分布如下:
| Y=15 | Y=16 | 边际 P(X) | |
|---|---|---|---|
| X=129 | 0.12 | 0.08 | 0.20 |
| X=130 | 0.42 | 0.28 | 0.70 |
| X=131 | 0.06 | 0.04 | 0.10 |
| 边际 P(Y) | 0.60 | 0.40 | 1.00 |
计算单一条件概率
首先,我们计算一个具体的条件概率:在宽度 Y=15 的条件下,长度 X=130 的概率是多少?
根据公式:
P(X=130 | Y=15) = P(X=130, Y=15) / P(Y=15)
从表中可得:
- 联合概率 P(X=130, Y=15) = 0.42
- 边际概率 P(Y=15) = 0.60

因此:
P(X=130 | Y=15) = 0.42 / 0.60 = 0.70
计算完整的条件概率分布
然而,我们通常更关心完整的条件分布。现在,我们来求 给定 Y=15 时,X 的完整条件概率分布。这意味着我们需要计算 X 所有可能取值(129, 130, 131)在此条件下的概率。
以下是计算过程:
- P(X=129 | Y=15) = P(X=129, Y=15) / P(Y=15) = 0.12 / 0.60 = 0.20
- P(X=130 | Y=15) = 0.42 / 0.60 = 0.70 (已计算)
- P(X=131 | Y=15) = P(X=131, Y=15) / P(Y=15) = 0.06 / 0.60 = 0.10
现在,我们可以写出给定 Y=15 时,X 的条件概率分布:
f_{X|Y}(x | 15) =
- 当 x = 129 时,概率为 0.20
- 当 x = 130 时,概率为 0.70
- 当 x = 131 时,概率为 0.10
观察这个结果,你会发现一个有趣的现象:在这个特定的例子中,给定 Y=15 时 X 的条件分布 f_{X|Y}(x | 15),恰好等于 X 的边际分布 f_X(x)(即表格最右侧的一列:0.20, 0.70, 0.10)。这表明在这个联合分布中,X 的分布不受 Y 取值的影响,这是一个重要的特性,我们将在后续课程中深入探讨。
总结

本节课中我们一起学习了条件概率分布的核心概念。我们从事件的条件概率公式出发,将其成功推广到随机变量的场景,得到了关键公式:f_{Y|X}(y | x) = f_{X,Y}(x, y) / f_X(x)。通过矩形容器尺寸的实例,我们一步步演示了如何计算单一的条件概率以及完整的条件概率分布。理解条件概率分布是分析随机变量间关系的基础,在机器学习和数据分析中有着广泛的应用。
053:联合随机变量的独立性 📊

在本节课中,我们将要学习联合随机变量独立性的概念。独立性是概率论中的一个核心思想,它描述了两个随机变量之间是否存在相互影响的关系。我们将探讨如何判断两个随机变量是否独立,并通过具体的例子来加深理解。
回顾独立性概念
上一节我们介绍了联合分布和边缘分布。本节中,我们来看看如何将这些概念应用于判断随机变量的独立性。
回想一下在之前关于事件独立性的学习中,如果事件A在事件B发生的条件下的概率等于事件A自身的概率,即 P(A|B) = P(A),那么我们就说事件A和B是独立的。这意味着事件B的发生与否对事件A的概率没有影响。
联合随机变量的独立性
对于随机变量X和Y,我们可以将事件独立性的思想推广过来。如果随机变量X和Y是独立的,那么知道其中一个变量的值,不会为我们提供关于另一个变量值的任何额外信息。
具体来说,如果以下任何一个性质成立,那么随机变量X和Y就是独立的。实际上,如果其中一个性质成立,那么所有性质都将成立。
以下是判断随机变量X和Y是否独立的四个等价性质:
-
联合分布等于边缘分布的乘积:对于所有x和y,联合概率密度(或质量)函数等于各自边缘分布的乘积。
- 公式:
f_{X,Y}(x, y) = f_X(x) * f_Y(y)
- 公式:
-
给定X时Y的条件分布等于Y的边缘分布:对于所有x和y,在已知X=x的条件下,Y的条件分布与Y自身的边缘分布相同。
- 公式:
f_{Y|X}(y | x) = f_Y(y)
- 公式:
-
给定Y时X的条件分布等于X的边缘分布:对于所有x和y,在已知Y=y的条件下,X的条件分布与X自身的边缘分布相同。
- 公式:
f_{X|Y}(x | y) = f_X(x)
- 公式:
-
事件概率可分离:对于随机变量X和Y取值范围内的任意集合A和B,X属于A且Y属于B的联合概率,等于X属于A的概率乘以Y属于B的概率。
- 公式:
P(X ∈ A, Y ∈ B) = P(X ∈ A) * P(Y ∈ B)
- 公式:
应用示例:电池问题 🔋
让我们通过一个具体的例子来应用这些概念。还记得之前关于电池的例子吗?假设我们从一堆电池中无放回地抽取两个电池。令随机变量X表示新电池的数量,Y表示旧电池的数量。我们得到了如下的联合概率质量函数表:
| X\Y | 0 | 1 | 2 | 边缘 P(X) |
|---|---|---|---|---|
| 0 | 0 | 0 | 3/66 | 3/66 |
| 1 | 0 | 20/66 | 12/66 | 32/66 |
| 2 | 10/66 | 6/66 | 0 | 16/66 |
| 边缘 P(Y) | 10/66 | 26/66 | 15/66 | 1 |
问题:在不进行任何计算的情况下,你能判断X和Y是否独立吗?
提示:观察联合分布表。注意,表格中存在多个概率为0的单元格(例如(0,0), (0,1), (1,0), (2,2))。现在,检查性质1:f_{X,Y}(x, y) = f_X(x) * f_Y(y) 是否对所有x和y都成立?例如,看(0,0)这个点:
- 联合概率
f_{X,Y}(0,0) = 0 - X的边缘概率
f_X(0) = 3/66 - Y的边缘概率
f_Y(0) = 10/66 - 乘积
f_X(0) * f_Y(0) = (3/66) * (10/66) = 30/4356,这显然不等于0。
因此,性质1不成立,所以随机变量X和Y不是独立的。这符合直觉,因为是无放回抽样,抽出一个电池(新或旧)会影响剩余电池的构成,从而影响第二次抽样的结果。
另一个示例:验证独立性 ✅
为了更清晰地展示独立性成立的情况,我们来看一个更简单的虚构例子。假设有两个随机变量X和Y,它们的联合分布如下:
| X\Y | 0 | 1 | 边缘 P(X) |
|---|---|---|---|
| 0 | 0.08 | 0.72 | 0.80 |
| 1 | 0.02 | 0.18 | 0.20 |
| 边缘 P(Y) | 0.10 | 0.90 | 1 |
问题:X和Y是否独立?
我们可以使用性质2来验证:检查条件分布 f_{Y|X}(y | x) 是否等于边缘分布 f_Y(y)。
以下是验证步骤:
- 当
x=0时:f_{Y|X}(0 | 0) = f(0,0) / f_X(0) = 0.08 / 0.80 = 0.10,等于f_Y(0)=0.10。f_{Y|X}(1 | 0) = f(0,1) / f_X(0) = 0.72 / 0.80 = 0.90,等于f_Y(1)=0.90。
- 当
x=1时:f_{Y|X}(0 | 1) = f(1,0) / f_X(1) = 0.02 / 0.20 = 0.10,等于f_Y(0)=0.10。f_{Y|X}(1 | 1) = f(1,1) / f_X(1) = 0.18 / 0.20 = 0.90,等于f_Y(1)=0.90。

由于对于所有的x和y,条件分布都等于边缘分布,因此性质2成立。根据等价性,X和Y是独立的。
我们也可以用性质1快速验证:对于表中任意一点,其联合概率都等于对应边缘概率的乘积。例如:
f(0,0)=0.08,f_X(0)*f_Y(0)=0.80*0.10=0.08,成立。f(1,1)=0.18,f_X(1)*f_Y(1)=0.20*0.90=0.18,成立。
总结 📝

本节课中我们一起学习了联合随机变量独立性的核心概念。我们了解到,判断两个随机变量X和Y是否独立,有多个等价的数学标准,其中最常用的是检查它们的联合分布是否等于各自边缘分布的乘积。我们通过电池(非独立)和虚构(独立)两个例子,演示了如何应用这些标准进行判断。理解独立性对于后续学习更复杂的概率模型和统计推断至关重要。
054:期望值与中位数 📊






在本节课中,我们将要学习两个描述随机变量中心趋势的重要概念:期望值和中位数。期望值,也称为均值或平均值,是概率加权后的平均结果。中位数则是将概率分布一分为二的那个值。理解这两个概念对于分析数据和进行统计推断至关重要。



期望值的定义 📖



上一节我们介绍了课程主题,本节中我们来看看期望值的精确定义。



期望值,也称为均值或平均值,是随机变量所有可能取值的加权平均,权重为每个值出现的概率。


对于一个随机变量 R,其期望值 E[R] 的数学定义如下:


公式:
E[R] = Σ (r ∈ 样本空间) [ r * P(R = r) ]



其中:
E[R]表示随机变量 R 的期望值。Σ表示对所有可能结果求和。r是随机变量 R 的一个可能取值。P(R = r)是 R 取值 r 的概率。



这个公式的本质是计算一个加权平均值,每个观测值都按其发生的概率进行加权。


期望值示例:掷骰子 🎲


为了更直观地理解期望值,我们来看一个具体的例子:掷一个标准的六面骰子。

以下是计算掷骰子结果期望值的步骤:




- 列出所有可能结果及其概率:骰子每一面(1到6)出现的概率都是 1/6。
- 应用期望值公式:将每个结果乘以其概率,然后求和。



计算过程如下:
E[掷骰子] = 1*(1/6) + 2*(1/6) + 3*(1/6) + 4*(1/6) + 5*(1/6) + 6*(1/6) = 3.5




因此,掷一个公平六面骰子的期望值是 3.5。需要注意的是,3.5 本身并不是骰子上可能出现的点数。它的含义是:如果我们重复掷骰子很多次,将所有结果求平均值,这个平均值会随着试验次数的增加而越来越接近 3.5。所以,期望值描述的是长期平均行为。




中位数的定义 📐



了解了描述数据中心趋势的期望值(均值)后,我们来看看另一个重要的度量:中位数。



中位数是随机变量取值范围内的一个数 x,它满足以下两个条件:




- 随机变量 R 的取值小于 x 的概率 小于或等于 1/2。
公式:P(R < x) ≤ 1/2 - 随机变量 R 的取值大于 x 的概率 小于 1/2。
公式:P(R > x) < 1/2


简单来说,中位数是一个“中间点”,它使得取值比它小的概率不超过一半,同时取值比它大的概率严格小于一半。



中位数示例:再论掷骰子 🎯


现在,让我们根据上述定义,找出掷一个六面骰子结果的中位数。我们有以下候选答案:A) 3, B) 3.5, C) 4, D) 3 和 4。



以下是逐一验证的过程:


- 验证 x = 3:
P(R < 3) = P(掷出1或2) = 2/6 ≈ 0.333,这小于 1/2,满足第一个条件。P(R > 3) = P(掷出4,5,6) = 3/6 = 0.5,这等于(而非小于)1/2,不满足第二个条件。因此 3 不是中位数。



- 验证 x = 3.5:
P(R < 3.5) = P(掷出1,2,3) = 3/6 = 0.5,这等于 1/2,满足第一个条件。P(R > 3.5) = P(掷出4,5,6) = 3/6 = 0.5,这等于(而非小于)1/2,不满足第二个条件。因此 3.5 也不是中位数。

- 验证 x = 4:
P(R < 4) = P(掷出1,2,3) = 3/6 = 0.5,这等于 1/2,满足第一个条件。P(R > 4) = P(掷出5,6) = 2/6 ≈ 0.333,这小于 1/2,满足第二个条件。




因此,根据给定的定义,掷六面骰子结果的中位数是 4。这个结果可能和直觉上“最中间的数”有所不同,但这正体现了精确定义的重要性。中位数关注的是累积概率分布上的中心点。

总结 📝

本节课中我们一起学习了两个核心的统计概念:
- 期望值 (E[R]):它是随机变量所有可能值的概率加权平均,计算公式为
Σ [r * P(R=r)]。它代表了长期重复试验的平均结果。 - 中位数:它是满足
P(R < x) ≤ 1/2且P(R > x) < 1/2的值 x。它将概率分布分成两半,是另一个描述数据中心趋势的指标。





期望值和中位数都是描述随机变量“中心”或“典型值”的方式,但它们的计算方法和侧重点不同,适用于不同的场景和分析目的。
055:平均故障时间 🕰️







在本节课中,我们将要学习如何利用期望值的概念来解决一个经典问题——平均故障时间问题。理解期望值可以帮助我们更轻松地处理一些概率问题。



概述



上一节我们介绍了期望值的基本概念。本节中,我们来看看如何应用期望值来解决一个具体的、在计算机系统和概率分析中常见的问题:计算一个系统首次出现故障的平均时间。



平均故障时间问题





考虑一个系统,它在每一步(或每一次观察)都可能以某个概率 p 发生故障。每一步的故障事件是相互独立的,这意味着第一步是否故障不会影响第二步是否故障。我们关心的是,系统首次发生故障是在哪一步。




我们定义随机变量 R 为首次故障发生的步数。那么,R 的期望值 E[R] 就是平均故障时间。



期望值的推导




以下是计算 E[R] 的步骤:


首先,根据期望值的定义,对于取值为正整数的随机变量 R,其期望值可以表示为:
E[R] = Σ_{i=0}^{∞} P(R > i)




这里的 P(R > i) 表示前 i 步都没有发生故障的概率。




由于每一步是否故障是独立的,前 i 步都没有故障的概率等于每一步都不故障的概率的乘积。如果每一步的故障概率是 p,那么每一步不故障的概率就是 (1-p)。




因此,P(R > i) = (1-p)^i。



将这个结果代入期望值公式:
E[R] = Σ_{i=0}^{∞} (1-p)^i



这是一个无穷几何级数求和。因为 (1-p) < 1,我们可以使用几何级数求和公式:
Σ_{i=0}^{∞} x^i = 1 / (1 - x),其中 |x| < 1。




在这里,x = (1-p)。所以:
E[R] = 1 / (1 - (1-p)) = 1 / p




核心公式:
平均故障时间 E[R] = 1 / p




这个公式非常简洁:平均故障时间等于故障概率的倒数。




应用示例


现在,我们通过两个例子来应用这个公式。



示例一:系统故障
假设一个系统每次运行的故障概率 p = 0.01(即1%)。




根据公式,平均故障时间为:
E[R] = 1 / 0.01 = 100



这意味着,平均而言,我们需要运行这个系统 100次 才会观察到第一次故障。



示例二:亨利八世的继承人问题 👑
这是一个经典的概率趣题。亨利八世想要一个儿子(继承人),他会一直生孩子直到得到一个男孩为止。假设生男生女的概率各为 1/2,且每次生育性别独立。



我们可以把“生到男孩”视为“故障”事件。那么,故障概率 p = 0.5。


根据平均故障时间公式,得到第一个男孩所需的平均孩子数量为:
E[R] = 1 / 0.5 = 2




所以,亨利八世平均需要生2个孩子才能得到他的继承人。




进一步思考:
- 在得到第一个男孩之前,他平均会有
E[R] - 1 = 1个女孩。 - 那么,如果他想至少拥有一个男孩和一个女孩(即“一儿一女”),平均需要生多少个孩子呢?


我们可以这样分析:
- 第一个孩子可能是男孩或女孩,概率各半。
- 无论第一个孩子是男是女,接下来要得到另一个性别的孩子,其平均等待时间同样是
1/p = 2(因为p仍是0.5)。


因此,总的孩子数量的期望值是:
第一个孩子 + 等待另一个性别的平均时间 = 1 + 2 = 3




所以,要至少拥有一儿一女,平均需要生3个孩子。


总结



本节课中我们一起学习了平均故障时间问题。我们推导出了核心公式 E[R] = 1 / p,它表示在每次尝试独立且成功(此处指故障)概率为 p 的情况下,首次成功所需尝试次数的平均值。我们通过系统故障和生育计划两个例子演示了这个公式的应用。理解这个模型有助于我们分析各种需要等待特定事件首次发生的场景,是概率论在计算机科学和日常推理中的一个有力工具。
056:期望的线性性质 📈






在本节课中,我们将学习期望的线性性质。我们将从一个计算机科学领域的例子开始,探讨延迟分布的特性,然后引出并详细解释期望的线性性质定理及其推论。




网络数据包延迟示例 💻



我们从一个计算机科学领域的例子开始。设 D 为一个数据包在信道上的延迟时间。



我们令 f(x) 表示延迟 D 等于某个特定值 x 的概率密度函数。其图像大致如下:









在这个分布中,短延迟出现的频率很高,而长延迟则非常罕见。



假设我们进行一个实验,测量100次延迟,并估算平均延迟。第一次实验得到的平均延迟是10毫秒。第二次实验得到的平均延迟是9.8毫秒。




现在,考虑延迟超过某个值 i 的概率。假设这个概率为 1/i。那么延迟的期望值计算如下:




公式:E[D] = Σ_{i=1}^{∞} P(D > i) = Σ_{i=1}^{∞} 1/i



我们知道,这个调和级数求和会发散到无穷大。




然而,如果延迟超过值 i 的概率是 1/i²,情况则完全不同:




公式:E[D] = Σ_{i=1}^{∞} P(D > i) = Σ_{i=1}^{∞} 1/i²



根据几何级数的知识,这个求和收敛,其值小于或等于2。

这个例子说明了什么?关键在于,当你从分布中采样进行实验时,那些概率极低的罕见事件(即长延迟)很难被观测到。然而,一旦这些罕见事件发生,它们会对总和产生巨大的影响,从而改变整个分布的期望值估计。在处理期望值时,罕见事件可能带来问题。




期望的线性性质 📐

现在,我们转换话题,来讨论期望的线性性质。



存在一个定理:对于定义在同一个概率空间 S 上的任意两个随机变量 R₁ 和 R₂,以下等式成立:




公式:E[R₁ + R₂] = E[R₁] + E[R₂]




也就是说,两个随机变量之和的期望值,等于它们各自期望值的和。




示例:掷两个骰子 🎲



一个简单的例子是掷两个标准的六面骰子。我们知道单个骰子的期望值是3.5。根据线性性质,两个骰子点数之和的期望值为:




公式:E[骰子1 + 骰子2] = E[骰子1] + E[骰子2] = 3.5 + 3.5 = 7


这也解释了为什么在玩“双骰子”游戏时,数字7出现的频率最高——因为它是平均意义上的最可能结果。

推论与独立性要求 🔗



上述定理有一个直接的推论:对于样本空间中的任意 k 个随机变量 R₁, R₂, ..., Rₖ,有:





公式:E[R₁ + R₂ + ... + Rₖ] = E[R₁] + E[R₂] + ... + E[Rₖ]




这意味着,要求一组随机变量总和的期望值,只需将它们各自的期望值相加即可。

然而,必须注意一个关键前提:期望的线性性质要求随机变量之间满足独立性假设。如果 R₂ 的结果以某种方式依赖于 R₁ 的结果,那么就不能直接使用线性性质。我们将在后续课程中看到不满足独立性时的例子。




总结 📝

本节课我们一起学习了两个核心内容:
- 通过数据包延迟的例子,我们看到了概率分布中“长尾”或罕见事件对期望值计算的潜在巨大影响。
- 我们重点学习了期望的线性性质定理及其推论,即独立随机变量之和的期望等于期望之和。同时,我们强调了应用该性质时必须满足的独立性前提条件。
057:帽子检查问题 🎩





在本节课中,我们将学习一个经典的概率论问题——帽子检查问题。我们将通过这个例子,深入理解如何利用期望值的线性性质来简化复杂的概率计算。

问题描述



有 N 位男士进入一家餐厅,并将他们的帽子交给寄存处。寄存处的工作人员会随机地将帽子发还给这些男士。每位男士都随机地得到一顶帽子。




核心问题是:平均有多少位男士能拿回自己的帽子?



问题建模与初步分析



我们首先定义随机变量 R,它表示拿到自己帽子的男士人数。我们的目标是计算 R 的期望值,即 E[R]。




根据期望值的定义,我们可以写出:
E[R] = Σ (k=1 到 n) [ k × P(R = k) ]


然而,直接计算这个求和会非常复杂,因为我们需要知道 P(R = k) 的精确表达式。经过复杂的数学推导(此处省略),我们可以得到概率分布:




- 当 k ≤ n-2 时,P(R = k) = 1 / (k! × (n-k)!)
- 当 k = n-1 或 k = n 时,P(R = k) = 1 / n!


这个表达式看起来并不直观,而且计算起来也很繁琐。幸运的是,我们可以采用一种更巧妙、更简单的方法。



利用指示变量简化问题




上一节我们介绍了直接计算期望值的复杂性。本节中,我们来看看如何通过分解随机变量来简化问题。



我们可以将总人数 R 表示为一系列更简单的随机变量之和。具体做法是,为每一位男士定义一个指示变量。




以下是定义指示变量的方法:
我们定义 n 个随机变量 R₁, R₂, ..., Rₙ,其中对于第 i 位男士:
- Rᵢ = 1, 如果第 i 位男士拿回了自己的帽子。
- Rᵢ = 0, 如果第 i 位男士拿错了帽子。



这样,拿到正确帽子的人数总和 R 就可以表示为:
R = R₁ + R₂ + ... + Rₙ




这个和式精确地统计了拿到自己帽子的人数。




计算期望值




现在,我们来计算 R 的期望值 E[R]。利用期望值的线性性质,无论这些随机变量是否独立,和的期望值都等于期望值的和:




E[R] = E[R₁ + R₂ + ... + Rₙ] = E[R₁] + E[R₂] + ... + E[Rₙ]


对于任何一个指示变量 Rᵢ,它的期望值 E[Rᵢ] 就等于 Rᵢ = 1 的概率,即第 i 位男士拿到自己帽子的概率。

由于帽子是随机分配的,对于任何一位特定的男士来说,从 n 顶帽子中恰好拿到自己那顶的概率是:
P(第 i 位男士拿到自己的帽子) = 1 / n



因此,对于每一个 i,都有:
E[Rᵢ] = 1 × (1/n) + 0 × (1 - 1/n) = 1/n


现在,我们将所有 n 位男士的期望值相加:
E[R] = E[R₁] + E[R₂] + ... + E[Rₙ] = (1/n) + (1/n) + ... + (1/n) = n × (1/n) = 1




结论与总结



本节课中我们一起学习了帽子检查问题及其巧妙的解法。



我们得到的最终结果是:无论总共有多少位男士(n 是多少),平均而言,只有 1 位男士能拿回自己的帽子。


这个结论非常反直觉,但它清晰地展示了概率的奇妙之处。更重要的是,我们通过将复杂的随机变量 R 分解为简单的指示变量之和,并利用期望值的线性性质,避免了繁琐的概率计算,优雅地得到了答案。这种方法在解决许多涉及计数的概率问题时非常强大。


值得注意的是,在整个计算过程中,我们没有对帽子的随机排列方式做任何特殊的独立性假设,仅仅利用了“随机分配”这一条件,这使得结论具有普遍性。
058:指示变量求和 📊



在本节课中,我们将要学习一个关于期望值的重要定理。这个定理的核心思想是,通过将复杂问题分解为一系列简单的“是/否”指示变量,我们可以更轻松地计算事件发生次数的期望值。


定理陈述


给定一个概率空间 (Ω, F, P) 和一个事件集合 A₁, A₂, ..., Aₙ,这些事件都属于该概率空间。

那么,这些事件中预期发生的事件数量等于每个事件发生概率的总和。


用公式表示如下:



E[T] = Σᵢ₌₁ⁿ P(Aᵢ)


其中,T 表示实际发生的事件数量。


定理证明


上一节我们介绍了定理的内容,本节中我们来看看如何证明它。证明的关键在于引入指示变量。


首先,我们为每个事件 Aᵢ 定义一个指示变量 Iᵢ:


Iᵢ(ω) = 1, 如果 ω ∈ Aᵢ;否则为 0。

这个指示变量的含义是:当事件 Aᵢ 发生时,Iᵢ 的值为 1;否则为 0。


接着,我们定义变量 T 为所有指示变量的和:


T = I₁ + I₂ + ... + Iₙ

显然,T 的值就是实际发生的事件总数。


现在,我们计算 T 的期望值。根据期望值的线性性质,和的期望值等于期望值的和:


E[T] = E[I₁ + I₂ + ... + Iₙ] = Σᵢ₌₁ⁿ E[Iᵢ]


对于指示变量 Iᵢ,其期望值 E[Iᵢ] 恰好等于事件 Aᵢ 发生的概率 P(Aᵢ)。因为:


E[Iᵢ] = 1 * P(Iᵢ = 1) + 0 * P(Iᵢ = 0) = P(Aᵢ)


将上述结果代入,我们得到:


E[T] = Σᵢ₌₁ⁿ P(Aᵢ)


至此,定理得证。


应用示例


为了加深理解,我们来看一个具体的例子。

假设我们抛掷 n 枚均匀的硬币。定义事件 Aᵢ 为“第 i 枚硬币结果是反面”。

那么,变量 T 就表示出现反面的硬币总数。


根据我们刚刚证明的定理,出现反面次数的期望值为:


E[T] = P(A₁) + P(A₂) + ... + P(Aₙ)


由于每枚硬币是均匀的,出现反面的概率都是 1/2。因此:


E[T] = 1/2 + 1/2 + ... + 1/2 = n/2

这个结果非常直观:抛掷 n 枚均匀硬币,预期会出现 n/2 次反面。


方法的威力与延伸


这个例子展示了指示变量求和法的简洁性。我们也可以从另一个角度计算 E[T],即直接使用二项分布的定义:


E[T] = Σᵢ₌₀ⁿ i * P(T = i) = Σᵢ₌₀ⁿ i * C(n, i) * (1/2)ⁿ

通过数学推导,这个复杂的求和式最终也会简化为 n/2。


更重要的是,通过将两种计算方法等同起来:

n/2 = Σᵢ₌₀ⁿ i * C(n, i) * (1/2)ⁿ



我们可以推导出一个组合恒等式:
Σᵢ₌₀ⁿ i * C(n, i) = n * 2ⁿ⁻¹

这展示了概率论工具在证明纯数学恒等式方面的强大能力。



核心要点总结
本节课中我们一起学习了指示变量求和定理及其应用。


以下是使用该方法的核心优势:
- 化繁为简:它将计算一个复杂随机变量(事件发生次数)的期望值,转化为计算一系列简单指示变量(单个事件是否发生)的期望值之和。
- 无需独立性:该定理成立不需要事件
A₁, A₂, ..., Aₙ相互独立。无论事件之间是否存在依赖关系,期望值的线性性质都保证结论成立。 - 强大的问题解决工具:在概率和算法分析中,如果一个计数问题可以构造为一系列指示变量的和,那么优先使用这个方法通常会极大地简化计算过程。



核心建议:当你面对一个需要计算某事件发生次数期望值的问题时,首先尝试将其分解为一系列“是/否”指示变量的和。这往往是通往解决方案最清晰、最有效的路径。
059:方差与协方差 📊








在本节课中,我们将学习两个核心概念:方差与协方差。我们将通过一个编程语言对比的案例,理解错误使用统计方法可能导致的误导性结论,并正式学习如何量化数据的离散程度以及两个变量之间的关联性。






一个关于编程语言对比的案例




上一节我们讨论了期望值,本节我们来看一个实际案例。一位伯克利教授比较了两种编程语言(A和B),试图评估哪种语言在内存使用上更优。他们通过测量完成特定任务(基准测试)所需的代码大小来进行比较。






以下是他们使用的四个基准测试任务:
- 字符串搜索
- 斐波那契测试
- 阿克曼函数测试
- 递归排序测试







对于每个任务,他们记录了两种语言(A和B)的代码内存使用量(单位:字节),数据如下:





| 任务 | 语言A | 语言B |
|---|---|---|
| 字符串搜索 | 150 | 120 |
| 斐波那契测试 | 180 | 180 |
| 阿克曼函数测试 | 300 | 600 |
| 递归排序 | 1400 | 2800 |



在发表的论文中,作者计算了 B/A 的比值,并取其平均值。






以下是计算过程:
- 字符串搜索:120 / 150 = 0.8
- 斐波那契测试:180 / 180 = 1.0
- 阿克曼函数测试:600 / 300 = 2.0
- 递归排序:2800 / 1400 = 2.0


比值的平均值为 (0.8 + 1.0 + 2.0 + 2.0) / 4 = 1.45。论文的结论是:语言B平均比语言A多占用 1.45倍 的内存。






然而,这里存在一个统计陷阱。如果我们计算 A/B 的比值,会得到完全不同的结论。






以下是反向比值的计算:
- 字符串搜索:150 / 120 = 1.25
- 斐波那契测试:180 / 180 = 1.0
- 阿克曼函数测试:300 / 600 = 0.5
- 递归排序:1400 / 2800 = 0.5




反向比值的平均值为 (1.25 + 1.0 + 0.5 + 0.5) / 4 = 0.8125。这个结果暗示语言A平均只占用语言B 0.81倍 的内存,或者说语言B比语言A多占用约23%的内存(1/0.8125 ≈ 1.23)。






核心问题:同一个数据集,仅仅因为比值的计算方向不同,就得到了看似矛盾的解释(1.45倍 vs 1.23倍)。这凸显了在处理比值或比率数据时,如果不考虑数据点之间的独立性和数学假设,很容易得出误导性的结论。统计工具本身是强大的,但必须被正确使用。





方差:衡量数据的离散程度






接下来,我们正式引入方差的概念。方差用于衡量一个随机变量的取值与其期望值(均值)之间的平均偏离程度。







方差 的公式定义如下:
对于一个随机变量 R,其方差 Var(R) 为:
Var(R) = E[ (R - E[R])^2 ]
其中,E[R] 代表 R 的期望值。






这个公式的含义是:计算每一个可能的取值与期望值的差(称为“残差”),将其平方(以避免正负抵消),然后对所有可能取值的平方残差求期望(加权平均)。





让我们通过一个例子来理解方差的意义。


例1:假设随机变量 R 的分布为 P(R=100) = 1/2, P(R=-100) = 1/2。
- 其期望值 E[R] = (100 * 1/2) + (-100 * 1/2) = 0。
- 计算方差:
Var(R) = (100 - 0)^2 * 1/2 + (-100 - 0)^2 * 1/2 = 10000 * 1/2 + 10000 * 1/2 = 10000





例2:假设随机变量 S 的分布为 P(S=1) = 1/2, P(S=-1) = 1/2。
- 其期望值 E[S] = (1 * 1/2) + (-1 * 1/2) = 0。
- 计算方差:
Var(S) = (1 - 0)^2 * 1/2 + (-1 - 0)^2 * 1/2 = 1 * 1/2 + 1 * 1/2 = 1






通过对比可以发现,虽然随机变量 R 和 S 的期望值都是 0,但 R 的方差 (10000) 远大于 S 的方差 (1)。这说明 R 的取值非常分散,而 S 的取值则紧密围绕在均值 0 附近。因此,方差真正度量的是数据分布的“宽度”或“波动性”。



标准差:方差的平方根
在实际应用中,我们经常使用标准差,它是方差的平方根。






标准差 的公式为:
σ_R = sqrt( Var(R) )







为什么要引入标准差?因为方差在计算中对残差进行了平方,导致其量纲变成了原始数据量纲的平方。例如,如果数据单位是“字节”,方差单位就是“字节²”,这不直观。取平方根后,标准差恢复了与原始数据相同的量纲(字节),更便于理解和解释数据的离散程度。






协方差与相关性:衡量变量间的共同变化






方差描述单个变量的离散情况。当我们想了解两个变量(例如 X 和 Y)如何共同变化时,就需要用到协方差和相关性。






协方差 的公式定义如下:
Cov(X, Y) = E[ (X - μ_X) * (Y - μ_Y) ]
其中,μ_X 和 μ_Y 分别是 X 和 Y 的期望值(均值)。




协方差的正负号揭示了变量间变化的方向关系:
- 正值:当 X 大于其均值时,Y 也倾向于大于其均值;当 X 小于其均值时,Y 也倾向于小于其均值。二者变化方向相同,呈正相关趋势。
- 负值:当 X 大于其均值时,Y 倾向于小于其均值;反之亦然。二者变化方向相反,呈负相关趋势。
- 零值:二者没有明显的线性协同变化模式。



然而,协方差的大小受变量自身方差的影响,难以直接比较不同数据对之间的关联强度。因此,我们引入相关系数对其进行标准化。





相关系数 (ρ) 的公式为:
ρ_{X,Y} = Cov(X, Y) / ( sqrt(Var(X)) * sqrt(Var(Y)) )






由于分母是两个标准差的乘积(恒为正),相关系数将被“缩放”到 [-1, 1] 的范围内:
- ρ = 1:完全正相关。所有数据点严格落在一条斜向上的直线上。
- ρ = -1:完全负相关。所有数据点严格落在一条斜向下的直线上。
- ρ = 0:无线性相关。数据点呈随机分布,无法用一条直线描述其关系。
- ρ 介于 -1 和 1 之间:表示不同程度的相关性。绝对值越接近1,线性关系越强;越接近0,线性关系越弱。
相关系数同时提供了关系方向(正/负)和强度(绝对值大小)的信息,是描述两个变量线性关联程度的标准化指标。
总结
本节课我们一起学习了三个核心的统计度量:
- 方差 (Var):衡量单个随机变量取值的离散程度,公式为
E[(R - E[R])^2]。 - 标准差 (σ):方差的平方根,与原始数据同量纲,更直观地表示离散程度。
- 协方差 (Cov) 与相关系数 (ρ):衡量两个随机变量之间的线性关联方向与强度。协方差公式为
E[(X - μ_X)(Y - μ_Y)],相关系数通过标准化协方差得到,其值域为 [-1, 1]。

我们还通过一个编程语言对比的案例,认识到错误地处理比率数据可能得出矛盾结论,强调了遵循正确统计方法和数学假设的重要性。理解这些概念是进行更高级数据分析(如回归分析)的基础。
060:R语言中的期望值教程 📊
在本教程中,我们将学习如何在R语言中计算期望值、方差和矩母函数。我们将从数值积分的基础概念开始,逐步构建计算期望值和方差的函数,并最终实现矩母函数的计算。本教程旨在通过简单的代码示例,帮助初学者理解这些统计概念在R中的实现方式。
数值积分入门 🔢
上一节我们介绍了期望值的理论基础,本节中我们来看看如何在R中通过数值积分来近似计算积分。数值积分是一种通过将积分区间划分为多个小矩形并求和来近似积分值的方法。

以下是创建一个简单数值积分函数的步骤:
# 定义数值积分函数
nu_integrate <- function(f, a, b, n=30) {dx <- (b - a) / n # 每个矩形的宽度x <- seq(a, b - dx, by=dx) # 生成x值序列sum(f(x) * dx) # 黎曼和
}


我们可以用标准正态分布的概率密度函数来测试这个函数。积分区间从-1.96到1.96,这覆盖了标准正态分布下约95%的面积。
# 测试函数:计算标准正态分布在[-1.96, 1.96]区间下的面积
result <- nu_integrate(dnorm, -1.96, 1.96)
print(result) # 输出应接近0.95
为了更直观地理解数值积分的过程,我们可以创建一个可视化图形。以下代码将绘制正态分布曲线,并高亮显示黎曼和中的一个矩形。
# 加载ggplot2库用于绘图
library(ggplot2)# 设置参数
f <- dnorm
a <- -1.96
b <- 1.96
n <- 30
dx <- (b - a) / n
x <- seq(a, b - dx, by=dx)# 创建数据框
df <- data.frame(x = x, y = f(x))# 创建绘图
p <- ggplot() +stat_function(fun = dnorm, args = list(mean=0, sd=1), color="blue") +geom_rect(data=df, aes(xmin=x, xmax=x+dx, ymin=0, ymax=y), fill="red", alpha=0.3) +labs(title="数值积分可视化 (黎曼和)", x="x", y="密度 f(x)") +theme_minimal()# 高亮第7个矩形(可选)
highlight_rect <- 7
p <- p + geom_rect(data=df[highlight_rect, ], aes(xmin=x, xmax=x+dx, ymin=0, ymax=y), fill="green", alpha=0.7)print(p)
你可以尝试改变n的值(例如增加到100),观察矩形数量增加如何使近似值更精确。也可以尝试使用其他分布函数,如dexp(指数分布)或dgamma(伽马分布),来练习数值积分。



使用内置函数进行积分 📈
上一节我们手动实现了数值积分,本节中我们来看看R语言内置的、更精确的积分函数integrate。

integrate函数使用更先进的算法进行数值积分,通常比简单的黎曼和更精确、更高效。

# 使用内置integrate函数计算相同积分
exact_result <- integrate(dnorm, lower = -1.96, upper = 1.96)
print(exact_result)
# 输出包含积分值和绝对误差估计
现在,让我们利用这个强大的工具来计算连续型随机变量的期望值。连续型随机变量X的期望值公式为:
E[X] = ∫ x * f(x) dx,积分区间为整个定义域。
# 计算均值为7的正态分布的期望值
expected_value <- integrate(function(x) { x * dnorm(x, mean = 7) }, lower = -Inf, upper = Inf)
print(expected_value) # 结果应接近7
为了使代码更简洁和可复用,我们可以将计算期望值的逻辑封装成一个函数。

# 创建计算期望值的通用函数
EX <- function(density_func, ...) {# density_func: 概率密度函数,如dnorm, dexp# ...: 传递给密度函数的参数,如mean, ratef <- function(x) {x * density_func(x, ...)}result <- integrate(f, lower = -Inf, upper = Inf)return(result$value) # 返回积分值
}# 使用函数计算期望值
mean_norm <- EX(dnorm, mean = 7)
print(mean_norm)# 尝试计算指数分布(rate=0.5)的期望值
mean_exp <- EX(dexp, rate = 0.5)
print(mean_exp) # 指数分布的期望值为1/rate,此处应为2




推广到函数变换与矩母函数 🧮
上一节我们计算了随机变量本身的期望值,本节中我们来看看如何计算随机变量函数的期望值,并由此引出矩母函数。
随机变量函数g(X)的期望值公式为:
E[g(X)] = ∫ g(x) * f(x) dx
我们可以创建一个通用函数来计算任何变换g(x)下的期望值。
# 创建计算函数变换期望值的通用函数
E_transform <- function(g, density_func, ...) {# g: 变换函数,例如 function(x) { x^2 }# density_func: 概率密度函数# ...: 密度函数参数f <- function(x) {g(x) * density_func(x, ...)}result <- integrate(f, lower = -Inf, upper = Inf)return(result$value)
}

矩母函数是概率论中的一个核心概念,定义为 M(t) = E[e^(tX)]。我们可以用上面的函数来计算它。
# 定义矩母函数计算函数
moment_gen <- function(t, density_func, ...) {g <- function(x) {exp(t * x)}return(E_transform(g, density_func, ...))
}# 计算正态分布(mean=5, sd=3)在t=0.1时的矩母函数值
mgf_value <- moment_gen(t = 0.1, dnorm, mean = 5, sd = 3)
print(mgf_value)

矩母函数之所以强大,是因为它的各阶导数在t=0处的值给出了分布的各阶矩。特别地,一阶矩是期望值,二阶矩与方差有关。
# 计算一阶矩(期望值)的另一种方法:使用矩母函数在t=0处的导数
# 数值求导计算一阶矩
first_moment <- E_transform(function(x) { x }, dnorm, mean=5, sd=3)
print(first_moment) # 应等于5# 我们也可以将期望值函数与矩的概念统一命名
E <- function(density_func, ...) {EX(density_func, ...)
}
print(E(dnorm, mean=5, sd=3))
计算方差 📊
上一节我们利用期望值和矩母函数计算了一阶矩,本节中我们来看看如何计算二阶矩和方差。

随机变量X的方差公式为:
Var(X) = E[X^2] - (E[X])^2
我们可以利用之前定义的E_transform函数来计算E[X^2](即二阶矩)。

# 计算方差函数
variance <- function(density_func, ...) {# 计算期望值 E[X]mu <- E(density_func, ...)# 计算二阶矩 E[X^2]second_moment <- E_transform(function(x) { x^2 }, density_func, ...)# 方差 = E[X^2] - (E[X])^2var <- second_moment - mu^2return(var)
}# 计算正态分布(mean=5, sd=3)的方差
var_norm <- variance(dnorm, mean=5, sd=3)
print(var_norm) # 应等于9 (即3^2)# 计算指数分布(rate=0.5)的方差
var_exp <- variance(dexp, rate=0.5)
print(var_exp) # 指数分布的方差为1/(rate^2),此处应为4



总结 🎯
本节课中我们一起学习了在R语言中处理期望值、方差和矩母函数的核心技能。

我们首先从数值积分入手,通过构建黎曼和函数并可视化,理解了积分近似计算的基本原理。接着,我们引入了R内置的integrate函数,它提供了更精确和高效的积分计算。

利用积分,我们定义了计算期望值 EX 的通用函数,并推广到计算任意函数变换 E_transform 的期望值。在此基础上,我们实现了矩母函数 moment_gen 的计算,矩母函数是推导分布各阶矩的有力工具。

最后,我们结合期望值和二阶矩,构建了计算方差的函数 variance。

本教程提供的代码框架是通用的,鼓励你将其应用于不同的概率分布(如伽马分布、贝塔分布),并通过改变参数来加深对统计概念与R编程的理解。理论部分请结合课程讲座内容,以形成完整的知识体系。
061:罕见事件与马尔可夫定理 🎲





在本节课中,我们将要学习统计学中一个重要的概念——罕见事件,并介绍一个用于分析罕见事件概率的强大工具:马尔可夫定理。我们将从定理的定义和证明开始,理解其核心思想,为后续学习切比雪夫不等式和中心极限定理打下基础。

马尔可夫定理介绍 📖






上一节我们引入了罕见事件的概念。本节中,我们来看看如何量化地分析一个非负随机变量取极大值的概率。马尔可夫定理为此提供了一个概率上界。





马尔可夫定理的表述如下:
如果 R 是一个非负随机变量,那么对于所有 a > 0,有:


P(R ≥ a) ≤ E[R] / a



这个公式的核心在于,它利用随机变量的期望值 E[R],为“R 超过某个阈值 a”这一事件的概率设定了一个上限。阈值 a 越大,这个概率上界就越小。




定理的证明与理解 🔍


为了理解这个定理从何而来,我们需要进行一个简单的证明。证明的思路是引入一个指示函数,并通过期望值的性质进行推导。





首先,我们考虑随机变量 R 和阈值 a。我们可以定义一个指示函数 I(R ≥ a),当 R ≥ a 时其值为1,否则为0。




显然,对于所有情况,以下不等式成立:
a * I(R ≥ a) ≤ R




这是因为:
- 当 R < a 时,左边为0,右边 R ≥ 0,不等式成立。
- 当 R ≥ a 时,左边为 a,右边 R ≥ a,不等式同样成立。




接下来,我们对不等式两边取期望值。根据期望的线性性质和非负性,得到:
a * E[I(R ≥ a)] ≤ E[R]





由于指示函数的期望值就等于事件发生的概率,即 E[I(R ≥ a)] = P(R ≥ a),代入上式:
a * P(R ≥ a) ≤ E[R]




最后,因为 a > 0,我们将不等式两边同时除以 a,就得到了马尔可夫定理:
P(R ≥ a) ≤ E[R] / a




这个证明展示了如何通过一个巧妙的不等式,将概率问题转化为期望值问题。




定理的推论




从马尔可夫定理可以直接推导出一个常用的推论:
如果 R 是一个非负随机变量,那么对于所有 c > 0,有:



P(R ≥ c * E[R]) ≤ 1 / c




这个推论是令原定理中的 a = c * E[R] 得到的。它意味着,一个随机变量超过其期望值 c 倍的概率,最多只有 1/c。例如,它超过期望值10倍的概率不会超过10%。


总结与过渡 🚀





本节课中我们一起学习了马尔可夫定理。我们了解了它的定义,并通过引入指示函数完成了定理的证明。马尔可夫定理的核心价值在于,它仅利用随机变量的期望值(无需知道其具体分布),就能对罕见事件(取值很大的事件)的概率给出一个保守的估计。




在接下来的课程中,我们将通过具体的例子,看看马尔可夫定理如何应用于实际问题,并进一步探索其更强大的推广形式——切比雪夫不等式。
062:马尔可夫定理实例分析 📊








在本节课中,我们将通过几个具体的例子来学习如何应用马尔可夫定理。上一节我们介绍了马尔可夫定理的证明,本节中我们来看看如何在实际问题中使用它来估计罕见事件的概率上界。





马尔可夫定理的核心公式是:对于一个非负随机变量 R 和任意正数 a,有:
P(R ≥ a) ≤ E[R] / a








实例一:随机体重分析 🏋️




假设随机变量 R 表示一个人的体重(单位:磅)。已知体重的期望值 E[R] = 100。





我们希望估计体重超过或等于 200 磅的概率。

根据马尔可夫定理,我们可以直接计算其上界:
P(R ≥ 200) ≤ E[R] / 200 = 100 / 200 = 0.5



这意味着,体重超过200磅的概率至多为50%。
我们也可以使用马尔可夫定理的推论来理解这个结果。因为 200 = 2 * E[R],所以常数 c = 2。根据推论 P(R ≥ c * E[R]) ≤ 1/c,我们同样得到:
P(R ≥ 2 * E[R]) ≤ 1/2 = 0.5












实例二:指数分布与到达时间 ⏳




在某些场景中,数据服从指数分布,例如银行柜台的顾客到达间隔时间。这类数据通常具有右偏特性:大量值集中在较小的区间,但偶尔会出现非常大的值(即罕见的长等待时间)。





假设随机变量 X 服从参数 λ = 1 的指数分布,即 X ~ Exp(1)。对于指数分布,其期望值 E[X] = 1/λ = 1。




现在,我们想估计等待时间超过某个阈值 a 的概率。根据马尔可夫定理:
P(X ≥ a) ≤ E[X] / a = 1 / a

例如,如果我们想知道等待时间超过15分钟的概率,其上界就是 1/15。这为我们评估“极端长等待”这种罕见事件的风险提供了一个快速的量化工具。










实例三:均匀分布分析 📏




假设随机变量 X 服从区间 [-4, 4] 上的均匀分布,即 X ~ Uniform(-4, 4)。




我们希望估计 X ≥ 3 的概率。注意,此时 X 可能取负值,我们需要应用马尔可夫定理的绝对值形式:
P(|X| ≥ a) ≤ E[|X|] / a





首先计算 E[|X|]。由于分布对称,我们只需计算在 [0, 4] 区间上的期望,结果为 2。






因此,P(|X| ≥ 3) ≤ 2 / 3。

由于事件 {X ≥ 3} 是事件 {|X| ≥ 3} 的一部分(并且概率为其一半,因为分布对称),我们可以得到:
P(X ≥ 3) = (1/2) * P(|X| ≥ 3) ≤ (1/2) * (2/3) = 1/3





所以,X 大于等于3的概率至多为 1/3。







推论与实例四:学生成绩分析 📝






马尔可夫定理还有一个有用的推论:如果随机变量 R 存在一个上界 u(即 R ≤ u),那么对于任意 x < u,有:
P(R ≤ x) ≤ (u - E[R]) / (u - x)



这个推论允许我们估计随机变量取值很小的概率。






让我们看一个例子:设 R 表示一个随机学生的考试成绩,满分 u = 100。已知班级平均分 E[R] = 75。






我们想估计一个学生成绩低于或等于50分的概率。根据上述推论:
P(R ≤ 50) ≤ (100 - 75) / (100 - 50) = 25 / 50 = 0.5




这意味着,成绩低于50分的概率至多为50%。这个上界帮助我们量化了出现“极低分”这种罕见事件的风险。




总结






本节课中,我们一起学习了如何应用马尔可夫定理及其推论来分析不同场景下的罕见事件概率上界。
以下是本节课的核心要点回顾:
- 核心公式:对于非负随机变量 R,P(R ≥ a) ≤ E[R] / a。
- 应用场景:该定理特别适用于处理具有偏态分布(如指数分布)的数据,其中存在少数极端大值。
- 主要作用:它为估计“随机变量远超其平均值”这类事件的概率提供了一个简单而保守的上界,是风险评估和决策分析中的一个有用工具。
- 灵活变体:通过取绝对值或利用变量上界,我们可以将定理应用于更广泛的随机变量。






通过体重、等待时间、均匀分布变量和考试成绩这四个例子,我们看到了马尔可夫定理如何将抽象的数学公式转化为解决实际概率估计问题的有力手段。
063:墨菲定律的统计证明 🧮




在本节课中,我们将学习如何从统计学的角度理解和证明著名的“墨菲定律”。我们将看到,即使单个事件发生的概率很低,当事件数量足够多时,至少发生一件“坏事”的概率会变得非常高。






墨菲定律的统计表述


墨菲定律通常被表述为:“如果某件坏事有可能发生,那么它就一定会发生。” 在统计学中,我们可以将其形式化。



假设存在一系列相互独立的事件,记为 A₁, A₂, ..., Aₙ。令 T 表示这些事件中实际发生的事件数量。
那么,没有任何一个事件发生的概率满足以下不等式:



P(T = 0) ≤ e^{-E[T]}




其中,E[T] 是事件发生数量 T 的期望值。这个公式的含义是:给定一系列事件,即使每个事件单独发生的可能性很低,但至少有一个事件发生的可能性却可能很高。







证明过程



上一节我们介绍了墨菲定律的统计形式。本节中,我们来一步步证明这个不等式。



证明的核心步骤如下:




- 计算无事件发生的概率:
没有任何事件发生,意味着事件 A₁ 不发生,且 A₂ 不发生,...,且 Aₙ 不发生。由于事件相互独立,其概率等于各自不发生的概率的乘积。P(T=0) = P(¬A₁ ∧ ¬A₂ ∧ ... ∧ ¬Aₙ) = ∏_{i=1}^{n} P(¬Aᵢ)




- 用发生概率表示:
事件不发生的概率等于 1 减去它发生的概率。
因此:P(¬Aᵢ) = 1 - P(Aᵢ)P(T=0) = ∏_{i=1}^{n} [1 - P(Aᵢ)]



- 应用不等式 1 - x ≤ e^{-x}:
对于任意实数 x,有一个重要的不等式成立:1 - x ≤ e^{-x}。我们将此不等式应用于每一项1 - P(Aᵢ)。P(T=0) ≤ ∏_{i=1}^{n} e^{-P(Aᵢ)}

- 合并指数项:
指数相乘等于指数相加。∏_{i=1}^{n} e^{-P(Aᵢ)} = e^{-∑_{i=1}^{n} P(Aᵢ)}





- 关联到期望值:
事件发生数量 T 的期望值 E[T],正是每个事件发生概率的总和(因为 T 是各事件发生次数的和,而期望具有可加性)。
因此,我们得到:E[T] = ∑_{i=1}^{n} P(Aᵢ)
证明完毕。P(T=0) ≤ e^{-E[T]}






推论与实际意义


我们已经完成了墨菲定律的数学证明。现在,让我们看看它的一个直接推论及其在现实世界中的解释。
推论:如果预期会发生的事件数量(即 E[T])大于或等于 10,那么没有任何事件发生的概率将小于 e^{-10},这个值大约等于 1/22000。





这个推论揭示了一个关键点:概率上界 e^{-E[T]} 只依赖于预期发生的事件总数 E[T],而与具体的事件个数 n 无关。这解释了为什么“巧合”或“小概率事件”总会发生。



以下是几个例子:

- “奇迹”的发生:一个人被闪电击中的概率极低,这像是一个“奇迹”。但考虑到全球有数十亿人,没有任何人被闪电击中的概率同样极低。因此,我们观察到有人被击中并不奇怪。
- 商业投标策略:假设一家公司提交了10份投标书,每份中标的概率都很低。根据墨菲定律(或者说它的反面),所有投标都失败的概率会非常低。因此,公司可能需要提前雇佣员工,为“至少有一份投标成功”的可能性做好准备。这是一种基于概率的需求前置和风险分散策略。
- 风险管理:对于一系列罕见的风险事件,我们可以利用这个定律和马尔可夫不等式来评估风险。通过计算预期发生的事件数量,我们可以根据自身的风险承受能力,决定在何时需要提前采取措施来应对可能发生的负面事件。




总结





本节课中,我们一起学习了如何用统计学语言描述和证明墨菲定律。我们证明了对于一系列独立事件,没有任何事件发生的概率以 e^{-E[T]} 为上界。这意味着,只要预期会发生的事件数量足够多,那么至少发生一件“坏事”的概率就会非常高。这个原理不仅解释了生活中的巧合,也为商业决策和风险管理提供了重要的数学依据:不要因为单个事件概率低就忽视其发生的可能性,在大量尝试或面临多种风险时,必须为“有事发生”做好准备。
064:切比雪夫不等式 📊





在本节课中,我们将学习另一个重要的概率不等式——切比雪夫不等式。我们将了解它的定义、推导过程,并通过一个具体例子来比较它与马尔可夫不等式,看看它如何提供一个更紧的概率上界。



概述


切比雪夫不等式描述了随机变量偏离其均值的概率上界。具体来说,它指出随机变量 X 与其均值 μ 的绝对偏差超过某个阈值 a 的概率,不会超过 X 的方差除以 a 的平方。




其核心公式如下:


P(|X - μ| ≥ a) ≤ Var(X) / a²


上一节我们介绍了马尔可夫不等式,它利用期望值来界定概率。本节中,我们将基于马尔可夫不等式来推导切比雪夫不等式,并展示它在某些情况下能提供更精确的估计。



从马尔可夫不等式推导


马尔可夫不等式指出,对于一个非负随机变量 Y,有:


P(Y ≥ a) ≤ E[Y] / a



为了推导切比雪夫不等式,我们令 Y = (X - μ)²。显然,Y 是一个非负随机变量。



根据马尔可夫不等式,我们可以得到:


P((X - μ)² ≥ a²) ≤ E[(X - μ)²] / a²



请注意,事件 |X - μ| ≥ a 等价于事件 (X - μ)² ≥ a²。因此,上式左边就是 P(|X - μ| ≥ a)。


同时,根据方差的定义,E[(X - μ)²] 正是随机变量 X 的方差 Var(X)。


将这两个事实代入上式,我们就得到了切比雪夫不等式:



P(|X - μ| ≥ a) ≤ Var(X) / a²



这个推导过程清晰地展示了切比雪夫不等式如何从更基础的马尔可夫不等式演化而来,并引入了方差这一衡量数据离散程度的关键概念。



与马尔可夫不等式的比较



为了理解切比雪夫不等式的优势,我们来看一个具体例子。假设随机变量 X 服从参数 λ=1 的指数分布。



以下是使用两种不等式对 P(X ≥ a) 进行估计的结果:



- 使用马尔可夫不等式:对于指数分布
Exp(1),其期望E[X] = 1。根据马尔可夫不等式,有:
P(X ≥ a) ≤ E[X] / a = 1 / a



- 使用切比雪夫不等式:首先,我们将事件
X ≥ a进行变换。因为μ = 1,所以X ≥ a等价于X - 1 ≥ a - 1。一个更强的条件是|X - 1| ≥ a - 1(因为绝对值要求两边都满足)。因此:
P(X ≥ a) ≤ P(|X - 1| ≥ a - 1)
然后应用切比雪夫不等式。指数分布Exp(1)的方差Var(X) = 1。令不等式中的a为(a-1),得到:
P(|X - 1| ≥ a - 1) ≤ Var(X) / (a-1)² = 1 / (a-1)²


通过比较可以发现,当 a > 1 时,分母 (a-1)² 的增长速度远快于 a。因此,1/(a-1)² 这个上界通常比 1/a 更小、更紧,这意味着切比雪夫不等式给出了一个更精确的概率上限估计。



总结
本节课中我们一起学习了切比雪夫不等式。我们首先回顾了马尔可夫不等式,并以此为基础推导出了切比雪夫不等式的公式 P(|X - μ| ≥ a) ≤ Var(X) / a²。该不等式利用随机变量的方差,为其偏离均值的程度设定了一个概率上界。





通过一个指数分布的例子,我们比较了切比雪夫不等式和马尔可夫不等式。结果表明,由于方差包含了比期望更多的分布信息(离散程度),切比雪夫不等式往往能提供一个更严格、更有效的概率上界。这是分析随机变量尾部概率行为的一个强大工具。
065:中心极限定理 📊

在本节课中,我们将要学习中心极限定理。这是概率论与统计学中最重要的定理之一,它解释了为什么许多独立随机变量之和的分布会趋近于正态分布。




概述


在本模块中,我们已经讨论了多个极限定理。我们介绍了马尔可夫定理,探讨了墨菲定律及其启示,并学习了切比雪夫不等式。现在,我们将探讨一个可能最重要、也最常用的定理——中心极限定理。





中心极限定理的定义



中心极限定理的表述如下:




设 X₁, X₂, ... 是一系列独立同分布的随机变量。


每个变量具有均值 μ 和方差 σ²。
那么,以下标准化和式的分布:





Zₙ = (X₁ + X₂ + ... + Xₙ - nμ) / (σ√n)

当 n 趋近于无穷大时,会趋近于标准正态分布。




标准正态分布是指均值为 0、方差为 1 的正态分布。我们不会在此证明该定理,因为它在任何统计学教材中都有详细记载。我们将通过一个示例问题来解释其应用。

应用示例:天文学家的测量问题
假设一位天文学家正在测量一个距离。由于环境因素,每次测量结果都会有所不同。她将进行一系列测量,然后计算这些测量值的平均值,以获得该距离的中心趋势。




我们假设这些测量值是独立同分布的。这意味着每次观测不依赖于前一次观测,并且所有观测都来自同一个分布。


我们进一步假设这些观测值具有共同的均值 μ 和共同的方差 σ²。为了具体说明,我们设方差 σ² = 4。


现在的问题是:这位天文学家需要进行多少次测量,才能以95%的置信度确保其样本平均值与真实均值 μ 的误差在 ±0.5 光年之内?


问题求解过程




首先,我们定义标准化变量 Zₙ:



Zₙ = (Σᵢ Xᵢ - nμ) / (σ√n)



我们的目标是求解概率:




P( -0.5 ≤ (Σᵢ Xᵢ / n) - μ ≤ 0.5 ) ≥ 0.95


为了应用中心极限定理,我们对不等式进行变换。将不等式两边同时乘以 √n / σ(其中 σ = 2),得到:

P( -0.5 * (√n / 2) ≤ Zₙ ≤ 0.5 * (√n / 2) ) ≥ 0.95



根据中心极限定理,当 n 足够大时,Zₙ 近似服从标准正态分布 N(0, 1)。因此,上述概率可以表示为标准正态分布的累积分布函数 Φ:

Φ(0.5√n / 2) - Φ(-0.5√n / 2) ≥ 0.95



由于标准正态分布是对称的,Φ(-a) = 1 - Φ(a),因此上式可简化为:

2Φ(√n / 4) - 1 ≥ 0.95

Φ(√n / 4) ≥ 0.975


接下来,我们查找标准正态分布表,找到使得 Φ(z) = 0.975 的 z 值。该值约为 1.96。


因此,我们建立方程:


√n / 4 ≈ 1.96

解这个方程求 n:

√n ≈ 1.96 * 4 = 7.84



n ≈ (7.84)² ≈ 61.47



结论



本节课中我们一起学习了中心极限定理及其应用。



中心极限定理指出,无论原始随机变量服从何种分布(只要其具有有限的均值和方差),大量独立同分布随机变量之和的标准化形式,其分布都会趋近于标准正态分布。

通过天文学家测量距离的示例,我们展示了如何利用该定理来确定所需的样本量,以达到特定的精度和置信水平。计算结果表明,大约需要 62 次测量,才能以95%的置信度将误差控制在 ±0.5 光年之内。




这个定理是统计学中许多推断方法(如置信区间和假设检验)的理论基础,理解它对于掌握更高级的统计概念至关重要。
066:中心极限定理应用实例 📊




在本节课中,我们将学习中心极限定理的一个强大应用:如何利用它从任何分布的数据中推断总体特性,并进行概率预测。我们将通过一个具体的例子来演示这个过程。
概述

上一节我们介绍了中心极限定理,并了解了如何用它来估算达到特定置信水平所需的样本量。本节中,我们来看看中心极限定理的另一个核心应用:它如何帮助我们理解任何分布的数据,从而进行假设检验或预测。

中心极限定理指出,无论原始数据来自何种分布(例如高度偏斜的指数分布或正态分布),当我们从该分布中抽取多个观测值,计算其样本均值,并进行标准化处理后,这个标准化后的统计量会随着样本量 n 的增大而趋向于服从标准正态分布。



其核心公式如下:





Z = (X̄ - μ) / (σ / √n)





其中:
X̄是样本均值。μ是总体均值。σ是总体标准差。n是样本量。




当 n 足够大时,Z 近似服从标准正态分布。这意味着,即使我们不知道原始数据的精确分布,只要样本量足够大,我们就能利用正态分布的性质对样本均值进行推断。


应用实例:推特用户关注者数量分析




让我们通过一个例子来具体说明。假设我们研究一群参与在线辩论的推特用户。


我们抽取了一个包含 31 名用户的样本。经计算,该样本用户的平均关注者数量为 1241.87,标准差为 2017.51。



现在,我们想知道:如果未来再抽取一个由31名用户组成的新样本,其平均关注者数量大于2000的概率是多少?





即使我们清楚推特关注者数量的原始分布是高度右偏的(少数名人拥有海量关注者,而大多数普通用户关注者较少),中心极限定理也允许我们进行此项计算。




利用中心极限定理进行推断

根据中心极限定理,对于样本量 n = 31 的样本均值 X̄,我们可以确定其分布特性。





以下是关键的计算步骤:



- 样本均值的均值:样本均值
X̄的期望值等于总体均值μ。μ_X̄ = μ = 1241.87




- 样本均值的标准差:样本均值
X̄的标准差(即标准误)等于总体标准差σ除以样本量n的平方根。σ_X̄ = σ / √n = 2017.51 / √31 ≈ 362.35

- 分布形态:当
n >= 30时,我们可以认为样本均值X̄的分布近似服从正态分布,其均值为μ_X̄,标准差为σ_X̄。



因此,问题“新样本均值大于2000的概率”转化为:在一个均值为1241.87、标准差为362.35的正态分布中,随机变量取值大于2000的概率。
计算概率





我们可以使用统计软件来计算这个概率。计算逻辑是:
P(X̄ > 2000) = 1 - P(X̄ ≤ 2000)



在Excel中,可以使用公式:
=1 - NORM.DIST(2000, 1241.87, 362.35, TRUE)
在R语言中,可以使用代码:
1 - pnorm(2000, mean = 1241.87, sd = 362.35)



计算结果约为 0.0182 或 1.82%。


这意味着,未来随机抽取一个31名用户的样本,其平均关注者数量超过2000的概率大约为1.82%,这是一个较小概率事件。


中心极限定理的威力与要点总结



本节课中,我们一起学习了中心极限定理如何将现实世界中复杂、未知的分布问题,转化为我们熟悉的正态分布问题,从而进行概率推断和假设检验。


中心极限定理之所以强大,是因为它为我们提供了一套工具,只要样本量足够大(通常以 n >= 30 作为经验法则),我们就可以:
- 用样本均值
X̄估计总体均值μ。 - 计算样本均值的变异程度(标准误
σ/√n)。 - 最重要的是,认定样本均值
X̄的分布近似为正态分布。


这使得我们可以绘制正态概率分布图,并判断一个新的样本均值是否属于“正常”波动范围。如果某个样本均值落在分布极端的位置(例如尾部),我们就有理由怀疑这可能是一个统计异常值,或许意味着总体发生了某些变化。
最后,请务必牢记中心极限定理应用中的两个核心公式,它们是进行一切后续推断的基础:






- 样本均值的均值:
μ_X̄ = μ - 样本均值的标准差(标准误):
σ_X̄ = σ / √n



掌握这两个要点,你就能利用中心极限定理,对来自几乎任何分布的数据进行有效的统计分析了。
067:假设检验 📊








在本节课中,我们将要学习统计学中一个极其重要的概念——假设检验。假设检验是建模、预测和异常检测的核心工具,它允许我们基于数据,对某个关于总体的陈述(即假设)进行统计上的检验,以判断其是否显著成立。






上一节我们介绍了中心极限定理等极限定理,本节中我们来看看如何利用这些定理进行假设检验。





假设检验的基本概念






假设检验涉及两个对立的陈述,我们称之为假设。

以下是假设检验的两个核心组成部分:






- 零假设:通常记作 H₀。这是一个关于总体参数的明确陈述,例如“总体均值等于某个特定值”。它代表了“没有变化”或“基准状态”。
- 备择假设:通常记作 H₁ 或 Hₐ。这是与零假设对立的陈述,代表了研究者想要验证的“有变化”或“实验效应”。



一个假设必须是一个关于某事为真的明确陈述。例如,我们不说“均值没有变化”,而说“均值等于707”。



一个实例:特朗普的粉丝数变化



为了理解假设检验,我们来看一个例子:判断在某一周内,讨论特朗普的用户平均粉丝数是否发生了变化。








假设我们已知上个月(基准期)讨论特朗普的用户平均粉丝数为 μ = 707。
本周,我们随机抽取了 n = 50 名用户,计算得到样本平均粉丝数 x̄ = 650,样本标准差 s = 425。





我们的零假设是:本周的平均粉丝数没有变化,即 H₀: μ = 707。
备择假设是:本周的平均粉丝数发生了变化,即 H₁: μ ≠ 707。





利用中心极限定理进行计算




根据中心极限定理,当样本量足够大(n > 30)时,样本均值 x̄ 的抽样分布近似服从正态分布。






其分布的均值为我们假设的总体均值 μ₀ = 707。
其分布的标准差(即标准误)为:σₓ̄ = s / √n。




代入我们的数据:
σₓ̄ = 425 / √50 ≈ 60.1
因此,在零假设成立的前提下,我们本周观测到的样本均值 x̄ 应服从 N(707, 60.1²) 的正态分布。


接下来,我们计算在当前分布下,观测到 x̄ ≤ 650(或更极端情况)的概率。这可以通过计算正态分布的累积概率得到:
P(x̄ ≤ 650 | μ=707, σₓ̄=60.1)






使用统计软件(如R)计算,得到该概率 P ≈ 0.1715。





理解P值与决策





计算出的概率 0.1715 被称为 P值。它表示,如果零假设(平均粉丝数为707)是真的,那么我们观测到样本平均粉丝数为650或更低(更极端)的概率是17.15%。




这个概率不算很小。在统计学中,我们通常会预先设定一个显著性水平 α(常设为0.05)。如果P值小于α,我们认为观测到的数据在零假设下极不可能发生,从而有足够证据拒绝零假设。




在此例中,P值 (0.1715) > α (0.05),因此我们没有足够证据拒绝零假设。我们不能断定本周的平均粉丝数发生了显著变化。样本均值650与基准值707的差异,很可能只是随机抽样波动造成的。



单尾检验与双尾检验




在上面的例子中,我们的备择假设是 μ ≠ 707,这意味着我们关心均值在任何一个方向(增加或减少)上的变化。这称为双尾检验。我们将显著性水平α平分到正态分布的两侧尾部(每侧α/2 = 0.025)。





然而,有时研究者的兴趣只在一个方向上。这引出了单尾检验的概念:


- 右侧单尾检验:例如,特朗普团队可能只关心粉丝数是否显著增加。此时备择假设为 H₁: μ > 707。全部α=0.05的拒绝域都在分布的右尾。
- 左侧单尾检验:例如,竞争对手可能只关心粉丝数是否显著减少。此时备择假设为 H₁: μ < 707。全部α=0.05的拒绝域都在分布的左尾。





关键区别:在相同的α水平下,单尾检验比双尾检验更容易拒绝零假设(因为拒绝域全部集中在一侧,阈值更宽松),但前提是你必须事先有明确的方向性预测。




假设检验的逻辑总结

本节课中我们一起学习了假设检验的核心逻辑:







- 提出假设:建立明确的零假设 H₀ 和备择假设 H₁。
- 构建检验统计量:在 H₀ 为真的假设下,利用中心极限定理等工具,确定样本统计量(如样本均值)的抽样分布。
- 计算P值:根据实际观测到的数据,计算在 H₀ 成立时,得到当前结果或更极端结果的概率。
- 做出决策:将P值与预先设定的显著性水平α进行比较。如果 P值 < α,则拒绝 H₀,接受 H₁,认为变化是统计显著的;否则,不拒绝 H₀。




其根本思想是:我们假设H₀为真,然后看数据是否与此假设严重矛盾。如果矛盾程度足够大(P值很小),我们就怀疑并拒绝这个初始假设。 中心极限定理为我们提供了将实际问题转化为已知分布(正态分布)进行计算的理论基础。




这是一个需要仔细理解的概念,在后续模块中,我们将对假设检验进行更深入的探讨和练习。
068:卡牌概率技巧 🃏





在本节课中,我们将通过一个有趣的纸牌游戏,学习一个基于概率的“读心术”技巧。这个技巧不仅好玩,还能帮助我们理解马尔可夫不等式和马尔可夫链等核心统计概念。



游戏准备与规则 🎲




我们将使用一副标准的扑克牌。首先,我会洗几次牌,确保牌序是随机的。我无法看到牌面,但你可以看到。




以下是游戏的具体规则:
- 你需要在心中选择一个1到9之间的数字。
- 我将一张一张地翻开牌。
- 你需要根据翻开的牌来更新你的数字,直到牌堆用完。






游戏步骤详解 📝

为了让你更清楚地理解,我们来看一个具体的例子。







假设你最初选择的数字是3。游戏过程如下:
- 我翻开第一张牌,你心里默数“1”。
- 我翻开第二张牌,你心里默数“2”。
- 我翻开第三张牌,你心里默数“3”。此时,你到达了初始数字3对应的位置。现在,查看这张牌的点数,它将成为你的新数字。假设这张牌是8。
- 接着,你需要从下一张牌开始,心里默数8次。数到第8张牌时,查看它的点数,这又成为你的新数字。假设是6。
- 重复这个过程:从下一张牌开始数6次,查看点数,更新数字……如此循环,直到牌堆接近用完。



关于牌面点数的特殊规定:
- 数字牌(2-9)的点数就是其面值。
- 所有花牌(10、J、Q、K、A)的点数都视为1。



当牌堆即将用完时,如果你的当前数字是7,但剩下的牌不足7张,那么游戏结束。你最后看到的那张牌(即触发游戏结束的那张)的点数,就是你的最终数字。




进行游戏与“读心” 🧠



现在,请你在心中选定一个1到9之间的数字,然后跟随视频中翻牌的过程,按照上述规则在心中计数和更新数字。
(视频中演示翻牌过程...)






牌堆已经用完。现在,你的心中应该有一个由最后一张有效牌所确定的最终数字。

你准备好了吗?我要通过视频“读出”你心中的那张牌了。




我认为你最终想到的牌是 梅花7。



技巧原理揭秘 🔍



你可能会想,为什么无论最初选择哪个数字(1-9),最终都会指向同一张牌(梅花7)?这背后有概率统计的原理。




上一节我们体验了游戏过程,本节中我们来看看这个技巧为何有效。


核心原因在于牌面点数的设定和路径的收敛性。




首先,游戏中将10、J、Q、K、A都算作1,这大大增加了“1”出现的频率。“1”意味着你只需要向前移动一小步。这缩短了每次“跳跃”的距离。
其次,这个游戏的过程就像一个状态转移过程。你的“当前数字”就是一个状态,翻开的牌告诉你下一个状态是哪里。关键在于:如果两个不同的初始数字,在某个时刻指向了同一张牌,那么从此之后,它们的路径将完全重合,走向相同的终点。





由于牌堆中“1”很多,它像一个“吸引子”,大大增加了不同路径提前交汇(即“收敛”)到同一条主路径上的概率。一旦汇合,之后就会同步前进。在这个特定的牌序下,所有1-9的初始路径都很快地收敛到了以“梅花7”为终点的唯一路径上。




这解释了为什么看似随机的选择,却导向了确定的结果。


与统计概念的关联 📊







这个简单的纸牌游戏,其实直观地演示了马尔可夫链的初步思想。
- 状态:你的当前数字(1-9)可以看作不同的状态。
- 状态转移:翻开的牌面点数决定了你下一个状态是什么。例如,从状态“3”出发,根据下一张牌是几,你有一定的概率转移到状态“1”、“2”……或“9”。
- 收敛与稳态:无论从哪个初始状态(1-9)开始,在经过一系列状态转移后,所有路径都收敛到同一条序列上(最终到达“梅花7”)。在马尔可夫链中,这被称为达到了一个稳态或吸收态。






游戏之所以能成功,是因为它不满足事件的独立性(牌被抽出后不再放回),并且通过设计(大量点数为1的牌),使得状态转移矩阵具有让不同初始状态快速收敛到同一路径的性质。这背后可以用马尔可夫不等式等工具进行理论上的解释和概率上界的分析。

在接下来的模块中,我们将更详细地学习马尔可夫链。但在此之前,通过这个技巧,我们已经对状态、转移和收敛有了一个生动而具体的认识。




总结与练习 💡
本节课中,我们一起学习并揭秘了一个基于概率的卡牌读心术技巧。





我们了解到:
- 技巧的关键在于将大量牌(10-A)的点数设为1,以增加路径交汇的概率。
- 其核心原理是路径的收敛性:不同的起点最终会合并到同一条序列上。
- 这个现象直观地展示了马尔可夫链中状态转移和稳态收敛的基本概念。




你可以用家里的扑克牌尝试这个游戏(需要提前按视频中的顺序排好牌,或自己探索能让技巧成立的牌序)。无论对方选择1-9中的哪个数字,你都能准确“预测”最终指向的牌。这不仅是聚会中的趣味游戏,也是理解概率收敛性的绝佳方式。
069:R语言教程 🎲
在本节课中,我们将通过R语言代码来演示大数定律和中心极限定理。我们将从模拟抛硬币开始,逐步扩展到掷骰子,直观地展示随着试验次数增加,样本均值如何收敛于理论期望,以及样本均值的分布如何趋于正态分布。

准备工作 🧹

首先,我们需要清理R的工作环境和图形设备,确保从一个干净的状态开始。

# 清理工作空间
rm(list = ls())
# 清理所有图形
graphics.off()
模拟抛硬币 🪙

上一节我们完成了环境准备,本节中我们来看看如何模拟一个公平的抛硬币过程。我们将创建一个函数来模拟多次抛硬币,并计算其累积均值。


以下是创建 toss_coin 函数的步骤:


- 使用
sample函数进行随机抽样,模拟抛硬币的结果(0代表反面,1代表正面)。 - 参数
n指定试验次数,p指定正面朝上的概率。 - 计算每次试验后的累积正面次数,再除以试验次数,得到累积均值。
- 函数最终返回一个包含试验索引和累积均值的数据框。

toss_coin <- function(n = 30, p = 0.5) {# 模拟n次伯努利试验(抛硬币)flips <- sample(c(0, 1), size = n, replace = TRUE, prob = c(1-p, p))# 计算累积和cumulative_sum <- cumsum(flips)# 创建索引:1, 2, 3, ..., nindex <- 1:n# 计算累积均值:累积和 / 索引cumulative_mean <- cumulative_sum / index# 返回包含索引和累积均值的数据框return(data.frame(index = index, cumulative_mean = cumulative_mean))
}

运行这个函数,我们可以查看一次模拟的结果。

# 模拟30次抛硬币
x <- toss_coin(n=30)
# 查看数据框
print(x)


可视化抛硬币结果 📊


理解了模拟函数后,我们创建一个绘图函数来直观展示累积均值如何随着试验次数增加而变化。
以下是 plot_coin_tosses 函数的核心步骤:

- 调用
toss_coin函数生成数据。 - 使用
ggplot2绘制折线图,x轴为试验序号,y轴为累积均值。 - 添加一条红色水平线表示理论期望值(
p = 0.5)。 - 在图中添加文本注释,显示最终的样本均值、期望值和样本量。
library(ggplot2)plot_coin_tosses <- function(n=30, p=0.5) {# 获取抛硬币数据coin_tosses <- toss_coin(n, p)# 计算最终的样本均值last_mean <- tail(coin_tosses$cumulative_mean, 1)# 创建图形p <- ggplot(coin_tosses, aes(x = index, y = cumulative_mean)) +geom_line(color = "blue", size = 1) + # 绘制累积均值曲线geom_hline(yintercept = p, color = "red", size = 1, linetype = "dashed") + # 理论期望线ylim(0.25, 0.75) + # 设置y轴范围labs(x = "试验次数 (Index)", y = "累积均值 (Cumulative Mean)",title = paste(n, "次抛硬币的累积均值")) +theme_minimal()# 添加文本注释p <- p + annotate("text", x = n*0.7, y = 0.7, label = paste("最终均值:", round(last_mean, 3)),color = "darkgreen", size = 5)p <- p + annotate("text", x = n*0.7, y = 0.65, label = paste("理论期望:", p),color = "darkgreen", size = 5)p <- p + annotate("text", x = n*0.7, y = 0.6, label = paste("样本量 n =", n),color = "darkgreen", size = 5)return(p)
}# 生成并显示图形
plot_coin_tosses(30)
多次运行此绘图函数,你会发现:
- 在试验次数很少时,累积均值波动很大。
- 随着试验次数
n的增加,累积均值(蓝线)会越来越稳定地围绕理论期望值(红线,0.5)上下波动,并逐渐向其收敛。这直观地演示了大数定律:随着样本量增大,样本均值依概率收敛于总体均值。



模拟掷骰子 🎲

看过了抛硬币的例子,我们转向另一个经典随机实验——掷骰子。我们将模拟掷一个或多个六面骰子。
首先,创建一个模拟掷单个骰子的函数。


roll_die <- function(n = 1) {# 从1到6中随机抽取n次,模拟掷骰子outcome <- sample(1:6, size = n, replace = TRUE)return(outcome)
}# 掷一次骰子
roll_die(1)
# 掷两次骰子
roll_die(2)

在许多游戏中,如“双骰儿”(craps),需要掷两个骰子并计算点数之和。我们创建一个函数来模拟这个过程。
roll_dice_craps <- function() {# 掷两个骰子并求和sum(roll_die(2))
}# 模拟一次“双骰儿”
roll_dice_craps()
重复实验与频率分布 📈
为了理解结果的分布,我们需要进行大量重复实验。R中的 replicate 函数非常适合完成这个任务。

以下是使用 replicate 模拟掷骰子的步骤:

- 使用
replicate(times, expr)重复执行某个表达式。 - 用
table()统计各结果出现的频数。 - 绘制频数分布图,观察形状。


# 重复100次“双骰儿”实验
dice_results <- replicate(100, roll_dice_craps())
# 查看点数2到12出现的频数表
freq_table <- table(dice_results)
print(freq_table)# 绘制频数分布图
plot(freq_table, main = "100次双骰儿实验点数分布",xlab = "点数之和", ylab = "频数", col = "lightblue")


现在,让我们将实验次数增加到10,000次,观察分布的变化。

# 重复10,000次“双骰儿”实验
dice_results_large <- replicate(10000, roll_dice_craps())
freq_table_large <- table(dice_results_large)
plot(freq_table_large, main = "10,000次双骰儿实验点数分布",xlab = "点数之和", ylab = "频数", col = "lightgreen")


对比两次绘图结果,你会发现:
- 实验次数为100时,分布图不规则,有随机波动。
- 实验次数达到10,000时,分布图呈现出清晰的对称三角形状(两个骰子点数之和2到12的理论分布形状),结果更加稳定和精确。这再次体现了大数定律。

中心极限定理的演示 📉
最后,我们通过一个更系统的模拟来演示统计学中最重要的定理之一——中心极限定理。该定理指出,无论原始总体分布形状如何,当从总体中抽取足够多的独立样本并计算其均值时,这些样本均值的分布将近似服从正态分布。


我们将模拟以下过程:多次进行“掷k个骰子并求平均”的实验,然后观察这些平均值的分布。

# 设置模拟参数
num_simulations <- 10000 # 模拟实验的次数
sample_sizes <- c(1, 2, 10, 30) # 每次实验掷骰子的数量kpar(mfrow = c(2, 2)) # 将画布分为2x2的子图for (k in sample_sizes) {# 对每次模拟实验:掷k个骰子,计算其平均值sample_means <- replicate(num_simulations, mean(roll_die(k)))# 绘制样本均值的直方图hist(sample_means, breaks = 30, probability = TRUE,main = paste("每次掷", k, "个骰子的样本均值分布 (n=", num_simulations, ")", sep=""),xlab = "样本均值", col = "lightblue", border = "white")# 添加理论正态分布曲线作为参考(根据中心极限定理)theoretical_sd <- sqrt((35/12) / k) # 单个骰子方差为35/12curve(dnorm(x, mean = 3.5, sd = theoretical_sd), add = TRUE,col = "red", lwd = 2)# 在图上添加实际均值和理论均值abline(v = mean(sample_means), col = "blue", lwd = 2, lty = 2) # 实际样本均值abline(v = 3.5, col = "darkgreen", lwd = 2) # 理论总体均值
}par(mfrow = c(1, 1)) # 恢复为单图模式

观察这四张子图,你可以发现:
- k=1:分布是均匀的(1到6的每个整数概率相等),完全不是正态分布。
- k=2:分布开始呈现中间高、两边低的形状,类似三角分布。
- k=10:分布形状已经非常接近钟形的正态分布。
- k=30:分布几乎是一个完美的正态分布曲线。同时,样本均值的分布范围(x轴宽度)比k=1时窄得多,说明均值估计的变异性减小,精度增加。
蓝色虚线(实际样本均值)与绿色实线(理论总体均值3.5)几乎重合,说明估计非常准确。红色曲线是拟合的正态分布,与实际分布高度吻合。


这完美地演示了中心极限定理的两个核心要点:
- 分布形态:样本均值的分布随着样本量
k增大而趋于正态分布。 - 分布参数:该正态分布的均值等于总体均值(
μ = 3.5),方差等于总体方差除以样本量(σ²/k)。因此,样本量越大,样本均值的分布越集中,估计也越精确。
总结 🎯
本节课中我们一起学习了如何用R语言模拟随机实验来验证重要的统计原理:
- 我们通过
toss_coin函数模拟抛硬币,并观察到随着试验次数增加,累积样本均值逐渐稳定并收敛于理论概率(0.5),直观演示了大数定律。 - 我们通过
roll_die和replicate函数模拟掷骰子,发现大量重复实验后,结果的频率分布会稳定在理论概率附近。 - 我们通过系统模拟不同样本量下骰子平均点数的分布,清晰地展示了中心极限定理:无论单次掷骰子的均匀分布形态如何,当计算多次掷骰的平均值时,只要样本量足够大(例如30),这些平均值的分布就会接近正态分布,且其波动范围随样本量增大而缩小。

这些模拟实验强化了一个关键观念:在统计分析中,即使我们不知道数据背后的精确分布,只要能够获取足够多的独立样本,就可以利用样本均值的正态性质进行有效的统计推断。这正是许多统计方法(如参数估计、假设检验)的理论基石。
070:统计假设检验方法 📊







在本节课中,我们将要学习统计假设检验的基本概念和方法。假设检验是统计学中用于判断一个关于总体的陈述(即假设)是否可信的核心工具。我们将通过一个具体的例子,一步步理解如何设立假设、计算检验统计量、理解P值,并最终做出统计决策。



概述

假设检验的核心是评估一个关于总体的陈述(假设)是否成立。我们通常设立两个对立的假设:原假设和备择假设。检验的目的是基于样本数据,判断是否有足够的证据来拒绝原假设。我们永远不会“证明”备择假设为真,只能决定是否拒绝原假设。




假设的定义
一个假设是关于某事为真的一个陈述。




在假设检验中,我们通常处理两个假设:
- 原假设:通常表示为 H₀。它是我们想要检验的基准假设,通常代表“没有变化”、“没有效应”或“现状”。
- 备择假设:通常表示为 Hₐ。它也被称为研究假设或实验假设,代表我们想要证明的可能情况,例如“存在变化”或“存在效应”。



逻辑是:我们首先假定原假设为真,然后看样本数据是否与原假设严重矛盾。如果矛盾足够大,我们就拒绝原假设。



假设检验的步骤



上一节我们介绍了假设的基本概念,本节中我们来看看进行假设检验的具体第一步。



进行假设检验的第一步是设立原假设和备择假设。



我们用符号 H₀ 表示原假设,用 Hₐ 表示备择假设。




让我们通过一个例子来理解。假设我从推特上抽取了一个样本,并关注用户的粉丝数。我提出一个假设:本月用户的平均粉丝数与上个月相同,即707。那么我的假设可以如下设立:
- 原假设 H₀: 平均粉丝数 μ = 707
- 备择假设 Hₐ: 平均粉丝数 μ < 707 (我认为粉丝数下降了)


基本逻辑是:我从总体中抽样。如果本月抽取的样本与原假设一致,我就不采取行动。如果样本与原假设不一致,我们就会得出结论认为原假设是错误的。


我们设立原假设是为了能够检验它是否正确。我们假设平均粉丝数不变,然后试图证明这个假设是荒谬的。如果成功,就说明粉丝数确实下降了。这本质上就是我们进行异常检测的方法。
计算与决策




在设立了假设之后,我们需要通过计算来量化样本数据与原假设的偏离程度,并据此做出决策。




在这个例子中,假设我们抽取了50个账户,查看每个账户的粉丝数,发现平均粉丝数是650。650小于707,我们能得出什么结论?



如果原假设为真(μ = 707),那么我等于在说650约等于707。假设我还发现样本标准差是425,这意味着平均而言,用户粉丝数偏离均值425。



接下来,我可以计算样本均值的标准差(标准误):
标准误 = σ / √n = 425 / √50 ≈ 60.1



这样,我就在构建一个分布。这个分布基本上以707为中心,其标准差是60.1。而我发现650落在这个分布的某个位置(左侧)。



我的问题是:650是这个分布中一个合理的值吗?为了回答这个问题,我们需要计算一个检验统计量(例如Z值)及其对应的P值。




P值表示:在原假设为真的前提下,得到当前样本观测结果或更极端结果的概率。计算P值相当于计算从负无穷到当前检验统计量Z处,概率密度函数曲线下的面积。



如果使用微积分,公式可以表示为:
P值 = ∫_{-∞}^{Z} f(x | μ=707, σ=60.1) dx



其中 f(x) 是给定均值μ=707、标准差σ=60.1的正态分布概率密度函数。

通过计算(例如使用统计软件),我们得到P值约为 0.1715。


现在的问题是:这是一个不合理的值吗?如果P值很大(比如0.1715),说明当前观测到的结果(650)在原假设分布中很常见,我们没有理由拒绝原假设。如果P值很小,说明当前结果在原假设下极不可能发生,我们就有理由拒绝原假设。



显著性水平与决策边界


那么,我们如何界定P值“小”到什么程度才值得拒绝原假设呢?这引出了显著性水平的概念。



在大多数统计学中,我们通常划一条界线,使得分布尾部的面积为 0.05(即5%)。这个值记为 α(显著性水平)。这意味着,如果一个结果发生的概率小于5%(即二十次中发生不到一次),我们就会认为它“极端”到足以让我们质疑原假设。
因此,决策规则是:
- 如果 P值 < α(通常为0.05),则拒绝原假设。
- 如果 P值 ≥ α,则不拒绝(或无法拒绝)原假设。



在我们的例子中,P值0.1715 > 0.05,因此我们不会拒绝原假设。结论是:基于当前样本,没有足够证据表明平均粉丝数从707下降了。
另一个例子
如果改变问题,假设样本均值是608而不是650。






608离中心707更远。重新计算后,我们可能会得到一个P值,例如 0.0498。





由于0.0498 < 0.05,此时我们就会倾向于拒绝原假设。结论变为:有统计上显著的证据表明平均粉丝数低于707。



总结

本节课中我们一起学习了统计假设检验的核心流程:
- 设立假设:明确原假设 H₀ 和备择假设 Hₐ。
- 计算检验统计量与P值:基于样本数据,计算在原假设为真的情况下,得到当前结果或更极端结果的概率(P值)。
- 做出决策:将P值与预先设定的显著性水平 α(常取0.05)进行比较。若P值 < α,则拒绝原假设;否则,不拒绝原假设。




记住,假设检验的结论总是关于原假设的:我们要么拒绝它,要么无法拒绝它。拒绝原假设意味着有足够的统计证据支持备择假设所描述的情况。
071:t检验 🧪

在本节课中,我们将要学习一种非常重要的统计检验方法——t检验。我们将从它的历史起源开始,了解其核心概念、计算公式,并学习如何应用单样本和双样本t检验来解决实际问题。
概述
t检验是一种用于比较样本均值与总体均值,或比较两个样本均值之间是否存在显著差异的假设检验方法。它特别适用于样本量较小或总体标准差未知的情况。



t检验的起源 🍺



上一节我们介绍了假设检验的基本概念,本节中我们来看看一个在统计学发展史上非常有趣的故事。

在都柏林的健力士啤酒厂,人们发现正态分布在处理小样本数据时存在问题。威廉·希利·戈塞特发现,如果对正态分布进行修正,创建一种他称之为“t检验”的方法,就可以纠正正态分布带来的偏差。这对于酿造出当时口感极佳的健力士啤酒至关重要。



在当时,这被视为一项专有的商业秘密,重要到他们无法承担将其公开发表、让竞争对手知晓的后果。因此,威廉·希利·戈塞特决定以“学生”为笔名发表这项成果。于是,它被作为“学生t检验”发表,直到数十年后才被揭露这是健力士的商业秘密,他们一直在使用统计和实验设计来酿造世界上最好的啤酒。戈塞特本人在去世后才因此获得赞誉。


t分布与t统计量 📊

戈塞特的研究核心在于,他发现样本分布的形状取决于样本量的大小。
他确定,随着样本量N越来越大,样本均值的分布会逐渐逼近正态分布。当样本量达到30左右时,使用正态分布进行近似通常不会有太大偏差。然而,对于较小的样本量,其分布尾部会略微更宽或更“肥厚”。






这种分布的形状完全取决于你样本中的数量。t检验统计量的公式如下:


T = (样本均值 - 假设的总体均值) / (样本均值的标准误差)


根据中心极限定理,样本均值的标准误差等于样本标准差除以样本量的平方根:




标准误差 = s / √n



这里有一个重要的参数,叫做自由度。对于这个特定的检验,自由度总是 n - 1。



t分布总是以零为中心。请注意,如果我有一个样本均值,并减去我认为的总体均值,如果我猜对了,那么差值就是零——这是最可能出现的理想值。然后,这个差值被标准误差所缩放。这样,我就将原始数据转换到了一个新的尺度上。但现在,当我估计概率时,与之比较的分布变成了这个t分布,并且它将使用一个单一参数——自由度,它等于n-1。




你采集数据样本,将其转化为检验统计量T,然后将其与t分布进行比对。




单样本t检验示例



让我们使用之前的一个例子来具体说明。


在这个案例中,我们的t统计量计算如下:
T = (650 - 707) / (425 / √50)




这个计算结果等于 -57 / 60.1,最终得到 T ≈ -0.9484。


然后,我们使用t分布(此时自由度为49)来计算p值。我们从负无穷积分到T值,得到的p值约为 0.1738。
同样,我们没有足够的证据落在分布的尾部来拒绝原假设,因此我们得出结论:情况仍然正常。





如果我们观察到的样本均值是600,那么计算会发生变化:
T = (600 - 707) / (425 / √50) ≈ -1.78



此时计算出的p值约为 0.0406。请注意,在这个特定案例下,使用t分布比使用正态分布需要更高的阈值(即更极端的t值)才能达到统计显著性。

双样本t检验



我们还有这种检验的一个变体,称为双样本t检验。


双样本t检验用于以下情况:我从一个总体中采集一个样本的数据点,从另一个总体中采集第二个样本的数据点,我想比较它们,看看它们是否相同或不同。
现在,在这种情况下,我不仅有一个x̄,我还有来自样本一的x̄1和来自样本二的x̄2。因此,我们的设定略有不同。





首先,我们检验的假设是:第一个样本的均值等于第二个样本的均值。
H₀: μ₁ = μ₂




备择假设则可以根据需要设定,例如它们不同。
H₁: μ₁ ≠ μ₂



我们将证明的责任放在原假设上:让我们先假设它们相同,然后看看是否有足够的信息让我们得出不同的结论。




我的T统计量现在设定如下。如果我从等式两边减去μ₂,那么我假设的差值就是0。所以我的t检验公式是:




T = (x̄₁ - x̄₂) / (合并标准误差)



那么,什么是合并标准误差呢?它看起来很像这样:


合并标准误差 = √[ ( (n₁-1)s₁² + (n₂-1)s₂² ) / (n₁ + n₂ - 2) ] * √(1/n₁ + 1/n₂)



(注:视频中公式描述有歧义和不完整,此处采用标准双样本t检验的合并方差公式进行整理和修正,其核心思想是对方差进行加权平均。)



这合并了标准差:我根据每个样本的观测数量对其方差进行加权(第一个样本的方差乘以它的样本量减一,第二个样本的方差乘以它的样本量减一),然后除以总观测数减2。这样得到了方差的加权平均值,然后我取平方根来得到x̄₁ - x̄₂之下的合并标准误差。这就得到了我的双样本t检验统计量。然后,我以同样的方式将这个检验统计量与参考分布进行比较。



双样本t检验示例


以下是一个例子:公立学校和私立学校的教师薪资是否存在差异?




在这个例子中,我们有:
- 35所私立学校,平均薪资为88.19k/年,标准差为26.21k。
- 30所公立学校,平均薪资为73.18k/年,标准差为23.95k。




我们的假设是:
- H₀: μ_私立 = μ_公立
- H₁: μ_私立 ≠ μ_公立



现在,t统计量将使用我们的公式计算:
T = (88.19 - 73.18) / 合并标准误差



经过计算(代入上述合并标准误差公式),我们得到一个统计量 T ≈ 2.395(视频中计算为负值,但根据数据应为正值,此处以逻辑和常见计算为准)。

当我们将其与t分布(自由度为 35+30-2=63)进行比较时,发现对应的p值约为 0.0196。这小于0.05,因此我们将拒绝“它们相同”的原假设,并得出支持备择假设“它们不同”的结论。
单尾与双尾检验


这里有一个重要的点:你有时会听到人们讨论是做单尾检验还是双尾检验。
单尾检验只关注一个方向的概率。例如,它可能只检验“私立学校教师薪资是否显著高于公立学校”这个假设,而完全不考虑相反方向的可能性。


双尾检验则关注两个方向。当我们说“检验它们是否不同”时,这就是一个标准的双尾检验。在双尾检验中,你将显著性水平(如0.05)平分到两个尾部(每边0.025)。这意味着,要达到统计显著,差异的阈值比单尾检验更为严格。如果你有理由相信差异只可能出现在一个方向(更高或更低),那么你用于判断的阈值就会宽松一些。
置信区间

最后我想介绍的一个概念是置信区间。

我喜欢用一种与你可能在书中看到的略有不同的方式来推导它。看这个检验统计量:
T = (x̄ - μ₀) / (s/√n)
如果我在等式两边同时乘以 (s/√n),得到:
T * (s/√n) = x̄ - μ₀
然后,如果我在两边同时加上 μ₀,并减去 T*(s/√n),得到:
μ₀ = x̄ ± T * (s/√n)
这个公式说明,给定一个样本均值 x̄,我可以构建一个区间。这个区间的宽度是 T * (s/√n)。这个T值基于你所关注的置信水平。例如,你是想要一个对应5%拒绝水平的t值,还是1%拒绝水平的t值?这将影响这个区间的宽度,因为 T*(s/√n) 的宽度取决于你的数据。
随着我根据置信水平缩小或扩大这个区间,我可以确信真实的总体均值 μ 有特定概率(如95%)落在这个区间内。我们无法完美地知道它。
例如,如果我想围绕假设值 μ₀ = 707 构建一个置信区间,我可以计算:
μ = 707 ± T * (425 / √50)
为了找到对应p值为0.05(双尾,每尾0.025)的t值,我们查找自由度为49的t分布,得到 T ≈ 2.0096。
代入计算:707 ± 2.0096 * (425 / √50) ≈ 707 ± 120.78
这给了我一个区间 [586.22, 827.78]。这告诉我,基于我得到的样本,真实的粉丝均值有95%的可能性落在这个范围内。
使用置信区间也可以进行类似于双样本t检验的检验:如果我用私立学校数据构建一个置信区间,再用公立学校数据构建一个置信区间,如果它们重叠,那么真实的均值有可能落在重叠的交集中;如果它们不重叠,那么真实的均值就不可能同时落在两个区间内,这样我们就可以说它们在统计上是不同的。
总结
本节课中我们一起学习了t检验。我们从其诞生于健力士啤酒厂的历史故事开始,理解了t分布如何修正小样本下正态分布的偏差。我们掌握了单样本t检验的公式 T = (x̄ - μ₀) / (s/√n) 及其自由度 df = n-1 的概念。接着,我们扩展到了双样本t检验,学习了如何比较两个独立样本的均值,其核心在于计算合并标准误差。我们还探讨了单尾检验与双尾检验的区别,以及如何构建和解释置信区间。通过薪资差异的实例,我们演练了完整的假设检验步骤:设立假设、计算检验统计量、确定p值并做出决策。t检验是数据分析中用于比较均值的强大工具,特别适用于样本量较小的情况。
072:回归分析 📈
















在本节课中,我们将要学习回归分析。回归分析是一种强大的统计工具,用于探索和量化变量之间的关系。我们将从中学学过的线性方程开始,逐步深入到统计模型、假设检验以及如何评估模型的好坏。最后,我们会看到回归分析如何成为机器学习的基础。








从线性方程到回归模型









上一节我们介绍了回归分析的基本概念,本节中我们来看看它的数学表达是如何从简单的线性方程演变而来的。











回想一下中学的线性方程:y = Mx + B。在这个方程中,y 和 x 是变量,它们会取不同的值。而 M 和 B 是参数,它们通常是固定不变的。









例如,给汽车加油。假设汽油价格是每加仑3美元,这就是斜率 M。我可以选择加多少加仑汽油(x),而我最终支付的价格(y)就取决于这个数量。如果我加10加仑,支付30美元;加5加仑,支付15美元。变量 x 和 y 变化了,但参数(每加仑3美元)保持不变。







在统计学中,我们将这个方程改写为更通用的形式:
Y = β₀ + β₁X + ε







Y:因变量(我们想要预测或解释的变量)。X:自变量(我们用来进行预测的变量)。β₀:截距参数(当X=0时Y的值)。β₁:斜率参数(X每变化一个单位,Y的平均变化量)。ε:误差项(模型未能解释的随机波动)。









我们通常用 Ŷ 表示模型的预测值:Ŷ = β₀ + β₁X。因此,误差 ε 就是实际值 Y 与预测值 Ŷ 之间的差异:ε = Y - Ŷ。








解释方差:R² 的作用










上一节我们建立了回归模型,本节中我们来看看如何衡量这个模型解释数据的能力。







继续用汽车加油的例子,假设我们研究行驶里程(Y)与耗油量(X)的关系。数据点会散布在一条直线附近,但不会完全在直线上,因为有误差(如上坡、海拔等因素)。






我们关心的是,X 能在多大程度上解释 Y 的变化。Y 自身有一个总方差,称为总平方和(SST),公式为:
SST = Σ(Yᵢ - Ȳ)²
其中 Ȳ 是 Y 的平均值。这衡量了 Y 自身的波动程度。










当我们用回归线拟合数据后,可以计算误差平方和(SSE),即每个数据点的实际值 Y 与模型预测值 Ŷ 之差的平方和:
SSE = Σ(Yᵢ - Ŷᵢ)²







决定系数 R² 衡量了模型解释的方差比例,其公式为:
R² = 1 - (SSE / SST)









- 如果模型完全拟合所有数据点(
SSE = 0),则R² = 1,表示模型解释了Y的全部方差。 - 如果模型预测能力等同于直接用平均值预测(即回归线是水平的,
Ŷ = Ȳ),则SSE = SST,R² = 0,表示模型完全不能解释Y的方差。 R²的取值范围在0到1之间(或0%到100%),值越大,说明模型对数据的拟合越好,X对Y的解释力越强。


假设检验:X 和 Y 真的有关系吗?














仅仅有一个模型和 R² 还不够,我们需要从统计上检验自变量 X 是否真的对因变量 Y 有显著影响。这需要通过假设检验来完成。






我们的零假设(H₀)和备择假设(H₁)是:
H₀: β₁ = 0(斜率为零,即X与Y无关)H₁: β₁ ≠ 0(斜率不为零,即X与Y有关)









为了进行 t 检验,我们需要满足以下六个核心假设:






以下是进行线性回归 t 检验前必须验证的六个核心假设:
- 线性关系:
X和Y之间存在线性关系。 - 误差均值为零:所有误差项
ε的平均值为0。 - 误差正态分布:误差项
ε服从正态分布。 - 同方差性:误差项的方差在所有
X水平上保持恒定(不存在“喇叭形”、“漏斗形”或“橄榄球形”的分布)。 - 独立性:观测值之间相互独立(通常指没有时间序列上的自相关)。
- 零假设为真:在进行检验时,我们暂时假定
H₀成立。





如果这些假设成立,那么我们可以计算 t 统计量:
t = (估计的β₁ - 假设的β₁) / β₁的标准误
在 H₀ 下,假设的 β₁ 为0。软件会输出回归系数、标准误、t 值和对应的 p 值。







关键逻辑:如果计算出的 p 值很小(例如小于0.05),并且我们已经验证了前五个假设基本成立,那么我们就有足够的证据拒绝零假设,得出结论:β₁ 显著不为0,即 X 与 Y 之间存在统计上显著的关系。






模型诊断与变量选择








上一节我们学习了如何检验关系的显著性,本节中我们来看看如何诊断模型问题以及处理多个自变量的情况。









诊断假设是否成立
我们通过可视化方法来诊断:
- 残差图:绘制残差(
Y - Ŷ)与预测值Ŷ或自变量X的散点图。用于检查线性关系和同方差性。理想的残差图应随机均匀分布在0线上下,无特定模式。 - 正态概率图(Q-Q图):用于检查误差正态分布。如果点大致分布在一条直线附近,则正态性假设可被接受。
- 残差序列图:按数据收集顺序绘制残差,用于检查独立性。应无明显的趋势或周期性模式。





多元回归与变量选择
现实中,影响 Y 的因素通常不止一个。我们可以建立多元线性回归模型:
Y = β₀ + β₁X₁ + β₂X₂ + ... + βₖXₖ + ε

这时会出现新情况:
- P值的变化:当加入新的变量时,原有变量的显著性(p值)可能会改变,因为变量之间可能存在相关性(共线性)。
- R² 只增不减:增加新的自变量,模型的 R² 永远不会下降,总会增加或持平。因此,人们常用调整后 R² 来惩罚模型中加入过多不重要的变量。
以下是几种常见的变量选择策略:
- 前向选择:从空模型开始,每次加入一个最显著的变量,直到没有显著变量可加。
- 后向消除:从包含所有变量的全模型开始,每次移除一个最不显著的变量,直到所有变量都显著。
- 理论驱动:根据领域知识或前人研究,先放入已知重要的变量(“控制变量”),再检验其他变量是否还能提供额外信息。
交互效应
有时,一个变量对 Y 的影响取决于另一个变量的水平,这称为交互效应。例如,调光开关(X₁)的效果取决于电路断路器(X₂)是否闭合。
在模型中,我们通过加入自变量的乘积项来刻画交互效应:
Y = β₀ + β₁X₁ + β₂X₂ + β₃(X₁ * X₂) + ε
然后可以分别检验 β₁、β₂ 和 β₃ 的显著性。
回归与机器学习
回归分析是许多机器学习方法的基础。本质上,机器学习中的监督学习(如预测、分类)就是在拟合一个复杂的“回归”模型。
- 预测:直接使用回归模型预测连续值(如房价、销量)。
- 分类:通过逻辑回归等模型,预测某个事件发生的概率(如邮件是否为垃圾邮件)。虽然输出是概率,但其核心思想与回归一脉相承。
- 支持向量机等:可以看作是在寻找以最优化方式(如最大间隔)来“划分”或“拟合”数据的边界,是回归思想的延伸和扩展。
机器学习通过使用更复杂的模型(如神经网络)、引入正则化防止过拟合、以及利用大量数据自动学习参数,极大地扩展了回归分析的应用范围。
总结
本节课中我们一起学习了回归分析的核心内容:
- 模型基础:回归模型
Y = β₀ + β₁X + ε源于线性方程,用于描述变量间关系。 - 拟合优度:使用 R² 衡量模型解释数据方差的能力。
- 统计推断:通过建立假设(
H₀: β₁ = 0)并进行 t 检验,判断关系是否统计显著。这依赖于线性、误差正态、同方差、独立等核心假设。 - 模型诊断:利用残差图、正态概率图等工具验证假设是否成立。
- 多元扩展:在多元回归中,需要注意变量选择策略和交互效应的检验。
- 广泛联系:回归分析是机器学习的基石,其“利用变量预测结果”的思想贯穿于众多预测与分类算法之中。
理解回归分析不仅能帮助你解读数据间的关系,更是踏入统计建模和机器学习领域的关键一步。
073:概述

在本教程中,我们将学习如何使用R语言进行统计检验和线性回归分析。我们将涵盖假设检验、置信区间以及线性回归模型的构建与诊断。通过具体的代码示例,我们将一步步演示如何从数据中得出结论。
R语言统计检验教程:2:假设检验
上一节我们介绍了本教程的主要内容,本节中我们来看看如何进行假设检验。我们将从一个关于推特账户关注者数量的例子开始。
首先,我们需要清理工作空间,确保没有遗留的变量影响分析。
# 清理工作空间
rm(list = ls())
假设我们有一个基线数据:一个月前,推特账户的平均关注者数量为707。现在我们收集了一个包含50个账户的新样本,其平均关注者数量为650,样本标准差估计为425。问题是,这个下降是否具有统计显著性?
我们首先应用中心极限定理来计算样本均值的标准差。
# 输入数据
x <- 650 # 新样本均值
x_bar <- 707 # 基线均值
s <- 425 # 样本标准差
n <- 50 # 样本量# 计算样本均值的标准差
s_x_bar <- s / sqrt(n)
接下来,我们使用pnorm函数计算P值,检验新观测值650是否显著低于基线均值707。
# 计算单侧(下尾)P值
p_value_norm <- pnorm(x, mean = x_bar, sd = s_x_bar)
p_value_norm
得到的P值约为0.17,大于常用的显著性水平0.05。因此,我们没有足够的证据拒绝原假设。即使平均减少了57个关注者,这种差异在统计上并不显著。
如果我们观测到的均值是608,结果会如何?
# 测试另一个值
x2 <- 608
p_value_norm2 <- pnorm(x2, mean = x_bar, sd = s_x_bar)
p_value_norm2
此时P值小于0.05,我们可以得出结论,关注者数量显著下降。
然而,为了减少偏差,通常更推荐使用t检验。以下是使用t检验的步骤。
# 计算t检验统计量
t_stat <- (x - x_bar) / (s / sqrt(n))# 计算t分布下的P值(单侧,下尾)
p_value_t <- pt(t_stat, df = n - 1)
p_value_t
t检验得到的P值约为0.1738,与正态近似的结果相似,但通常更保守。
如果观测值大于均值(例如764),我们需要计算上尾概率。
# 测试大于均值的情况
x3 <- 764
t_stat3 <- (x3 - x_bar) / (s / sqrt(n))
p_value_t3 <- 1 - pt(t_stat3, df = n - 1) # 计算上尾概率
p_value_t3
R语言统计检验教程:3:双样本t检验
上一节我们介绍了单样本t检验,本节中我们来看看如何比较两个独立样本的均值,即双样本t检验。
我们以大学教师薪资数据为例。私立学院35名教师的平均薪资为88.19k,标准差为26.21k。公立学院30名教师的平均薪资为73.18k,标准差为23.95k。问题是两者是否存在显著差异。
首先输入数据。
# 私立学院数据
x1 <- 88.19
s1 <- 26.21
n1 <- 35# 公立学院数据
x2 <- 73.18
s2 <- 23.95
n2 <- 30
计算合并标准差和t统计量。
# 计算合并标准差
s_pooled <- sqrt(((n1 - 1) * s1^2 + (n2 - 1) * s2^2) / (n1 + n2 - 2))# 计算t统计量
t_stat_two <- (x1 - x2) / (s_pooled * sqrt(1/n1 + 1/n2))
t_stat_two
由于t统计量为正,我们计算上尾概率。对于双侧检验,需要将单侧P值乘以2。
# 计算单侧P值(上尾)
p_one_sided <- 1 - pt(t_stat_two, df = n1 + n2 - 2)# 计算双侧P值
p_two_sided <- 2 * p_one_sided
p_two_sided
双侧P值约为0.0196,小于0.05,因此我们可以得出结论,私立和公立学院教师的平均薪资存在显著差异。
R语言内置的t.test函数可以简化这个过程。以下是使用模拟数据的例子。
# 生成两个模拟数据集
set.seed(123) # 确保结果可重现
set_one <- rnorm(30, mean = 5, sd = 2)
set_two <- rnorm(30, mean = 7, sd = 2)# 使用t.test函数进行双侧检验
test_result <- t.test(set_one, set_two, alternative = "two.sided")
test_result
查看输出的P值,可以判断是否拒绝原假设。
R语言统计检验教程:4:配对样本t检验
上一节我们比较了两个独立样本,本节中我们来看看配对样本t检验。这种检验适用于两组观测值来自同一受试者或配对对象的情况,例如品尝两种配方的饼干。
假设我们有每位受试者对两种配方(A和B)的评分。我们关心的是评分差异,而不是单独的均值。
# 假设set_one和set_two是配对数据(例如,同一批人品尝两种饼干)
# 计算差异向量
difference <- set_one - set_two# 对差异进行t检验,检验其均值是否显著不为0
paired_test <- t.test(difference, mu = 0, alternative = "two.sided")
paired_test
配对t检验考虑了配对关系,通常能提供更精确的检验。如果差异均值为负(即大多数人更喜欢配方B),但我们在检验中指定alternative = "greater"(检验配方A是否更好),则会得到一个很大的P值,表明该假设不被支持。
# 错误方向的检验示例
paired_test_wrong <- t.test(difference, mu = 0, alternative = "greater")
paired_test_wrong
R语言统计检验教程:5:置信区间
上一节我们介绍了各种t检验,本节中我们来看看如何为总体均值构建置信区间。
回到推特关注者的例子。我们有一个样本均值x_bar = 707,样本标准差s = 425,样本量n = 50。我们希望构建总体均值的95%置信区间。
计算过程如下:
# 计算t分布的分位数(双侧,95%置信水平)
t_critical <- qt(0.975, df = n - 1) # 0.025在每侧尾部# 计算误差范围
margin_of_error <- t_critical * (s / sqrt(n))# 计算置信区间下限和上限
ci_lower <- x_bar - margin_of_error
ci_upper <- x_bar + margin_of_error
c(ci_lower, ci_upper)
我们得到置信区间约为[586, 828]。这意味着我们有95%的信心认为真实的平均关注者数量在这个区间内。如果未来的观测值落在这个区间外,我们可能认为发生了显著变化。
对于已有的数据集,我们可以直接从t.test的结果中提取置信区间。
# 对set_one数据计算置信区间
test_for_ci <- t.test(set_one)
confidence_interval <- test_for_ci$conf.int
confidence_interval
R语言统计检验教程:6:线性回归入门
上一节我们学习了参数估计的区间,本节中我们将转向预测模型,学习线性回归。
我们使用一个关于汽车加油量和行驶里程的示例数据集。目标是建立行驶里程(因变量)关于加油量(自变量)的线性模型。
首先,创建数据框并查看数据。
# 创建数据框
gas_data <- data.frame(gallons = c(10, 15, 8, 12, 9, 11, 7, 14, 13, 10),miles = c(250, 380, 200, 300, 230, 280, 180, 350, 320, 255)
)# 查看数据
head(gas_data)
R语言统计检验教程:7:数据探索与可视化
在构建模型前,进行数据探索至关重要。以下是关键步骤。
首先,绘制散点图观察变量间关系。
# 绘制散点图与平滑曲线
scatter.smooth(gas_data$gallons, gas_data$miles,xlab = "Gallons of Gas",ylab = "Miles Driven",main = "Miles vs. Gallons")
图形大致呈线性关系,适合线性回归。
其次,检查异常值。我们可以使用箱线图。
# 将图形区域分为1行2列,并排绘制箱线图
par(mfrow = c(1, 2))
boxplot(gas_data$gallons, main = "Gallons")
boxplot(gas_data$miles, main = "Miles")
par(mfrow = c(1, 1)) # 恢复默认图形设置
如果发现异常值(如数据录入错误),应在分析前修正或决定其处理方式。
第三,检查正态性假设。我们可以绘制密度图。
# 绘制密度图检查正态性
par(mfrow = c(1, 2))
plot(density(gas_data$gallons), main = "Density of Gallons", col = "lightblue", lwd = 2)
polygon(density(gas_data$gallons), col = "lightblue")
plot(density(gas_data$miles), main = "Density of Miles", col = "lightcoral", lwd = 2)
polygon(density(gas_data$miles), col = "lightcoral")
par(mfrow = c(1, 1))
分布大致呈钟形,正态性假设基本合理。
最后,计算相关系数。
# 计算相关系数
correlation <- cor(gas_data$gallons, gas_data$miles)
correlation
相关系数接近1,表明强正相关。
R语言统计检验教程:8:构建与评估线性模型
现在我们可以构建线性回归模型。
使用lm()函数拟合模型,并使用summary()查看结果。
# 拟合线性模型
model <- lm(miles ~ gallons, data = gas_data)# 查看模型摘要
summary(model)
模型摘要包含丰富信息:
- 系数估计:
(Intercept)是截距,gallons是斜率。斜率估计值约为24.6,P值极小(<2e-16),表明加油量对里程有显著影响。 - 截距:P值较大(0.584),统计上不显著。但从业务角度(加油量为0时里程应为0),我们可能选择保留截距。
- R-squared:多重R平方为0.94,说明模型能解释94%的里程变异,拟合度很好。
- Adjusted R-squared:调整R平方考虑了预测变量数量,在多元回归中更有参考价值。
R语言统计检验教程:9:回归诊断
得到模型后,必须检查回归假设是否成立,特别是残差的正态性和同方差性。
首先,检查残差的正态性。使用Q-Q图。
# 获取标准化残差
standardized_residuals <- rstandard(model)# 绘制Q-Q图
qqnorm(standardized_residuals, main = "Q-Q Plot of Standardized Residuals")
qqline(standardized_residuals, col = "red")
理想情况下,点应大致落在红色参考线上。若有明显偏离的点,可能需要检查对应数据。
其次,检查残差的同方差性。绘制残差与拟合值的散点图。
# 获取普通残差和拟合值
regular_residuals <- resid(model)
fitted_values <- fitted(model)# 绘制残差 vs. 拟合值图
plot(fitted_values, regular_residuals,xlab = "Fitted Values",ylab = "Residuals",main = "Residuals vs. Fitted")
abline(h = 0, col = "red", lty = 2) # 添加y=0参考线
我们希望残差随机、均匀地分布在0线周围,无明显模式。如果出现漏斗形或曲线模式,则可能违反同方差假设。
若发现异常点,应检查原始数据,决定是否修正或剔除,并重新评估模型。
R语言统计检验教程:10:总结
在本教程中,我们一起学习了使用R语言进行统计推断和建模的核心方法。
我们首先从假设检验开始,涵盖了单样本t检验、双样本t检验以及配对样本t检验,并演示了如何计算P值并做出统计决策。
接着,我们探讨了如何构建总体均值的置信区间,为参数估计提供了范围。
最后,我们深入学习了线性回归。从数据探索和可视化开始,到使用lm()函数构建模型,解读summary()输出中的系数、P值和R平方,最后通过残差分析进行回归诊断,确保模型假设的合理性。

通过本教程,你应该已经掌握了利用R语言对数据进行基本统计检验和建立简单线性回归模型的完整流程。这些技能是数据分析和科学计算的基础。
074:泊松过程 🧮

在本节课中,我们将要学习泊松过程。泊松过程是一种用于描述随机事件在时间上发生的模型,它在计算机科学、网络流量分析、排队论等领域有广泛应用。我们将从定义开始,逐步探讨其核心性质,并学习如何计算事件间的到达时间。
泊松过程的定义
上一节我们介绍了随机事件计数的概念,本节中我们来看看泊松过程的正式定义。
假设我们用一个随机变量 N(t) 来表示在时间区间 [0, t] 内发生的事件数量。例如,N(3) 表示在时间 0 到 3 之间发生的事件数。
如果一系列随机事件 {N(t), t ≥ 0} 的集合满足以下三个条件,那么我们就称这个集合是一个速率为 λ (λ > 0) 的泊松过程。
以下是泊松过程必须满足的三个条件:
- 初始条件:在时间 t = 0 时,没有事件发生。即 N(0) = 0。
- 独立增量:对于任意时间 t 和 s (s > 0),在时间区间 (t, t+s] 内发生的事件数 N(t+s) - N(t),与时间 t 之前发生的事件数 N(t) 相互独立。
- 平稳增量:对于任意时间 t 和 s,在时间区间 (t, t+s] 内发生的事件数 N(t+s) - N(t) 的概率分布,只依赖于区间长度 s,而与起始时间 t 无关。
核心性质与公式
基于以上定义,我们可以推导出泊松过程的一些重要性质。
一个关键的引理是:在泊松过程中,在时间区间 [0, t] 内没有事件发生的概率服从指数分布。
其公式为:
P(N(t) = 0) = e^{-λt}
这个公式表明,事件发生的间隔时间与指数分布密切相关。
事件到达时间分析
理解了事件计数的分布后,我们很自然地会问:事件之间的时间间隔有什么规律?
假设我们记录了一系列连续事件的到达时间,记为 T₁, T₂, ..., Tₙ。我们关心的是事件之间的到达间隔时间。
这里有一个重要的命题:
如果事件到达时间 T₁, T₂, ..., Tₙ 是独立的,并且每个间隔时间都服从指数分布,那么对于每一个间隔时间 Tᵢ,其期望值(均值)为:
E[Tᵢ] = 1/λ
这个结论非常重要。它意味着在速率为 λ 的泊松过程中,事件之间的平均等待时间是 1/λ。速率 λ 越高,平均等待时间就越短。

总结
本节课中我们一起学习了泊松过程的核心内容。
我们首先定义了泊松过程,它需要满足初始条件、独立增量和平稳增量三个特性。接着,我们推导出在给定时间内无事件发生的概率公式 P(N(t)=0) = e^{-λt}。最后,我们探讨了事件到达间隔时间,并得出了一个关键结论:在泊松过程中,事件间隔时间是独立的指数随机变量,其平均间隔时间为 1/λ。
理解泊松过程是分析许多随机系统(如服务器请求、粒子衰变、电话呼叫中心)的基础。在接下来的课程中,我们将以此为基础,继续学习马尔可夫链等相关概念。
075:泊松过程的应用与问题求解

在本节课中,我们将学习如何应用泊松过程的理论知识来解决实际问题。我们将通过几个具体的例子,展示如何计算事件发生的概率、期望数量以及期望等待时间。
概述
上一节我们介绍了泊松过程中的事件到达时间、等待时间等核心概念。本节中,我们来看看如何利用这些概念来解决三类典型问题:计算特定时间段内无事件发生的概率、计算期望事件数量,以及计算特定事件(如第n次事件)的期望到达时间。
问题一:无事件发生的概率
首先,我们考虑一个关于概率的问题。假设我们观察到联邦快递(FedEx)的包裹投递以每小时2次的速率发生(即 λ = 2)。我们想知道在上午11点到下午2点这3个小时内,没有任何投递发生的概率是多少。
以下是解决此问题的步骤:
- 确定时间间隔长度 t = 3 小时。
- 利用泊松过程的平稳增量性质。这意味着,对于任何长度为 t 的区间,事件数量 N(t) 的分布是相同的。
- 因此,计算 P(N(3) = 0) 等价于计算 P(N(2 PM) - N(11 AM) = 0)。
- 根据泊松分布的性质,在时间 t 内事件数为0的概率公式为:P(N(t) = 0) = e^{-λt}。
- 代入 λ=2, t=3,得到概率为 e^{-6}。
所以,在上午11点到下午2点之间没有包裹投递的概率是 e^{-6}。
问题二:期望事件数量
接下来,我们看一个关于期望值的问题。在相同的投递过程(λ = 2)中,我们想计算在下午1点到5点这4个小时内,期望的投递数量是多少。
以下是解决此问题的步骤:
- 确定时间间隔长度 t = 4 小时。
- 对于泊松过程,在时间 t 内发生的事件数量 N(t) 的期望值公式为:E[N(t)] = λt。
- 我们要求的是 E[N(5 PM) - N(1 PM)],根据平稳增量性,这等于 E[N(4)]。
- 代入 λ=2, t=4,得到期望值为 2 * 4 = 8。
因此,在下午1点到5点之间,我们预计平均会有8次投递。
问题三:第n次事件的期望到达时间
最后,我们处理一个稍复杂的问题:计算特定事件(如第7次投递)的期望到达时间。假设我们从下午1点开始观察,问第7次联邦快递投递预计在什么时间到达?
以下是解决此问题的步骤:
- 我们关注的是等待时间 S_n,即第n次事件到达所需的时间。其定义为前n个事件间隔时间之和:S_n = T_1 + T_2 + ... + T_n。
- 在泊松过程中,每个间隔时间 T_i 都服从参数为 λ 的指数分布,其期望值为 E[T_i] = 1/λ。
- 因此,第n次事件的期望等待时间为:E[S_n] = n * (1/λ)。
- 在本例中,n=7, λ=2,所以 E[S_7] = 7 * (1/2) = 3.5 小时。
- 从起始时间下午1点开始,加上3.5小时的期望等待时间,得到期望到达时间为 下午4点30分。
所以,从下午1点算起,我们预计第7次投递将在下午4点30分到达。
总结
本节课中我们一起学习了如何将泊松过程的理论应用于实际问题求解。我们通过三个案例,分别计算了:
- 特定时间段内无事件发生的概率,使用了公式 P(N(t)=0) = e^{-λt}。
- 特定时间段内期望的事件数量,使用了公式 E[N(t)] = λt。
- 第n次事件的期望到达时间,通过计算期望等待时间 E[S_n] = n/λ 并加上起始时间得到。

掌握这些方法,你就能分析各种涉及随机事件到达时间、频率和概率的问题了。
076:马尔可夫链 🧮

在本节课中,我们将要学习马尔可夫链。这是继之前讨论的泊松过程之后的内容。在泊松过程中,我们探讨了到达间隔时间、事件发生、等待时间以及等待第n个事件等概念。本节我们将转向马尔可夫链,它描述的是一个系统在不同状态间随时间演变的随机过程。
马尔可夫链的基本概念
上一节我们介绍了泊松过程,本节中我们来看看马尔可夫链。在马尔可夫链中,我们希望将随机变量 ( X_n ) 解释为系统在某个离散时间点 ( n ) 所处的状态。时间在此模型中仍然是相关的,但现在是离散递增的。
我们可以考虑特定的状态。例如,假设有两个状态:状态0和状态1。马尔可夫链的核心在于捕捉这两个状态之间的关系,以及变量如何在它们之间移动。
状态转移与概率矩阵
为了完整定义这个过程,我们需要描述状态间的转移概率。以下是状态转移的完整描述:
- 如果系统当前处于状态0,它可能转移到状态1,其概率记为 ( P_{01} )。
- 如果系统当前处于状态0,它也可能保持在状态0,其概率记为 ( P_{00} )。
- 如果系统当前处于状态1,它可能保持在状态1,其概率记为 ( P_{11} )。
- 如果系统当前处于状态1,它也可能转移回状态0,其概率记为 ( P_{10} )。
通过这种方式,我们捕捉到了这个过程中所有可能的结果。我们可以将这些概率组织成一个矩阵,称为转移概率矩阵。
该矩阵的形式如下:
[
P = \begin{bmatrix}
P_{00} & P_{10} \
P_{01} & P_{11}
\end{bmatrix}
]
在这个矩阵中,行索引 ( i ) 代表当前状态,列索引 ( j ) 代表下一个状态。元素 ( P_{ij} ) 表示从状态 ( i ) 转移到状态 ( j ) 的概率。
转移矩阵的性质
现在你可能会问,这个矩阵有什么用处?为了有效地使用它,我们首先需要了解这个过程的一些基本性质。
首先,我们称这些概率为 ( P_{ij} )。其中 ( i ) 代表行(当前状态),取值范围从1到 ( n ),( n ) 是状态总数;( j ) 代表列(下一状态),取值范围从1到 ( m )。在常规的马尔可夫链中,状态空间是相同的,因此通常 ( n = m )。
其次,也是最重要的一点,因为这些是概率,所以对于任意给定的当前状态 ( i ),转移到所有可能状态的概率之和必须为1。这可以用以下公式表示:
[
\sum_{j=1}^{n} P_{ij} = 1 \quad \text{对于所有 } i
]
这意味着转移矩阵的每一行之和必须等于1。具体到我们的两状态例子,必须满足:
- ( P_{00} + P_{01} = 1 )
- ( P_{10} + P_{11} = 1 )
如果矩阵的任一行之和不为1,那么它就不是一个有效的转移概率矩阵。
小结与预告
本节课中我们一起学习了马尔可夫链的核心思想:系统在离散时间点上处于不同状态,并通过转移概率矩阵描述状态间的随机转移。我们定义了状态、转移概率,并介绍了转移矩阵必须满足行和为1的关键性质。


理解这些基本概念是分析马尔可夫链模型的第一步。在接下来的视频中,我们将通过一个具体的例子来演示如何应用这些概念。
077:马尔可夫链实例研究 🌦️➡️☀️

在本节课中,我们将通过一个具体的天气预测例子,学习如何应用马尔可夫链进行计算和概率推断。我们将从理解基本概念开始,逐步深入到使用查普曼-科尔莫戈罗夫方程进行多步预测。
概述
马尔可夫链是一种描述系统状态随时间随机转移的数学模型,其核心特性是“无记忆性”,即未来状态的概率分布只依赖于当前状态。本节我们将通过一个包含三种天气状态(晴天、雨天、多云)的例子,演示如何构建转移矩阵,并计算特定事件序列的概率以及未来某天的状态概率。
构建天气模型
假设明天的天气仅依赖于今天的天气。这是一个典型的马尔可夫链应用场景。我们定义三个状态:晴天、雨天和多云。
根据给定的状态转移图,我们可以确定从一个状态转移到另一个状态的概率。例如,如果今天是晴天,那么明天是晴天的概率是0.5,是雨天的概率是0.4,是多云的概率是0.1。
计算特定路径的概率
首先,我们来看一个简单的问题:已知今天是晴天,求未来连续几天的天气为“晴天 -> 雨天 -> 多云 -> 多云 -> 晴天”这一特定序列发生的概率。
以下是计算步骤:
- 从晴天开始:概率为 1(给定条件)。
- 晴天转移到雨天:概率为 0.4。
- 雨天转移到多云:概率为 0.3。
- 多云保持为多云:概率为 0.5。
- 多云转移到晴天:概率为 0.2。
该特定路径的总概率是这些转移概率的乘积:
总概率 = 1 * 0.4 * 0.3 * 0.5 * 0.2 = 0.012
引入转移矩阵
为了处理更复杂的问题(例如多日后的状态概率),我们需要一个更强大的工具——转移矩阵。转移矩阵 P 以矩阵形式系统地描述了所有状态间的转移概率。
对于我们的三状态天气系统,转移矩阵是一个3x3的矩阵:
P = [[0.5, 0.4, 0.1], [0.3, 0.4, 0.3], [0.2, 0.3, 0.5]]
其中,P[i][j] 表示从状态 i 转移到状态 j 的概率。注意,矩阵每一行的概率之和必须为1。
查普曼-科尔莫戈罗夫方程
上一节我们介绍了转移矩阵,本节我们来看看如何预测多天后的状态。这需要用到查普曼-科尔莫戈罗夫方程。该方程指出,经过 n+m 步从状态 i 转移到状态 j 的概率,等于所有可能中间状态 k 的概率之和。
其数学公式为:
P^(n+m)[i][j] = Σ_k ( P^n[i][k] * P^m[k][j] )
特别地,经过2步转移的概率矩阵,就是1步转移矩阵的平方:
P² = P * P
应用:预测未来天气
现在,让我们应用这个方程来解决一个实际问题:已知今天是晴天,求四天后是雨天的概率。
我们可以将四步分解为两个两步过程。首先,我们需要计算两步转移矩阵 P²。
通过矩阵乘法计算 P²:
P² = P * P
计算后得到的 P² 矩阵中,P²[sunny][rainy] 这个元素的值(例如0.39)就代表了从晴天开始,两天后是雨天的概率。

为了得到四天后的概率,我们需要计算 P⁴。根据查普曼-科尔莫戈罗夫方程,P⁴ 可以通过 P² * P² 得到。最终,在 P⁴ 矩阵中,位于“晴天”行与“雨天”列交叉位置的值,就是我们要求的“从晴天开始,四天后是雨天”的概率。具体的数值计算将在相关的R语言教程中演示。
总结

本节课中我们一起学习了马尔可夫链的核心应用。我们从一个简单的天气模型出发,学会了如何计算特定状态序列的概率。接着,我们引入了转移矩阵这一关键工具,并利用查普曼-科尔莫戈罗夫方程,掌握了预测系统在多个时间步长后处于某一状态的概率的方法。这个过程清晰地展示了如何将实际问题抽象为数学模型,并通过矩阵运算获得解答。
078:极限概率 📈
在本节课中,我们将要学习马尔可夫链中一个更强大的概念——极限概率。这个概念帮助我们理解当系统经过无限多步状态转移后,会达到一个怎样的稳定状态,并利用这个稳定状态来计算当前状态的概率。

从状态转移概率到稳态
上一节我们介绍了马尔可夫链,并探讨了如何用它来计算未来特定状态的概率,例如,如果今天是晴天,四天后是阴天的概率是多少。
但马尔可夫链还为我们提供了更强大的工具,这涉及到另一个问题:如果我想知道今天是雨天或阴天的概率,有多少条可能的路径会导向今天?答案是无限多条。存在无限多条路径会导向当前状态。因此,我们需要一个更强大的概念或原理来指导我们探索这类问题。
极限概率与稳态
如果我们不关心起始日期,那么在经过无限多步状态转移后,系统的影响会变得微乎其微。这意味着系统会趋近于一个所谓的极限概率,此时马尔可夫链达到了所谓的稳态。
那么,我们如何找到这个稳态呢?之前我们描述状态转移时,有源状态(如晴天、雨天、阴天)和目标状态。当我们只关心目标状态而不再关心源状态时,我们的矩阵表示就会发生变化。
稳态方程
在稳态下,我们只关心目标状态的概率分布。这意味着我们可以用一个向量来表示这个分布,我们称之为 π。这个向量包含了每个状态(如晴天、雨天、阴天)的未知概率。
设这个状态概率向量为 π,状态转移矩阵为 P。我们寻找的性质是:当 π 乘以 P 后,结果仍然是 π 本身。用公式表示就是:
πP = π
换句话说,当我们用稳态概率向量乘以转移矩阵时,得到的向量与原来的向量完全相同。这个 π 就是极限概率向量,它代表了马尔可夫链的稳态。一旦达到稳态,我们就可以基于这个极限概率来确定“今天”处于某个状态的概率,因为它是由无限多步转移后的概率给出的。
求解稳态概率
上述方程 πP = π 可以转化为一个线性代数问题:Ax = x,其中 A 是转移矩阵,x 是稳态概率向量 π。这正是求矩阵特征值为1时对应的特征向量的问题。
以下是求解稳态概率向量的一般步骤:
- 建立方程 πP = π。
- 将其重写为 π(P - I) = 0,其中 I 是单位矩阵。
- 结合概率总和为1的约束条件:π 中所有元素之和为1。
- 解这个线性方程组,即可得到稳态概率向量 π。
实例解析
以课程中的天气模型为例,通过求解上述方程,我们得到稳态概率向量为:
π = [21/62, 23/62, 18/62]
这个结果告诉我们:
- 今天是晴天的概率是 21/62。
- 今天是雨天的概率是 23/62。
- 今天是阴天的概率是 18/62。
我们将在本课配套的教程模块中详细探讨这个问题的求解过程。
总结


本节课中我们一起学习了马尔可夫链的极限概率与稳态概念。我们了解到,当不关心起始状态并经过无限步转移后,系统会达到一个稳定状态,其概率分布由方程 πP = π 决定。通过求解这个方程得到的特征向量 π,就是系统的稳态概率分布,它使我们能够回答关于长期或“今天”状态概率的问题。这是马尔可夫链分析中一个非常强大且实用的工具。
079:使用R分析马尔可夫链教程 🌧️☀️☁️


在本节课中,我们将学习如何使用R语言来分析和研究马尔可夫链。我们将展示如何创建马尔可夫链,以及如何回答关于特定随机过程的问题。


准备工作 🛠️



首先,需要确保清理工作环境。这包括清除所有变量和图形。


# 清除环境变量
rm(list = ls())
# 清除所有图形
graphics.off()


接下来,加载统计工具包。Stat tools工具包非常有用,因为它预装了分析所需的各种包。



# 加载统计工具包
library(stat_tools)


构建马尔可夫链示例 🌤️



我们将使用视频讲座中开发的一个关于天气的问题作为示例。这个例子假设明天的天气只取决于今天的天气。


首先,定义马尔可夫链的状态。我们有三个状态:晴天、雨天、阴天。
# 定义状态
states <- c("sunny", "rainy", "cloudy")





然后,使用matrix函数构建转移概率矩阵。这个矩阵与我们在问题中使用的保持一致。


# 构建转移概率矩阵
TM <- matrix(c(0.5, 0.4, 0.1,0.3, 0.4, 0.3,0.2, 0.3, 0.5),nrow = 3, byrow = TRUE,dimnames = list(states, states))



在构建矩阵时,个人偏好是将来源状态放在左侧,目标状态放在右侧。这意味着“我从哪里来”和“我到哪里去”。



创建马尔可夫链对象 🔗


现在,我们将创建一个新的马尔可夫链对象。这个对象包含转移概率矩阵,并赋予其一个名称。



# 创建马尔可夫链对象
dtmcA <- new("markovchain", transitionMatrix = TM, name = "WeatherChain")


创建成功后,可以查看该对象的摘要信息,它会告诉你关于这个马尔可夫链的一些基本情况。



# 查看马尔可夫链摘要
summary(dtmcA)


绘制转移图 📊



在回答问题时有帮助的是绘制一个转移图。以下代码来自diagram包中的plotmat函数,该包在Stat tools中已包含。



# 加载diagram包
library(diagram)# 绘制转移概率矩阵图
plotmat(t(TM), # 转置矩阵以匹配分析习惯name = states,lwd = 1,box.lwd = 2,cex.txt = 0.8,box.size = 0.1,box.type = "circle",box.prop = 0.5,arr.length = 0.2,arr.width = 0.1,self.cex = 0.4,self.shiftx = 0.12,self.shifty = 0.1)



plotmat函数是一个纯粹的绘图工具,不进行分析。为了与我们的分析习惯保持一致(来源在左,目标在右),我们对转移矩阵进行了转置。运行代码后,生成的图表应与我们的转移矩阵匹配。例如,从晴天到雨天的箭头概率应为0.4。



分析具体问题 ❓



上一节我们创建了马尔可夫链并可视化了转移过程,本节中我们来看看如何用它来回答具体问题。


第一个问题是:假设今天是晴天,求未来五天天气依次为“晴天、雨天、阴天、阴天、晴天”的概率。




这本质上是计算一个特定路径的概率。给定今天是晴天(初始状态W1),我们需要计算一连串转移的概率:



- 晴天 → 晴天:概率为 0.5
- 晴天 → 雨天:概率为 0.4
- 雨天 → 阴天:概率为 0.3
- 阴天 → 阴天:概率为 0.5
- 阴天 → 晴天:概率为 0.2




总概率是这些转移概率的乘积。



# 计算特定路径的概率
prob_path <- 0.5 * 0.4 * 0.3 * 0.5 * 0.2
prob_path
# 输出应为 0.006


利用查普曼-科尔莫戈罗夫方程 🔢




我们还可以利用查普曼-科尔莫戈罗夫方程来解决更多问题。例如,我们可以定义初始状态向量(1表示处于该状态,0表示不处于)。



首先,可以查看马尔可夫链的递归状态。



# 查看递归状态
recurrentStates(dtmcA)



如果我们想设定初始状态为晴天,则初始状态向量为 c(1, 0, 0)。



# 定义初始状态向量(晴天)
initial_state <- c(1, 0, 0)

现在,问题可能是:从今天(晴天)开始,两天后的天气预测如何?





这可以通过初始状态向量乘以转移矩阵的2次方(即两天)来计算。


# 计算两天后的状态分布
state_after_2days <- initial_state %*% (TM %^% 2)
state_after_2days



我们也可以直接对转移矩阵求幂来得到同样的结果。


# 直接计算转移矩阵的2次方
TM_2 <- TM %^% 2
TM_2



结果显示,两天后有约39%的概率下雨,39%的概率晴天,22%的概率阴天。


同样地,我们可以计算四天后的情况。



# 计算四天后的状态分布(从晴天开始)
state_after_4days_from_sunny <- initial_state %*% (TM %^% 4)
state_after_4days_from_sunny# 或者直接查看四步转移矩阵,它包含了所有初始状态的可能性
TM_4 <- TM %^% 4
TM_4



通过TM_4矩阵,我们可以查看从任何初始状态(晴天、雨天、阴天)出发,四天后的状态分布。


探索稳态概率 ⚖️


如果我们想计算200天甚至2000天后的状态,会发现分布趋于稳定。这个稳定的分布称为稳态概率或极限概率。



我们可以使用steadyStates函数直接计算稳态分布。


# 计算稳态概率分布
steady_state <- steadyStates(dtmcA)
steady_state



稳态概率分布是一个向量,表示无论从哪个状态开始,经过足够长的时间后,处于各个状态的概率。对于我们的天气模型,稳态概率大约是:雨天37%,晴天33%,阴天29%。这意味着从长期来看,天气的分布与初始状态无关。


最后,我们可以将这个稳态概率信息更新到我们的转移图中。



# 重新绘图,可考虑将稳态概率作为注释加入(此处为概念性步骤)
# 实际绘图代码可能需要调整以显示稳态概率,例如在状态框旁添加文本
plotmat(t(TM),name = states,... # 其他绘图参数)
# 假设我们手动添加文本注释,例如在晴天状态旁添加"33%"


总结 📝



本节课中我们一起学习了如何使用R语言分析和研究马尔可夫链。我们从清理环境和加载工具包开始,逐步构建了一个天气预测的马尔可夫链模型,定义了状态和转移矩阵。我们创建了马尔可夫链对象,并绘制了转移图来可视化过程。通过具体示例,我们计算了特定路径的概率,并利用查普曼-科尔莫戈罗夫方程预测了未来多天的状态分布。最后,我们探讨了马尔可夫链的稳态概率,它揭示了系统长期的行为规律,与初始状态无关。希望这些方法和工具能对您未来的数据分析有所帮助。
080:基于Jupyter Notebook的马尔可夫链实践

在本教程中,我们将学习如何在Jupyter Notebook环境中使用R语言实现和分析马尔可夫链。我们将涵盖定义转移矩阵、创建离散时间马尔可夫链对象、计算状态概率以及寻找稳态分布等核心概念。

准备工作
首先,我们需要在Jupyter Notebook中设置环境。这包括抑制不必要的消息并加载所需的工具包。
# 抑制消息并加载统计工具包
suppressMessages(library(stat.tools))
定义状态与转移矩阵
上一节我们完成了环境设置,本节中我们来看看如何定义马尔可夫链的状态和转移矩阵。
转移矩阵是马尔可夫链的核心,它定义了从一个状态转移到另一个状态的概率。我们首先定义一个状态向量,然后根据给定的概率创建转移矩阵。
# 定义状态向量
states <- c("S1", "S2", "S3")# 定义转移概率矩阵
# 矩阵的行和列顺序与状态向量一致
transition_probs <- matrix(c(0.5, 0.2, 0.3,0.1, 0.6, 0.3,0.2, 0.3, 0.5),nrow = 3, byrow = TRUE)# 为矩阵的行和列命名
dimnames(transition_probs) <- list(states, states)
创建离散时间马尔可夫链对象
定义好转移矩阵后,我们可以使用专门的R包来创建一个离散时间马尔可夫链对象,以便进行后续分析。
# 使用‘markovchain’包创建DTMC对象
# 注意:如果矩阵的列和已为1,则设置byrow=FALSE
dtmc <- new("markovchain", transitionMatrix = transition_probs, byrow = FALSE)
创建对象后,我们可以获取其摘要信息来了解链的基本属性。
# 查看DTMC对象的摘要
summary(dtmc)
摘要信息会显示链的类别、是否为暂态类以及是否不可约。不可约马尔可夫链指的是链中的每一个状态都可以从任何其他状态到达。
可视化转移矩阵
为了更直观地理解状态间的转移关系,我们可以将转移矩阵可视化。
# 绘制转移矩阵图
plot(dtmc[,])
运行上述代码会生成一个显示状态间转移概率的图形。
计算状态概率
现在我们已经有了马尔可夫链对象,接下来看看如何计算未来某个时间点的状态概率分布。
首先,我们需要定义一个初始概率向量。
# 定义初始概率向量x0
# 例如,系统100%从状态S1开始
x0 <- c(1, 0, 0)
基于初始状态,我们可以计算一步转移后的概率分布。
# 计算一步转移后的概率分布x1
# 公式:x1 = x0 * P
x1 <- x0 %*% transitionMatrix(dtmc)
我们可以继续递归计算多步后的概率。
# 计算两步后的概率分布x2
# 公式:x2 = x1 * P
x2 <- x1 %*% transitionMatrix(dtmc)
然而,递归计算效率较低。更高效的方法是直接使用转移矩阵的幂次方。
# 直接计算两步后的概率分布
# 公式:x2 = x0 * (P^2)
x2_direct <- x0 %*% (transitionMatrix(dtmc) %^% 2)
这种方法可以轻松扩展到计算任意多步后的状态。
# 计算15步后的概率分布
# 公式:x15 = x0 * (P^15)
x15 <- x0 %*% (transitionMatrix(dtmc) %^% 15)
寻找稳态分布
随着步数增加,状态概率分布会逐渐收敛到一个固定的值,这个分布称为稳态分布。R提供了直接计算稳态分布的函数。
# 计算马尔可夫链的稳态分布
steady_state <- steadyStates(dtmc)
稳态分布的结果与将转移矩阵提升到极高次幂(如一百万次)后得到的结果是一致的,此时概率值不再发生变化。
总结

本节课中我们一起学习了在Jupyter Notebook中使用R实现马尔可夫链的完整流程。我们从定义状态和转移矩阵开始,创建了离散时间马尔可夫链对象,并学习了如何计算多步转移概率。最后,我们探讨了马尔可夫链的稳态分布概念及其计算方法。掌握这些步骤使你能够对具有马尔可夫性质的系统进行建模和概率分析。
081:基于不完整数据估算COVID-19日传播率的改进方法 📊
在本节课中,我们将学习一种改进的方法,用于从不完整的数据中估算COVID-19的日传播率。具体而言,我们将重点讨论如何估算每日基本再生数Rt,并探讨在数据质量不佳的背景下,如何利用贝叶斯数据增强和马尔可夫链模型来获得更准确的估计。
概述:COVID-19数据面临的挑战
COVID-19数据存在严重的质量问题。美国有超过3000个县级公共卫生办公室,它们使用不同的报告标准和系统。大约一半的感染者无症状,他们在不知情的情况下传播疾病。检测资源不足,保险规定和HIPAA规则也影响了报告。病例报告存在延迟,且对阳性病例的定义标准不一致。联邦政府无权强制各州或县执行统一标准,这导致了数据质量和工程上的噩梦。
早期模型的不足
在疫情初期,数据工程和可视化工作不足。美国当时的主流模型预测到2020年夏季,COVID-19病例将降至零,总死亡人数为6万,但这并未发生。另一个简报给白宫的模型也预测死亡人数会迅速下降。这些早期模型都是经验模型,仅基于趋势进行预测,并未反映COVID-19的实际传播动力学。因此,其预测的峰值和下降是建模过程的产物,而非疾病传播的真实情况。
这些模型的主要缺点包括:不同模型之间缺乏共识,预测结果各异;许多模型在时间和地点上不一致;即使是同一地区,在不同时间窗口下,模型参数也会发生显著变化;任何准确性都非常短期,仅限于数天;并且这些结果在数学或统计上缺乏有效性。
转向机制模型及其挑战
如果我们关注机制模型,即那些将我们对疾病动力学的理解强加于疾病传播预测的模型,情况会如何?但我们发现,当数据质量差时,会导致荒谬的预测。我们尝试使用Arenas及其同事提出的、在西班牙和意大利表现良好的模型来拟合美国数据,却得到了荒谬的结果。图表显示,模型预测的蓝色曲线远高于实际报告病例数。
我们现在认识到,这是由于我们对冠状病毒真实病例数的初始条件理解存在问题。左侧图表显示了我们估算的纽约冠状病毒病例数。底部的小圆圈代表3月中旬至5月期间纽约报告的确诊病例,而蓝线代表我们认为最可能的真实病例数估计。这篇论文已在《Frontiers》期刊上发表。
问题在于,由于病例数被严重低估,模型的初始条件出现偏差,进而完全影响了模型动态。因此,我们需要一种能够推断驱动模型所需缺失数据的方法,我们将依赖贝叶斯数据增强来实现这一目标。
贝叶斯数据增强与死亡数据
通过贝叶斯数据增强,我们将使用死亡数据作为冠状病毒报告中最可靠的数据。选择死亡数据而非确诊病例有几个原因:尽管部分死亡可能被错误归因,但死亡事件很少被忽视,我们可以对这个指标更有信心。
右侧图表显示了美国的季节性平均死亡人数(灰色区域,据《华盛顿邮报》报道)以及2020年的死亡人数(黑线)。可以看到,从3月中旬到4月出现了一个峰值。深色阴影区域可归因于COVID-19死亡,浅色阴影区域是未归因于COVID-19的死亡。我的解读是,我们未能将一些早期的COVID-19病例计入死亡报告,但其中大部分可归因于冠状病毒。我们可以估算出死亡中可归因于冠状病毒的比例,并利用这些信息来推断其余的疾病动态。
马尔可夫链与线性噪声近似
对于熟悉马尔可夫链的人,该模型假设人们处于易感、暴露、感染、康复或死亡这些状态之一。我们知道存在无症状期,但为了简化,我们将暴露和无症状感染合并为“感染”状态,即仍在传播病毒的状态。我们将估计状态间的转移概率,这是流行病学中已知的过程。
转移概率公式示例(简化):
P(状态A -> 状态B) = 基于临床文献的参数
如果我们了解死亡率和来自临床文献的转移概率参数(这些参数来自更受控的研究,并已被多次重复验证,我们可以更有信心),我们就可以利用线性噪声近似来“反转”这个方程。通过马尔可夫链估算死亡人数,从而估算真实的感染病例数,并一直回溯到易感到暴露的转换,这使我们能够估算每日基本再生数。
模型结果与验证
以下是我们得到的一些结果。第一张图显示了从易感到暴露、从暴露到感染、从感染到死亡以及从感染到康复的人数变化。当我们进行蒙特卡洛模拟时,会生成随机数,然后通过马尔可夫链反向估计每个状态,这产生了浅蓝色阴影区域(显示多次试验),深色线是最大后验估计。
可以看到,代表实际死亡数据的圆点与模型拟合得相当好。让我们更详细地看一下。以佛罗里达州为例,图表显示实际报告的死亡数(圆圈)与我们模型估算的平滑曲线拟合得很好。
我们还通过血清学报告验证了这些模型拟合结果。血清学报告是对人群的随机抽样抗体检测,我们可以从中推断真实的感染人数。当然,这可能仍然存在低估,因为许多无症状者可能不会去接受检测。
深入分析:佛罗里达州的案例
仔细观察佛罗里达州,在实施封锁和第二阶段重新开放期间,深色线表示估计的感染人数,圆圈是报告病例数。可以看到,在佛罗里达州最初的封锁期间(大约4月到5月),存在严重的漏报。即使在第二波疫情中,病例数仍然被低估。
这还使我们能够观察易感到暴露的状态转换,从而测量每日基本再生数。观察佛罗里达州同一时期的每日基本再生数,可以看到两个峰值。有趣的是,佛罗里达州是许多州的典型例子:第一个峰值出现后,政府实施了封锁。但我们观察到,传播风险的峰值及其下降发生在政府实施封锁的数天甚至数周之前。政府实施的封锁似乎并未加速每日传播风险的下降。这引发了一个问题:政府封锁是否真的对遏制疾病传播产生了效果?还是说,关于疾病传播的相同信息既提醒公众采取预防措施(如居家、戴口罩),也提醒了政府,而政府封锁只是巧合地发生在传播下降期?然而,很明显,如果这些封锁过早解除,人们会产生错误的安全感,导致每日传播风险再次上升,出现第二波疫情。
尽管如此,我认为封锁仍然有其作用。对于那些可能要求员工返岗的雇主,以及希望更加谨慎和安全的员工来说,封锁提供了依据。在这些情况下,政府封锁确实有所帮助。但同样明确的是,限制疾病传播的行为峰值远早于政府封锁。
总结
本节课中,我们一起学习了如何利用贝叶斯数据增强和马尔可夫链模型,基于不完整的COVID-19数据(特别是相对可靠的死亡数据)来估算更准确的每日基本再生数Rt和疾病传播动态。我们探讨了早期经验模型的不足,以及机制模型在数据质量差时面临的挑战。通过案例分析,我们看到了数据漏报的严重性,并讨论了政府封锁措施与疾病传播实际变化之间的关系。这种方法为在复杂数据环境下进行更可靠的流行病学推断提供了有力工具。


感谢您抽出时间聆听本次演讲。我提供了我的电子邮件地址以及我的合著者之一Kevin Keran的联系方式。我还要感谢Trevor Kt对这篇论文的贡献。非常感谢。
082:逆变换生成法 📊

在本节课中,我们将学习一种重要的随机变量模拟方法——逆变换生成法。该方法基于一个核心命题,允许我们利用均匀分布生成任意连续分布的随机变量。我们将通过一个具体示例,逐步讲解其原理和应用步骤。
概述
逆变换生成法的核心思想是:若我们有一个在区间 [0,1] 上均匀分布的随机变量 U,并且已知目标连续分布的概率分布函数 F(x),那么通过计算 F 的逆函数 F⁻¹(U),得到的随机变量 Y 将服从分布 F。
核心命题公式:
若 U ~ Uniform(0,1),且 Y = F⁻¹(U),则 Y 的分布函数为 F。
示例详解:模拟一个特定随机变量
上一节我们介绍了逆变换法的核心命题。本节中,我们通过一个具体例子来演示如何应用该方法。
假设我们有一个随机变量 X,其概率密度函数为:
f(x) = C * e^x,其中 0 ≤ x ≤ 1。
我们的目标是:模拟生成服从该密度函数 f(x) 的随机变量。
第一步:确定常数 C
由于 f(x) 是一个概率密度函数,其在定义域上的积分必须等于 1。这是使用任何密度函数进行模拟前必须验证的第一步。
以下是确定常数 C 的步骤:
- 根据PDF的性质,建立方程:
1 = ∫₀¹ C * e^x dx - 计算积分:
∫₀¹ e^x dx = e - 1 - 解出 C:
C = 1 / (e - 1) - 因此,完整的概率密度函数为:
f(x) = e^x / (e - 1)
第二步:计算概率分布函数 F(x)
根据逆变换法的命题,我们需要的是概率分布函数 F(x),而非密度函数 f(x)。F(x) 是 f(x) 的累积积分。
我们通过积分 f(x) 来得到 F(x):
F(x) = ∫₀ˣ f(y) dy = ∫₀ˣ [e^y / (e - 1)] dy
计算该积分,我们得到概率分布函数:
F(x) = (e^x - 1) / (e - 1),其中 0 ≤ x ≤ 1。

第三步:求逆函数 F⁻¹(u)
这是逆变换法的关键步骤。我们需要对 F(x) 表达式进行逆运算,解出 x。
设 u = F(x),即:
u = (e^x - 1) / (e - 1)
现在,我们求解 x:
- 两边乘以 (e - 1):
u(e - 1) = e^x - 1 - 移项:
e^x = u(e - 1) + 1 - 两边取自然对数:
x = ln[ u(e - 1) + 1 ]
至此,我们得到了逆函数:
F⁻¹(u) = ln[ u(e - 1) + 1 ]
第四步:应用命题进行模拟
根据命题,若 U 服从 Uniform(0,1) 分布,则随机变量 Y = F⁻¹(U) 将服从我们目标分布 F。
因此,我们的模拟算法非常简单:
Y = ln[ U * (e - 1) + 1 ]
其中,U 是来自均匀分布 Uniform(0,1) 的随机数。通过生成大量的 U,并代入上述公式,我们就能得到服从原密度函数 f(x) 的随机样本 Y。
总结
本节课中,我们一起学习了逆变换生成法。我们首先理解了其核心命题:利用均匀分布和概率分布函数的逆函数来生成特定分布的随机变量。随后,我们通过一个完整的示例,演练了应用该方法的四个关键步骤:
- 验证并确定概率密度函数中的常数。
- 通过积分概率密度函数得到概率分布函数 F(x)。
- 求解概率分布函数的逆函数 F⁻¹(u)。
- 将均匀随机数 U 代入 F⁻¹(u),得到目标分布的随机变量 Y。
这种方法原理清晰,步骤直接,是模拟连续型随机变量的强大工具。
083:拒绝采样法第一部分

在本节课中,我们将要学习一种新的随机变量模拟方法——拒绝采样法。上一节我们介绍了逆变换法,它要求概率密度函数(PDF)必须可逆。然而,并非所有PDF都满足这个条件。因此,本节中我们来看看一种更通用、更稳健的方法。
方法概述
拒绝采样法从一个已知的、易于模拟的PDF G(x) 出发,以其为基础来模拟目标PDF F(x)。其核心思想是:先根据 G(x) 生成一个候选值,然后根据 F(x) 与 G(x) 的比例关系,以一定的概率决定接受或拒绝这个候选值。
具体而言,我们需要找到一个常数 C,使得对于所有 y,都满足以下不等式:
F(y) / G(y) ≤ C
实施步骤
以下是使用拒绝采样法的两个基本步骤。
步骤一:生成候选值
首先,根据密度函数 G(x) 模拟一个随机变量 Y。我们可以使用上一节学习的逆变换法来完成这一步。
步骤二:接受/拒绝决策
接着,模拟一个在区间 [0, 1] 上均匀分布的随机变量 U。然后进行判断:如果 U 小于 F(Y) / (C * G(Y)),则接受该候选值,并令 X = Y;否则,拒绝该候选值,并返回步骤一重新生成。
示例解析
为了更好地理解,让我们通过一个具体例子来演示这个过程。
目标函数 F(x)
假设我们要模拟的PDF F(x) 定义在 [0, ∞) 上:
F(x) = (2 / √(2π)) * e^(-x²/2)
可以验证,该函数在定义域上的积分为1,是一个有效的PDF。
建议函数 G(x)
我们选择一个更易于模拟的PDF G(x),同样定义在 [0, ∞) 上:
G(x) = e^(-x)
其累积分布函数(CDF)为:CDF_G(x) = 1 - e^(-x)

寻找常数 C
我们需要找到常数 C,使得 F(x) / G(x) ≤ C 恒成立。一个有效的方法是求 F(x)/G(x) 的最大值。通过求导并令其为零,我们找到临界点 x = 1,该点即为最大值点。因此:
C = F(1) / G(1) = √(2e / π)
此时,接受条件中的比例项可以简化为:
F(x) / (C * G(x)) = e^(-1/2 * (x - 1)²)
模拟过程演示
现在,我们手动模拟一次以验证流程。
- 生成均匀随机数
U。假设我们得到:U = 0.5352 - 根据
G(x)的CDF逆变换生成候选值Y。由于CDF_G(x) = 1 - e^(-x),其逆函数为x = -ln(1 - U)。又因为1-U与U同为[0,1]上的均匀分布,我们可以简化为:
Y = -ln(U) = -ln(0.5352) ≈ 0.625115 - 计算接受概率:
F(Y) / (C * G(Y)) = e^(-1/2 * (0.625115 - 1)²) ≈ 0.932143 - 进行判断:由于
U = 0.5352小于0.932143,因此我们接受这个候选值。 - 最终,我们模拟得到的随机变量取值为:X = Y ≈ 0.625115
请注意,这个值 0.625115 是我们本次模拟的最终输出,而不是中间计算出的接受概率 0.932143。
总结
本节课中我们一起学习了拒绝采样法的基本原理和实施步骤。该方法不要求目标PDF F(x) 可逆,只需找到一个易于模拟的建议PDF G(x) 和一个合适的常数 C 即可。其过程分为生成候选值和依概率接受两步。通过一个具体示例,我们演示了从计算常数 C 到完成一次模拟的完整流程。为了生成大量样本,你需要将上述步骤编写成循环代码。
084:拒绝采样法第二部分

在本节课中,我们将通过一个具体的多项式概率密度函数(PDF)例子,深入学习拒绝采样法的应用步骤。我们将从验证PDF开始,逐步推导出用于采样的所有必要组件,并通过手动计算演示接受与拒绝样本的过程。
概述与问题定义
上一节我们介绍了拒绝采样法的基本原理。本节中,我们来看一个更具体的例子,其目标分布是一个多项式PDF。
我们定义目标概率密度函数 f(x) 为:
f(x) = 30 * (x^2 - 2x^3 + x^4)
其中,变量 x 的取值范围在 0 到 1 之间(即 0 ≤ x ≤ 1)。
我们选择的建议分布 g(x) 为:
g(x) = 2x
同样定义在区间 0 ≤ x ≤ 1 上。
验证与计算建议分布
首先,我们需要确认 g(x) 本身是一个有效的PDF,并计算其累积分布函数(CDF)及其反函数。
以下是验证与计算步骤:
- 验证 g(x) 是 PDF:在区间 [0, 1] 上对
g(x) = 2x积分,结果为1,因此它是一个有效的PDF。 - 计算 g(x) 的 CDF:CDF
G(x)是g(x)从0到x的积分。G(x) = ∫(0 to x) 2t dt = x^2 - 求 CDF 的反函数:为了从均匀分布
U(0,1)生成服从g(x)的样本Y,我们需要G(x)的反函数。
这意味着,要生成一个建议样本,我们只需取一个均匀随机数Y = G^{-1}(U) = sqrt(U)u的平方根。
计算接受概率与常数 C
拒绝采法的核心是计算比率 f(x) / g(x),并找到其最大值 C。
-
计算比率:
f(x) / g(x) = [30*(x^2 - 2x^3 + x^4)] / (2x) = 15*(x - 2x^2 + x^3)(注:原文公式为
15*(x^2 - 2x^3 + x^4)/x,经化简与后续推导验证,此处采用简化后的多项式形式更清晰。) -
寻找最大值 C:我们需要找到
f(x)/g(x)在区间 [0,1] 上的最大值。为此,对其求导并令导数为零。d/dx [15*(x - 2x^2 + x^3)] = 15*(1 - 4x + 3x^2)令导数等于0:
1 - 4x + 3x^2 = 0。
解这个二次方程,在 [0,1] 区间内得到临界点x = 1/3。 -
计算常数 C:将
x = 1/3代入比率公式,得到最大值C。C = f(1/3) / g(1/3) = 15*[(1/3) - 2*(1/3)^2 + (1/3)^3] = 20/9因此,常数
C ≈ 2.222。 -
计算接受概率:对于每个生成的建议样本
Y,其被接受的概率为:acceptance_probability = f(Y) / [C * g(Y)]代入
f(x),g(x)和C的值,可以简化为:acceptance_probability = (27/4) * Y * (1 - Y)^2(此公式由
[f(Y)] / [(20/9) * 2Y]化简而来,与原文中27x/4 * (x-1)^2一致。)
手动模拟采样过程
现在,我们通过手动计算两个均匀随机数 u 的例子,来演示接受或拒绝一个样本的具体步骤。
采样步骤总结:
- 生成一个均匀随机数
u1,用于产生建议样本:Y = sqrt(u1)。 - 生成另一个独立的均匀随机数
u2,用于决定是否接受。 - 计算接受概率
P_accept = (27/4) * Y * (1 - Y)^2。 - 如果
u2 < P_accept,则接受Y作为来自f(x)的一个样本;否则拒绝,并回到步骤1。
以下是两个计算实例:
实例一:拒绝样本
- 步骤1:设
u1 = 0.5352。生成建议样本Y = sqrt(0.5352) ≈ 0.731574。 - 步骤2:计算接受概率
P_accept = (27/4) * 0.731574 * (1 - 0.731574)^2 ≈ 0.355805。 - 步骤3:生成决定随机数
u2(此处隐含使用另一个随机数,在手动计算中我们直接比较)。条件为u2 < 0.355805。 - 步骤4:由于
0.355805较小,一个典型的u2(例如0.5)很可能大于它,因此拒绝该样本Y。我们需要重新生成随机数。

实例二:接受样本
- 步骤1:设
u1 = 0.099。生成建议样本Y = sqrt(0.099) ≈ 0.314643。 - 步骤2:计算接受概率
P_accept = (27/4) * 0.314643 * (1 - 0.314643)^2 ≈ 0.997598。 - 步骤3:条件为
u2 < 0.997598。 - 步骤4:由于
0.997598非常接近1,几乎任何u2都会小于它,因此接受该样本Y ≈ 0.314643作为来自目标分布f(x)的有效样本。
关键提醒:当接受一个样本时,输出的是建议样本 Y 的值,而不是计算得到的接受概率值。这是一个常见的错误。
总结
本节课中,我们一起学习了如何将拒绝采样法应用到一个具体的多项式概率密度函数上。我们完整经历了从定义目标分布和建议分布、验证有效性、计算CDF反函数、推导接受概率公式到常数 C,最后通过手动计算演示采样决策的全过程。
核心操作可总结为以下伪代码流程:
C = 20/9 # 预计算的常数
while True:u1 = generate_uniform_random()Y = sqrt(u1) # 从建议分布g(x)生成样本u2 = generate_uniform_random()P_accept = (27/4) * Y * (1 - Y)**2if u2 < P_accept:return Y # 接受Y作为来自f(x)的样本# 否则循环继续,拒绝该样本
这个方法是将复杂分布采样转化为均匀分布采样的强大工具,在后续的编程练习和测验中将会涉及如何用代码实现这一完整流程。
085:R语言模拟方法教程 🎲
在本教程中,我们将学习如何使用R语言实现模块10讲座中讨论的模拟概念。我们将从生成均匀分布开始,然后探索逆变换法和拒绝法这两种关键的模拟技术,最后通过蒙特卡洛模拟进行应用。教程内容力求简单直白,适合初学者理解。
生成均匀分布随机变量 📊
上一节我们介绍了模拟的基本概念,本节中我们来看看如何生成一个均匀分布的随机变量。虽然R语言内置了runif函数,但理解其底层原理是有益的。
一种生成伪均匀随机变量的方法是线性同余法。其核心思想是使用一个线性递推公式,并通过取模运算来生成看似随机的序列。
以下是实现线性同余法的步骤:
- 初始化参数:设定序列长度
n、斜率a、截距b和一个很大的模数m。 - 创建初始向量:创建一个长度为
n的零向量,但第一个元素设为1。 - 生成序列:对于
i从2到n,使用公式x[i] = (a * x[i-1] + b) mod m计算下一个值。 - 归一化:将生成的序列除以模数
m,得到[0, 1)区间内的均匀分布。
# 线性同余法生成均匀分布示例
n <- 10000
a <- 1664525
b <- 0
m <- 2^32
x <- numeric(n)
x[1] <- 1
for (i in 2:n) {x[i] <- (a * x[i-1] + b) %% m
}
u <- x / m # 均匀随机变量
hist(u, main = "线性同余法生成的均匀分布")

运行上述代码,你会得到一个近似均匀分布的直方图。虽然这不是真正的随机,但对于许多模拟目的来说已经足够。
逆变换法 🔄
上一节我们学会了生成均匀随机变量,本节中我们来看看如何利用它通过逆变换法生成其他分布的随机变量。该方法的核心思想是:如果我们能找到一个目标分布累积分布函数的反函数,就可以将均匀随机变量映射到该分布。
核心公式:若 U ~ Uniform(0,1),且 F_X 是目标随机变量 X 的CDF,其反函数为 F_X^{-1},则 X = F_X^{-1}(U) 服从目标分布。
让我们以指数分布为例。指数分布的CDF为 F(x) = 1 - exp(-λx),其反函数为 x = -log(1-U)/λ。
# 使用逆变换法生成指数分布
lambda <- 0.5
u <- runif(10000) # 使用R内置均匀分布,也可用上节自生成的u
x_exp <- -log(1 - u) / lambda
hist(x_exp, main = "逆变换法生成的指数分布", probability = TRUE)
curve(dexp(x, rate = lambda), add = TRUE, col = "red")
运行代码后,直方图将很好地拟合红色的理论指数分布曲线。
我们可以将此方法应用于任何能求出CDF反函数的分布。以下是通用步骤:
- 确定目标概率密度函数
f(x)。 - 计算其累积分布函数
F(x) = ∫ f(t) dt。 - 求反函数
x = F^{-1}(u)。 - 生成均匀随机变量
u,代入反函数得到目标分布的样本x。
拒绝采样法 🎯
逆变换法需要可逆的CDF,但并非所有分布都满足此条件。本节中我们介绍拒绝采样法,它通过一个易于采样的建议分布g(x)来生成难以直接采样的目标分布f(x)的样本。
核心思想:寻找一个常数C,使得对于所有x,满足 C * g(x) >= f(x)。然后从g(x)中采样,并以概率 f(x) / (C * g(x)) 接受该样本。

以下是实现拒绝采样法的步骤:
- 确定包络:找到一个建议分布
g(x)和常数C,使得C*g(x)始终在f(x)上方。 - 生成候选样本:从
g(x)中生成一个样本y。 - 生成均匀随机数:生成一个
u ~ Uniform(0, 1)。 - 接受/拒绝判断:如果
u <= f(y) / (C * g(y)),则接受y作为f(x)的一个样本;否则拒绝并重复步骤2。

让我们模拟一个PDF为 f(x) = (3/2) * x^2(定义在[-1,1])的分布。我们选择均匀分布U(-1,1)作为g(x)。
# 拒绝采样法示例
f <- function(x) (3/2) * x^2 * (abs(x) <= 1) # 目标PDF
g <- function(x) dunif(x, -1, 1) # 建议分布PDF(均匀分布)
# 寻找常数C,使得 C*g(x) >= f(x) 对所有x成立
# 在[-1,1]上,f(x)的最大值为3/2 (在x=±1处),g(x)恒为1/2
C <- (3/2) / (1/2) # C = 3n_samples <- 10000
samples <- numeric(n_samples)
count <- 0
while(count < n_samples) {y <- runif(1, -1, 1) # 从g(x)采样u <- runif(1)if (u <= f(y) / (C * g(y))) {count <- count + 1samples[count] <- y}
}
hist(samples, main = "拒绝采样法生成的样本", probability = TRUE)
curve(f(x), add = TRUE, col = "red")

选择与目标分布形状接近的建议分布g(x)能显著提高接受率,使模拟更高效。
蒙特卡洛模拟 🎲
前面我们学习了生成特定分布样本的方法,本节中我们来看看如何利用这些样本进行蒙特卡洛模拟。蒙特卡洛模拟是一种通过重复随机抽样来获得数值结果的强大技术,常用于估计概率、积分等。
一个简单的例子是估计标准正态分布随机变量的绝对值大于2的概率。
# 蒙特卡洛估计概率
set.seed(123)
n <- 100000
x <- rnorm(n) # 从标准正态分布抽样
y <- as.integer(abs(x) > 2) # 指示变量,满足条件为1
estimated_prob <- mean(y) # 等于 sum(y)/n
true_prob <- 2 * pnorm(-2) # 理论值
cat("蒙特卡洛估计值:", estimated_prob, "\n")
cat("理论值:", true_prob)
蒙特卡洛模拟也可用于计算积分。例如,估计函数 h(x)=x*sqrt(x) 在[0,1]上的积分(即面积)。
# 蒙特卡洛积分
n <- 100000
x <- runif(n) # 在[0,1]上均匀抽样
h <- x * sqrt(x)
estimated_integral <- mean(h)
true_integral <- integrate(function(t) t*sqrt(t), 0, 1)$value
cat("蒙特卡洛估计积分:", estimated_integral, "\n")
cat("理论积分值:", true_integral)
最经典的蒙特卡洛应用之一是估计圆周率π。考虑一个边长为1的正方形及其内切四分之一圆(半径1)。随机向正方形投点,点落在四分之一圆内的概率等于圆面积与正方形面积之比,即 (π*1^2/4) / (1^1) = π/4。因此,π ≈ 4 * (圆内点数 / 总点数)。
# 蒙特卡洛估计π
estimate_pi <- function(n) {x <- runif(n)y <- runif(n)in_circle <- (x^2 + y^2) <= 1pi_est <- 4 * sum(in_circle) / nreturn(pi_est)
}
cat("n=1000时估计的π:", estimate_pi(1000), "\n")
cat("n=100000时估计的π:", estimate_pi(100000))
随着抽样次数n的增加,估计值会越来越接近真实的π。
总结 📝


本节课中我们一起学习了在R语言中实现统计模拟的核心方法。



我们首先从生成均匀分布随机变量开始,了解了线性同余法的基本原理。接着,我们深入探讨了逆变换法,它利用均匀分布和CDF的反函数来生成其他复杂分布的样本。对于CDF不易求反的情况,我们引入了拒绝采样法,该方法通过一个易于采样的建议分布和接受-拒绝机制来生成目标分布的样本。最后,我们展示了如何运用这些抽样技术进行蒙特卡洛模拟,以解决概率估计、数值积分等实际问题。



掌握这些模拟技术,你将能够处理许多缺乏解析解或理论分布复杂的统计计算问题。
086:指数随机图模型 🧮

在本节课中,我们将学习指数随机图模型。这是一种用于分析网络数据的统计方法,特别适用于处理网络中普遍存在的结构依赖性问题。我们将从基本概念入手,学习如何手动计算网络中连边的似然,理解如何对网络中的社会力量进行假设检验,并最终在R语言中使用statnet包构建一个指数随机图模型。
网络中的结构依赖性
上一节我们介绍了网络分析的基本概念,本节中我们来看看网络数据的一个核心特征:结构依赖性。
在大多数统计推断中,一个必要的假设是数据是独立同分布的。独立性假设意味着其他数据点的值不会影响你正在观察的数据点的值。然而,在网络中,这个假设通常不成立。你与他人的连接完全依赖于他们与其他人之间的连接。你的属性、信念和价值观会受到你社交互动对象的影响。因此,在大多数网络案例中,独立性假设是无效的。我们需要理解如何处理这种依赖性,以便对网络进行正确的统计分析。
计算连边的似然
为了进行统计推断,我们首先需要能够计算网络中连边出现的可能性。
以下是理解连边似然的基本前提:
- 我们理解真实社交网络中的连边并非随机形成。
- 我们知道人们围绕社会焦点形成连接。
- 我们知道人们在可维持的连接数量上存在限制。
- 我们也知道人们有与他人互动的生物性需求。
所有这些因素以有趣的方式相互作用,形成了网络。我们希望以一种允许我们进行假设检验和统计推断的方式来建模这些因素。
我将用一个我能想到的最小的网络——一个三节点网络——来给你一个简单的例子。这是一个无向网络。

对于三个节点和无向连接,存在八种可能的网络配置。其中,只有一条连边的配置有三种。因此,观察到仅有一条连边的概率是 3/8。
类似地,我们可以计算其他情况:
- 观察到零条连边的概率是 1/8。
- 观察到两条连边的概率是 3/8。
- 观察到三条连边的概率是 1/8。
这个例子有趣的地方在于,出现一条或两条连边的可能性远高于出现零条或三条连边。随着网络规模扩大,密度在0.5附近的配置总是会比密度在0或1附近的配置多得多。
我们感兴趣的问题是:给定不同配置的似然分布,并且你观察到一个经验网络,它告诉你所观察值的范围,我们如何利用这一点来控制我们的统计推断?换句话说,对于这个问题,给定网络中只有一条连边,节点i和节点j之间存在连边的可能性是多少?
答案是 1/3。当我们说“给定网络中只有一条连边”时,我们排除了网络中连边多于或少于一条的其他可能性,将我们的搜索(样本空间)限制在仅有一条连边的配置中。然后,对于从i到j的连边,有一种情况是成功的,有两种情况是不成功的,所以答案是1/3。
这很重要,因为两个节点连接可能性的很多方差可以通过图的密度来解释。因此,在对网络进行统计分析时,我们希望控制这个因素。未能控制网络密度会在效应估计中产生显著偏差。
如果网络是有向的呢?对于有向网络,存在 n * (n-1) 条可能的连边,每条可以是1或0,因此总共有 2^(n*(n-1)) 种可能的配置。对于三节点有向网络,就是 64 种配置。其中,仅包含一条有向连边的方式有 2 * C(3,2) = 6 种。因此,给定网络中只有一条有向连边,特定节点i到节点j之间存在一条有向连边的可能性是 1/6。
转向正式的统计分布
现在,我们将这个问题转向更正式的统计分布——伯努利分布。
伯努利分布是一种概率分布,其中随机变量可以以成功概率 P 取值为1或0。我们假设两个行动者之间的连边可以是1或0,这取决于某个概率(如果我们处理的是随机图)。
该分布如下所示。观察到 x(给定成功概率参数 P)的似然为:
P(X=x | p) = p^x * (1-p)^(1-x)
- 如果
x=1(存在连边),似然为p。 - 如果
x=0(不存在连边),似然为1-p。
然而,一个网络有多条连边。因此,概率必须相乘,就像将一条连边的不同可能性枚举到网络中的多条连边一样。我们用统计方法表示如下:给定 p,观察到特定网络配置 X(一组 x_ij)的似然是所有潜在连边(所有不同潜在边)的乘积:
L(X | p) = ∏_{i,j} [ p^{x_{ij}} * (1-p)^{1-x_{ij}} ]
为了找到使似然最大化的连边概率 p 的估计值,我们需要使用微积分,对这个项求导并设其为零。但这非常困难,因为需要对一个乘积求导。因此,我们使用一个小技巧:对两边的似然取对数。取对数将乘积转换为求和,使数学问题变得容易得多。
对数似然函数如下所示:
log L(X | p) = log(∏ [p^{x_{ij}} (1-p)^{1-x_{ij}}]) = ∑ [x_{ij} log(p) + (1-x_{ij}) log(1-p)]
经过推导,我们可以得到参数 p 的估计值:
p_hat = (∑ x_{ij}) / (总连边数)
∑ x_{ij} 是网络中连边的数量(一堆1的和)。因此,网络中出现连边的最可能估计值就是网络本身的密度。
指数随机图模型基础
上一节我们推导了简单随机图中连边概率的估计,本节我们引入指数随机图模型的核心思想。
我们希望在指数函数中估计一个参数。考虑一个类似回归的函数:e^{θ * z(X)},其中 θ 是系数,z(X) 是可以在网络上计算的某个统计量(例如,边数、三角形数、互惠链接数等)。我们想要估计那个 θ。
连边存在与不存在的概率比值的对数将等于一个模型,该模型由系数乘以各种统计量组成。我们称这些 θ 值为比例常数。
log[ P(A=1) / P(A=0) ] = θ * z(X)
如果我对两边取指数,即计算 e^{log[P/(1-P)]},可以得到 P/(1-P) 的简单表达式。然后,我能够通过代数操作,得到连边发生概率 P 与此指数模型之间的关系式:
P(A=1) = e^{θ*z(X)} / (1 + e^{θ*z(X)})
请注意,z(X) 可以是许多不同的统计量,所以模型可以是 θ1*z1(X) + θ2*z2(X) + θ3*z3(X) + ...,包含任何你想加入模型的项。
这现在描述了一个统计项的模型,并且我们建立了该模型与连边发生概率之间的关系。这两个是关键方程:
log[ P/(1-P) ] = θ * z(X)P = e^{θ*z(X)} / (1 + e^{θ*z(X)})
在指数随机图模型中,我们要估计包含在模型中的各种网络项的系数(比例常数)。我们希望能够手动计算这如何帮助我们估计连边发生的概率。
让我们以只有一个连边的网络为例(有向)。密度是 1/6,发生的概率是 1/6。我们的方程将概率与该指数随机图模型的估计联系起来。这里的 θ 将是:
θ = log( P/(1-P) ) = log( (1/6) / (5/6) ) = log(1/5) ≈ -1.609
在R中实现指数随机图模型
现在,我们将在R中通过statnet包实际运行一个指数随机图模型。
首先,确保你已安装并加载了statnet包。然后,我们创建一个简单的三节点有向网络,其中只有从节点1到节点2的一条连边。
library(statnet)
# 初始化一个3节点的有向网络
n <- network.initialize(3, directed = TRUE)
# 设置从节点1到节点2存在连边
n[1, 2] <- 1
# 绘制网络图
gplot(n)
接下来,我们运行一个仅包含“边”这一项的指数随机图模型。
# 运行ERGM,模型只包含边数项
e1 <- ergm(n ~ edges)
# 查看模型摘要
summary(e1)
模型摘要会显示公式、系数估计值、标准误和p值等。对于这个简单例子,你应该看到“边”的系数估计值约为 -1.609,这与我们手动计算的结果一致。p值用于检验该项是否显著(即边数是否与连边形成无关)。AIC和BIC是信息准则,用于比较不同模型,通常值越小表示模型越好。
我们刚刚完成的工作是:观察了网络中连边发生的对数似然,并推导出连边发生的最可能估计是网络密度。然后,我们将该术语转化为:连边发生与不发生的概率比值的对数(也称为logit)可以建模为网络各种属性的函数,由一个比例常数表示。我们推导了这个模型与连边发生概率之间的关系。接着,我们通过一个例子,通过检查已知概率并计算系数,然后在R中生成网络并运行指数随机图模型,验证了得到完全相同的结果。
一个更大的实例分析
现在,我们将分析一个更大的网络实例:来自美剧《实习医生格蕾》的角色关系网络。这是一个无向网络,包含44个节点和49条连边。
首先,计算该网络的密度。密度公式为 2L / (N*(N-1))(对于无向图)。对于这个网络,密度约为 0.0518。
在R中加载该网络数据(假设数据文件已准备好),并运行一个仅包含“边”项的ERGM。
# 假设网络数据已加载为对象‘grays_network’
model_edges <- ergm(grays_network ~ edges)
summary(model_edges)
你应该会得到一个“边”的系数估计值,大约为 -2.9072。我们可以用公式验证:
θ = log( P/(1-P) ) = log( 0.0518 / (1-0.0518) ) ≈ -2.9072
反过来,我们也可以用系数计算出概率:
P = e^θ / (1 + e^θ) = e^{-2.9072} / (1 + e^{-2.9072}) ≈ 0.0518
仅仅控制边数(密度)还不够,我们还没有进行任何有趣的假设检验。在观察网络时(蓝色节点代表男性,粉色代表女性),我们可能想检验“异性相吸”或“同性相吸”的效应。但我们必须先控制网络效应(如密度),才能对这类属性效应做出明智的判断。
通常,密度能解释模型中的大部分方差。下一个最常见的属性是互惠性(对有向网络)或传递性效应(三角形闭合)。由于这是一个无向网络,我们接下来添加“三角形”项。
model_tri <- ergm(grays_network ~ edges + triangle)
summary(model_tri)
你会发现“三角形”项是显著的(p值 < 0.05)。在控制了典型的网络效应(边和三角形)之后,我们可以添加其他假设检验项。例如,我们想检验性别同配性(即相同性别是否增加连接可能性)。
model_full <- ergm(grays_network ~ edges + triangle + nodematch(“sex”))
summary(model_full)
结果显示,“nodematch(sex)”项高度显著,但系数为负。负系数意味着什么?这意味着性别相同降低了连接的可能性,换句话说,网络中存在着显著的异配性(即异性连接更常见)。同时,你可能会注意到“三角形”项的系数显示为NA(无法估计)。这是因为在这个特定网络中,三角形的存在几乎完全与“性别相同”的情况共线(例如,网络中仅有的少数三角形可能都发生在同性角色之间),导致模型无法区分两者的独立效应。
经过检查,我们可能决定从模型中移除“三角形”项,因为它在这个网络中并不普遍,并且与我们的兴趣变量高度共线。然后,我们可以测试其他属性,例如种族同配性。
model_race <- ergm(grays_network ~ edges + nodematch(“race”))
summary(model_race)
如果p值小于0.05,我们可以得出结论:网络中存在着显著的种族同配性。
使用ERGM的注意事项
在使用指数随机图模型时,有几点需要注意:
以下是选择模型项时的一些指导原则:
- 不要过度添加项:你可以编码并加入无数网络属性到模型中,但必须问自己:你测试的假设是什么?这个网络构型对你是否有社会学意义?
- 参考有意义的构型:常见的待检验项包括互惠性、流行度、扩张性、传递性闭合(如GWESP,即几何加权边共享伙伴,通常比简单的“三角形”项更好)、共享伙伴、发送者效应、接收者效应、同配性等。这些类别可以帮助你思考想要建模的网络特征的社会学含义。
- 不要包含多个传递性项:如果你已经加入了像“三角形”这样的项,就不要再加入“循环”或其他平衡项。因为它们之间通常存在大量共变性。你的目标是控制传递性效应,但加入多个项并不会带来额外信息,只需选择一个合理的传递性项即可。
- 检查系数方向是否合理:对于密度低于0.5的网络,我们通常期望“边”的系数为负且显著。如果你看到的结果与网络可视化或直觉明显相反(例如,模型显示同性连接显著为正,但图中明显异性连接更多),那可能表明你的模型有问题。
总结与为什么使用R
本节课中,我们一起学习了指数随机图模型。我们从理解网络数据的结构依赖性开始,学习了如何手动计算连边的似然,并推导了简单随机图的最大似然估计。接着,我们引入了ERGM的核心公式,将连边概率与网络统计量的线性组合通过logit函数联系起来。我们通过简单的三节点网络示例,手动计算并与R中的statnet包结果进行验证。最后,我们分析了一个更大的实例(《实习医生格蕾》网络),演示了如何逐步构建模型,控制基础网络效应(如密度),并加入社会学假设(如性别、种族同配性)进行检验。
R语言为我们提供了进行网络统计分析的工具。我们认识到网络效应非常重要,它们影响和塑造了网络中某种行为、态度或价值观的采纳。因此,在对社会群体进行任何研究时,将这些效应包含在内至关重要。目前,指数随机图模型是进行此类网络统计分析最有效的方法之一,而R语言是实现它的强大平台。


087:随机行动者导向模型 (Siena模型) 🎯

在本节课中,我们将学习如何分析随时间变化的网络数据。我们将理解网络中的结构依赖性如何影响统计分析,并重点学习纵向网络行为。我们将使用经验数据对网络中的社会力量进行假设检验,并最终使用R语言中的RSiena包构建一个随机行动者导向模型。
概述
随机行动者导向模型,也称为Siena模型,用于研究网络和行为如何随时间共同演化。它帮助我们理解社会力量(如互惠性、传递性)如何影响网络结构的变化,以及个体属性(如行为)如何与网络动态相互作用。
上一节我们介绍了用于横截面网络的指数随机图模型(ERGM)。本节中,我们来看看当数据包含多个时间点时,应如何进行分析。
数据准备与模型假设
在开始建模之前,需要准备好纵向网络数据并理解模型的基本假设。
Siena模型的核心假设是:行动者基于给定时刻的网络状态,对其网络连接和行为做出选择。模型模拟从时间1到时间2的网络演化过程,通过生成一系列微步骤(micro-steps)来模拟数据可能的演变方式。
一个可能破坏模型有效性的情况是多个连接同时形成或改变。例如,在国际象棋网络中,移动一个棋子会同时切断并建立多个连接,这违反了行动者进行独立选择的假设。对于大规模通信(如邮件群发)如何影响模型收敛,仍是开放性问题。
另一个假设是行动者做决策的局部规则会对全局结构产生影响。
Siena模型建模五步法
以下是使用RSiena进行分析的五个主要步骤。
第一步:数据格式化
此步骤将网络和行为数据读入R,并格式化为RSiena所需的格式。
以下是读取网络数据(三个时间点)和行为属性数据(吸烟、饮酒)的示例代码:
# 读取网络数据(时间点1)
s501 <- read.table("s50-network1.dat", header=FALSE, sep=" ")
s50.net1 <- as.matrix(s501[, 2:51]) # 处理多余列# 对时间点2和3重复类似操作
# s502 <- read.table("s50-network2.dat", ...)
# s50.net2 <- as.matrix(s502[, 2:51])
# s503 <- read.table("s50-network3.dat", ...)
# s50.net3 <- as.matrix(s503[, 2:51])# 读取行为属性数据
drink <- read.table("s50-alcohol.dat", header=FALSE, sep=" ")
smoke <- read.table("s50-smoking.dat", header=FALSE, sep=" ")
drink1 <- as.matrix(drink[, 2:4]) # 三个时间点的饮酒数据
smoke1 <- as.matrix(smoke[, 2]) # 吸烟数据(示例中设为恒定协变量)
第二步:数据设定
此步骤定义模型中将使用的变量类型,包括网络、恒定协变量和变化协变量。
RSiena中主要有五类解释变量:
- 恒定行动者协变量(如种族)。
- 变化行动者协变量(如随时间变化的行为)。
- 恒定二元协变量(如家庭关系)。
- 变化二元协变量(如友谊强度)。
- 组合变化指标(本课不涉及)。
注意:对于任何变化协变量,至少需要三个时间点的数据,因为模型估计的是时间1到时间2以及时间2到时间3之间的变化。
以下代码展示如何创建Siena数据对象:
library(RSiena)
# 创建纵向网络对象
friendship <- sienaDependent(array(c(s50.net1, s50.net2, s50.net3),dim = c(50, 50, 3)))
# 定义协变量
smoke1 <- coCovar(smoke1[, 1]) # 恒定协变量
alcohol <- varCovar(drink1) # 变化协变量
# 组合成Siena数据对象
myData <- sienaDataCreate(friendship, smoke1, alcohol)
第三步:模型设定
此步骤指定模型中要包含的效应(即待检验的社会力量),定义目标函数。
以下是查看、添加和移除模型效应的代码:
# 获取初始效应集(受限模型)
myEffects <- getEffects(myData)
print(myEffects)# 添加效应:传递性三元组和三环
myEffects <- includeEffects(myEffects, transTrip, cycle3)# 移除效应(例如移除三环)
myEffects <- includeEffects(myEffects, cycle3, include=FALSE)
模型通常从包含出度(类似密度)和互惠性的受限模型开始,因为它们解释了网络结构的大部分方差。
第四步:模型估计
此步骤运行模型,使用马尔可夫链蒙特卡洛方法进行模拟,以估计参数。
以下是创建算法对象、设定最终模型并运行估计的代码:
# 创建算法对象
myAlgorithm <- sienaAlgorithmCreate(projname = 's50_3waves')
# 定义包含多种效应的模型(示例)
myEffects <- includeEffects(myEffects, egoX, altX, egoXaltX, interaction1 = "alcohol")
# 运行模型估计
ans <- siena07(myAlgorithm, data = myData, effects = myEffects)
第五步:结果解读
此步骤分析模型输出,识别显著影响网络演化的因素。
模型结果会给出每个效应的估计值、标准误差和收敛性统计量。判断一个效应是否显著,通常看其估计值是否远离零(例如,绝对值大于两倍标准误差)。
以下是如何解读关键参数:
- 出度:通常应为显著负值,反映个体建立连接的能力有限。
- 互惠性:显著正值表明相互连接的趋势很强。
- 传递性三元组:显著正值表明朋友的朋友容易成为朋友。
- 行为同质性:如
alcohol egoXaltX效应显著,表明饮酒行为相似的人更容易成为朋友(同质性)。
总结
本节课我们一起学习了随机行动者导向模型(Siena模型)。
- ERGM 用于分析单个时间点的静态网络,控制结构依赖性。
- Siena模型 则允许我们分析纵向网络数据,区分选择(行为影响友谊形成)和影响(友谊影响行为采纳)过程。
- 我们逐步介绍了从数据准备、设定、估计到解读的完整建模流程。
- 该模型在公共卫生等领域有重要应用,但需要注意其对数据规模(节点数、时间点)和模型假设的要求。

通过本课提供的R脚本和示例数据,你可以开始探索网络与行为随时间共同演化的复杂动态。
088:贝叶斯网络 🕸️
在本节课中,我们将要学习概率图模型,特别是贝叶斯网络。我们将了解它们如何表示复杂的概率分布,以及如何利用图结构来编码变量之间的条件独立关系。掌握这一概念,将使我们能够运用成熟的图算法进行高效的推断和学习。
概述
概率图模型是一种强大的工具,它使用图结构来表示概率分布。其核心优势在于,能够将复杂的联合概率分布中蕴含的条件独立结构编码在一个图中。这为我们带来了两大好处:第一,它使得复杂的概率分布更易于计算机处理和表示;第二,我们可以利用图论中成熟的算法,在这个模型上进行推断(如计算某些变量的概率)和学习(如从数据中估计模型参数)。
上一节我们介绍了概率图模型的核心思想,本节中我们来看看一个具体的例子:贝叶斯网络。
贝叶斯网络示例

贝叶斯网络是一种有向无环图。在图中,每个节点代表一个随机变量,而有向边则代表了变量之间的依赖关系。箭头的方向表示条件依赖:箭头指向的变量概率,取决于箭头来源的变量。
让我们通过一个简单的例子来理解。假设我们考虑三个变量:温度(T)、是否穿夹克(J)和鞋码(S)。我们可以构建如下网络:

在这个网络中:
- 箭头从 T 指向 J,这表示“是否穿夹克”的概率依赖于“温度”。用概率公式表示为:
P(J | T)。 - 变量 S(鞋码)与其他两个变量之间没有连接,这意味着鞋码与温度和是否穿夹克都相互独立。
因此,这个图结构编码了我们的先验知识:一个人穿夹克的可能性取决于天气温度,但与他穿多大码的鞋无关。
从图结构到联合概率
贝叶斯网络的核心价值在于,它提供了一种分解高维联合概率分布的方法。对于上述三个变量的联合概率 P(T, J, S),如果直接建模会非常复杂。但利用图中编码的条件独立关系,我们可以将其重写为更简单的因子乘积形式。
根据上图的结构,联合概率可以分解为:
P(T, J, S) = P(S) * P(T) * P(J | T)
这个公式的意义在于:
P(S)和P(T)是边缘概率,没有条件依赖。P(J | T)是条件概率,表示在已知温度的条件下穿夹克的概率。
通过这种方式,我们将一个三维的联合概率分布,分解为了几个更易处理和估计的低维概率(一个一维分布、一个一维分布和一个二维条件分布)。这大大简化了建模和计算的复杂度。

网络的扩展与威力
贝叶斯网络的威力在于其可扩展性。我们可以轻松地向网络中添加新的变量和关系。
例如,我们可以在原有网络中加入“天气(W)”和“是否戴手套(G)”两个变量:

在这个扩展网络中:
- 天气(W)可能同时影响温度(T)和是否穿夹克(J)。
- 温度(T)和是否穿夹克(J)都可能影响是否戴手套(G)。
- 鞋码(S)仍然独立于其他所有变量。
此时,联合概率 P(S, T, W, J, G) 可以根据新的图结构进行分解。虽然变量增多使得联合空间维度更高,但利用条件独立结构分解后,我们只需要估计一系列相对简单的局部条件概率(例如 P(G | J, T)),就能表征整个复杂的联合分布。
这正是概率图模型,特别是贝叶斯网络的强大之处:它将一个难以直接处理的高维概率空间,转化为一个结构清晰的图模型。这个模型可以被计算机高效地存储和操作,并利用图算法进行各种概率推断和参数学习。
总结

本节课中我们一起学习了贝叶斯网络的基础知识。我们了解到:
- 贝叶斯网络是一种有向无环图,用于表示变量间的依赖关系。
- 图中的节点代表随机变量,有向边代表条件依赖关系。
- 网络结构编码了联合概率分布中的条件独立信息,允许我们将复杂的联合分布分解为一系列局部条件概率的乘积,公式为:
P(X1, X2, ..., Xn) = ∏ P(Xi | Parents(Xi))。 - 这种表示方法极大地简化了高维概率模型的建模、计算和学习过程,是连接概率论与图论的有力工具。
089:朴素贝叶斯 🧠
在本节课中,我们将深入探讨贝叶斯网络,并重点介绍一种特殊且实用的简化模型——朴素贝叶斯。我们将学习其核心概念、公式表示,并理解它为何在分类问题中如此受欢迎。
上一节我们介绍了贝叶斯网络的基本结构和条件独立性的概念。本节中,我们来看看一种基于强独立性假设的简化模型。
从一般网络到简化模型
回顾上一讲的例子,我们有一个关于温度、天气、夹克和雨伞的贝叶斯网络。其联合概率可以分解为:
P(T, W, J, U) = P(T) * P(W) * P(J | T, W) * P(U | W)
在这个网络中,每个节点的概率都条件依赖于其在图中的父节点。例如,雨伞U的概率只依赖于其父节点天气W。这意味着,如果我们知道了一个节点的父节点状态,那么该节点就与网络中其他非后代节点条件独立。这种特性允许我们简化计算。
两种网络结构的对比
以下是两种截然不同的贝叶斯网络结构,它们体现了建模思路的根本差异。


第一个网络(上方):变量Y是父节点,X1到X5都是它的子节点,且每个Xi只有一个父节点Y。其联合概率分解为:
P(Y, X1, X2, X3, X4, X5) = P(Y) * ∏_{i=1}^{5} P(Xi | Y)
第二个网络(下方):变量Y是子节点,X1到X5都是它的父节点。其联合概率分解为:
P(Y, X1, X2, X3, X4, X5) = P(Y | X1, X2, X3, X4, X5) * ∏_{i=1}^{5} P(Xi)
理解朴素贝叶斯
第一个网络的结构正是朴素贝叶斯(Naive Bayes) 模型的图形化表示。它之所以“朴素”,是因为它做了一个很强的假设:在给定父节点Y(通常是类别标签)的条件下,所有特征X1, ..., Xn之间是相互条件独立的。
以下是朴素贝叶斯的核心特点:
- 简化公式:
P(Y | X1, ..., Xn) ∝ P(Y) * ∏_{i=1}^{n} P(Xi | Y) - 模型优势:计算极其简单高效。只需要估计每个特征
Xi在各类别Y下的条件概率P(Xi | Y)以及类别的先验概率P(Y),避免了像下方网络那样需要估计P(Y | X1,...,Xn)这个具有指数级复杂度的条件概率表。 - 应用场景:尽管独立性假设在现实中很少完全成立,但朴素贝叶斯因其简单、快速且通常效果不错的特性,被广泛用于文本分类(如垃圾邮件过滤)、情感分析等任务。
相比之下,第二个网络的结构更接近逻辑回归(Logistic Regression) 的思维方式,其中结果Y依赖于多个特征X的线性组合。这种模型表达能力强,但需要更多的数据和计算来估计参数。
总结与展望
本节课中我们一起学习了朴素贝叶斯模型。我们了解到,它是贝叶斯网络的一个特例,通过假设特征在给定类别下条件独立,将复杂的联合概率分布简化为一系列单变量条件概率的乘积。这种简化使得模型易于构建和计算,非常适合作为高维数据分类的基线模型。
朴素贝叶斯是贝叶斯网络框架下利用条件独立性进行简化建模的典范。在接下来的课程中,我们将继续探索如何将这种条件独立性的思想推广到更复杂的网络结构中,以构建既能表达变量间依赖关系,又保持计算可行性的通用贝叶斯网络模型。


090:马尔可夫毯 🧠






在本节课中,我们将要学习贝叶斯网络中的核心概念——条件独立性,并重点介绍一个非常强大的工具:马尔可夫毯。理解这个概念能让我们在处理复杂的贝叶斯网络时,极大地简化概率计算。


上一节我们介绍了朴素贝叶斯网络,它利用了条件独立性来简化计算。本节中,我们来看看在更一般的贝叶斯网络中,条件独立性是如何体现的,以及如何利用马尔可夫毯来界定一个节点的“影响范围”。

贝叶斯网络中的条件独立性



在贝叶斯网络中,每个节点都遵循一个基本规则:给定其父节点,该节点条件独立于其所有非后代节点。


这个性质是贝叶斯网络结构带来的核心优势,它使得我们无需计算整个高维联合概率分布,就能进行高效的推理。





为了说明这个规则,让我们看一个具体的例子。



示例解析:天气与穿衣网络 🌦️



考虑左侧的贝叶斯网络图。我们假设有以下变量:
- E:是否为厄尔尼诺年。
- W:天气状况(受E影响)。
- S:季节。
- T:温度(受S影响)。
- J:是否穿夹克(受W和T共同影响)。



现在,让我们应用条件独立性规则来分析几个节点。



首先,我们来看温度节点 T。




T 的父节点是 S,它的后代节点是 J。根据规则,给定其父节点 S,T 条件独立于其所有非后代节点。




以下是 T 的非后代节点:
- E (厄尔尼诺)
- W (天气)




这意味着,一旦我们知道了季节 S 的信息,那么关于 E 或 W 的任何信息都不会再影响我们对 T 的判断。T 与 E、W 在给定 S 的条件下是独立的。




接下来,我们看看夹克节点 J。



J 的父节点是 T 和 W。根据规则,给定其父节点 T 和 W,J 条件独立于其所有非后代节点。





以下是 J 的非后代节点:
- S (季节)
- E (厄尔尼诺)



这意味着,如果我们已经掌握了温度 T 和天气 W 的证据,那么关于季节 S 或厄尔尼诺 E 的信息,对于判断是否穿夹克 J 就没有任何额外影响了。



通过以上分析,我们看到了条件独立性如何根据网络结构来简化变量之间的关系。然而,还有一个更强大、更通用的概念可以帮助我们界定任意节点的“信息边界”。




马尔可夫毯:节点的信息边界 🛡️



马尔可夫毯是一个非常重要的定义。它指出:在贝叶斯网络中,每个节点都条件独立于网络中所有其他节点,只要给定了它的马尔可夫毯。




那么,什么是马尔可夫毯呢?一个节点的马尔可夫毯包括以下三类节点:
- 该节点的所有父节点。
- 该节点的所有子节点。
- 该节点所有子节点的其他父节点(即“配偶”节点)。


让我们再次以温度节点 T 为例,来找出它的马尔可夫毯。


以下是构成 T 的马尔可夫毯的节点:
- 父节点:季节 S。
- 子节点:夹克 J。
- 子节点的其他父节点:天气 W(因为 J 的父节点是 T 和 W)。




因此,节点 S、J、W 共同构成了 T 的马尔可夫毯。




这个概念的强大之处在于,无论网络其余部分有多大、多复杂,只要给定了马尔可夫毯中的节点(即这些节点被观测到并有了具体取值),那么该节点就与网络中所有其他节点条件独立。



在计算某个节点的概率时,我们只需要考虑其马尔可夫毯内的节点。这使我们将计算从一个巨大的、与所有变量相关的联合概率空间,简化到一个只与少数几个变量相关的小空间,计算复杂度因此呈数量级地降低。



总结



本节课中我们一起学习了贝叶斯网络中两个关键的条件独立性概念。





首先,我们回顾了给定父节点条件下的条件独立性规则,它定义了节点与其非后代节点之间的关系。



接着,我们深入探讨了更强大的马尔可夫毯概念。马尔可夫毯明确界定了一个节点的“信息边界”,包含其父节点、子节点以及子节点的其他父节点。给定马尔可夫毯,该节点便与网络中的其他所有节点条件独立。




掌握马尔可夫毯的概念,是理解贝叶斯网络如何高效进行概率推理的核心。它让我们能够化整为零,无论网络结构多么庞大,都能专注于局部关系进行计算,这是贝叶斯网络得以实用的重要基石。
091:贝叶斯推断 🧠
在本节课中,我们将要学习贝叶斯推断。我们将探讨如何利用贝叶斯网络,在已知部分变量的情况下,推断出其他未知变量的概率。我们将介绍两种核心方法:枚举法和变量消除法。
问题引入
考虑一个包含四个变量的贝叶斯网络:温度(T)、天气(W)、是否穿夹克(J)和是否带伞(U)。其联合概率分布可以依据网络结构进行分解:
P(T, W, J, U) = P(T) * P(W) * P(J | T, W) * P(U | W)

然而,推断问题通常是条件概率问题。例如,我们可能想知道:在观察到某人穿了夹克(J)的情况下,天气(W)的概率分布是怎样的? 即求 P(W | J)。
上一节我们介绍了贝叶斯网络的联合概率表示,本节中我们来看看如何进行这种条件概率推断。
方法一:枚举法 🔢
根据条件概率的定义,我们可以通过边缘化(求和)来求解:
P(W | J) = Σ_T Σ_U P(T, W, J, U) / P(J)
其中,分母 P(J) 是一个归一化常数。在推断中,我们通常先计算未归一化的比例项:
P(W | J) ∝ Σ_T Σ_U P(T, W, J, U)

将联合概率分解式代入,我们可以通过枚举所有可能的 T 和 U 值来计算这个求和。这个过程可以形象地表示为一棵决策树:
- 从根节点 P(W) 开始。
- 对每个天气状态,考虑所有可能的温度值 P(T)。
- 对每个(天气,温度)组合,考虑是否穿夹克的概率 P(J | T, W)。
- 最后,对每个分支,还需考虑并求和所有带伞的可能性 P(U | W)。
以下是枚举计算的关键步骤:
- 在树的每个层级,我们需要对当前变量的所有可能取值进行求和。
- 最终,沿着特定天气(W)分支的所有路径的概率乘积之和,就正比于 P(W | J)。
当变量数量较少时,枚举法是可行的。但如果网络庞大,计算量会呈指数级增长。
方法二:变量消除法 🧹
变量消除法提供了一种更系统、更高效的计算方式。其核心思想是:按顺序对非查询变量进行求和(消除),并逐步生成新的中间因子。
对于我们的问题 P(W | J),目标是消除变量 T 和 U。
首先,从联合概率中提取出与待消除变量 T 相关的项:
P(W) * [Σ_T P(T) * P(J | T, W)] * [Σ_U P(U | W)]

注意,P(W) 与 T 和 U 无关,可以单独提出。方括号内的求和分别消除了变量 T 和 U。
具体来说,我们可以定义一个关于 J 和 W 的新函数 f_T(J, W),来封装对 T 的求和结果:
f_T(J, W) = Σ_T P(T) * P(J | T, W)
同样,对 U 的求和结果是一个关于 W 的函数 f_U(W) = Σ_U P(U | W)。
于是,我们的推断问题简化为:
P(W | J) ∝ P(W) * f_T(J, W) * f_U(W)
这样,我们通过两次局部的求和操作(生成新因子),避免了像枚举法那样对整个巨大状态空间进行遍历,大大提升了计算效率。

变量消除法的要点与步骤 📝
变量消除法的优势在于它能识别并忽略无关变量。一个重要的规则是:任何既不是查询变量的祖先,也不属于证据(已观察)变量的变量,对于该查询都是无关的,可以在计算前被移除。
以下是执行变量消除的标准步骤:
- 选择消除顺序:确定消除非查询变量的顺序。
- 求和生成新因子:对于要消除的变量,将所有包含该变量的概率项相乘,然后对该变量的所有可能取值求和,生成一个新的因子(函数)。
- 迭代消除:用新因子替换原来的相关项,在更新后的表达式中继续消除下一个变量。
- 归一化:当所有非查询变量都被消除后,得到的是一个正比于目标概率的表达式。最后进行归一化,使其总和为1,即得到最终的条件概率分布。
总结
本节课中我们一起学习了贝叶斯推断的两种核心方法。
- 枚举法 直观但计算成本高,适用于小型网络。
- 变量消除法 通过系统性地求和消除变量并生成中间因子,显著提高了计算效率,是处理大型贝叶斯网络推断的实用技术。

这两种方法都使我们能够利用贝叶斯网络的结构,从部分已知信息中推断出未知变量的概率。在实际应用中,我们可以借助 R 等工具中的专门程序包来轻松实现这些推断算法。
092:R语言教程 🧮

在本教程中,我们将学习如何在R语言中使用gRain包来构建和操作概率图模型。我们将通过一个具体的例子,演示如何定义变量、建立条件概率表、构建贝叶斯网络,并进行概率查询和推断。



概述




我们将创建一个关于天气、温度、外套和雨伞的简单贝叶斯网络。通过这个例子,你将学会如何将理论知识转化为可执行的R代码,并利用图模型进行概率计算。




环境准备与数据加载



首先,我们需要准备R环境并加载必要的库和工具。





# 清除全局变量和图形
rm(list=ls())
graphics.off()# 加载自定义工具库(需确保已安装gRain库)
source("stat_tools.R")




上一节我们完成了环境设置,本节中我们来看看如何定义网络中的变量及其概率分布。




定义变量与条件概率表




在计算机上构建概率图模型时,需要为每个变量上传其概率分布。我们通过条件概率表来实现这一点。gRain包中的CPT函数用于创建条件概率表实例。



以下是定义“温度”变量的示例:





# 定义温度变量及其概率分布
temperature <- CPT(values = c(0.1, 0.4, 0.4, 0.1),levels = c("<40", "40-59", "60-80", ">80"))
这段代码表示:温度低于40度的概率为10%,在40-59度之间的概率为40%,在60-80度之间的概率为40%,高于80度的概率为10%。




接下来,我们按照相同的方式定义其他变量。这个例子与之前视频讲座中的例子完全相同。



# 定义天气变量
weather <- CPT(values = c(0.1, 0.5, 0.4),levels = c("rainy", "cloudy", "sunny"))# 定义雨伞变量(条件于天气)
umbrella <- CPT(values = c(0.8, 0.2, # 下雨时,雨伞打开的概率为80%,关闭为20%0.1, 0.9, # 多云时0.01, 0.99), # 晴天时levels = c("open", "closed"),given = "weather")# 定义外套变量(条件于天气和温度)
# 外套类型:无、雨衣、薄外套、厚外套
jacket <- CPT(values = c(0.01, 0.8, 0.15, 0.04, # 温度<40,下雨0.05, 0.7, 0.2, 0.05, # 温度<40,多云... # 此处应填入完整的概率值矩阵),levels = c("none", "raincoat", "light", "heavy"),given = c("weather", "temperature"))
注意:在实际代码中,jacket的values参数需要一个很长的向量,其顺序必须与levels和given参数定义的组合顺序完全匹配,且所有概率之和必须为1。




现在,我们将所有变量放入一个列表中。




# 将所有变量存入列表
var_list <- list(temperature = temperature,weather = weather,umbrella = umbrella,jacket = jacket)





编译概率网络



定义了所有变量后,我们需要将它们编译成一个概率网络模型。




# 编译条件概率表列表
prob_list <- compileCPT(var_list)# 打印编译后的网络结构,以验证R语言是否正确理解了我们的系统
print(prob_list)
运行print(prob_list)后,输出会显示R识别出的变量及其依赖关系:概率P(温度)、P(天气)、P(雨伞|天气)和P(外套|天气, 温度)。


我们可以使用summary函数来查看每个变量的详细概率分布,确保其与我们的设定一致。




# 查看概率列表的摘要信息
summary(prob_list)
摘要信息会显示每个状态的具体概率值,例如天气为雨天的概率是1%,多云5%,晴天4%等。对于条件概率表如雨伞,它会显示在每种天气条件下雨伞打开或关闭的概率。




构建与可视化贝叶斯网络



现在我们已经正确地将数据输入系统,让我们来构建并可视化一个贝叶斯网络。



# 从概率列表创建图模型(贝叶斯网络)
graphical_model <- grain(prob_list)# 为图形模型命名
GN1 <- graphical_model# 绘制网络图
plot(GN1)
如果一切正确,绘图将展示我们系统的图形化表示。我们将看到温度和天气变量是外套变量的父节点,而天气是雨伞的唯一父节点。这个贝叶斯网络是一个有向无环图,反映了我之前定义的概率分布。




概率查询:联合分布与边际分布


网络建立后,我们可以进行各种概率查询。首先,让我们看看整个联合概率分布。



# 查询所有变量的完整联合概率分布
joint_dist <- querygrain(GN1, type = "joint")
print(joint_dist)
对于四个变量,手动计算联合分布非常困难,但计算机可以轻松完成。输出结果是一个多维数组,展示了所有变量每一种可能状态组合的概率。例如,我们可以查看到“温度低于40度、下雨、没穿外套且雨伞关闭”这种极端情况的概率几乎为0。





然而,我们通常更关心某个特定变量的分布。这时,我们需要计算边际概率。


# 计算‘外套’变量的边际概率分布
marginal_jacket <- querygrain(GN1, nodes = "jacket", type = "marginal")
print(marginal_jacket)# 计算‘雨伞’变量的边际概率分布
marginal_umbrella <- querygrain(GN1, nodes = "umbrella", type = "marginal")
print(marginal_umbrella)
根据我们的条件概率表,计算结果显示我更可能穿薄外套,并且雨伞更可能处于关闭状态。



基于证据的概率推断


推断发生在我们有证据的时候。给定一组具体的观测值(证据),我们可以推断其他事件发生的可能性。




# 设置证据:假设我们观察到温度>80度且天气晴朗
GN1_evidence <- setEvidence(GN1,nodes = c("temperature", "weather"),states = c(">80", "sunny"))# 获取当前设置的证据,以确认其已被使用
getEvidence(GN1_evidence)# 在给定证据的条件下,重新计算‘外套’的边际概率
marginal_jacket_given_evidence <- querygrain(GN1_evidence, nodes = "jacket", type = "marginal")
print(marginal_jacket_given_evidence)
设置证据后,外套的边际概率发生了显著变化。在没有证据时,穿薄外套的概率可能最高;但在证据(高温晴天)条件下,不穿任何外套的概率跃升至93%。这展示了贝叶斯网络如何根据新信息动态更新概率,使其在研究中非常有用。




关于无向图模型的说明



在查看网络摘要时,你可能会看到“compiled: FALSE, propagated: FALSE”的信息。这涉及到处理大型网络时的高效算法。除了有向无环图,我们还可以创建无向图独立性网络(UG)。无向图类似于马尔可夫毯,能利用图结构高效地传播概率,从而更快地计算边际分布等。当网络非常庞大,并且可以分解为不同的簇和团时,使用无向图的优势就会体现出来。对于本教程的小型网络,两种方法的结果是一致的。




总结


在本教程中,我们一起学习了在R中构建概率图模型的完整流程:
- 使用
CPT函数定义变量及其条件概率表。 - 将变量编译成概率列表并构建贝叶斯网络。
- 可视化网络结构。
- 进行联合概率和边际概率查询。
- 引入证据,并基于新证据进行概率推断。





你可以利用提供的代码框架,解决本模块中的练习问题。希望你能享受编码的乐趣,学习愉快!
