【R语言数据科学】(十三):有趣的概率学(下)
【R语言数据科学】(十三):有趣的概率学(下)
- 🌸个人主页:JoJo的数据分析历险记
- 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
- 💌如果文章对你有帮助,欢迎✌
关注
、👍点赞
、✌收藏
、👍订阅
专栏- ✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括:
R语言编程基础、R语言可视化、R语言进行数据操作、R语言建模、R语言机器学习算法实现、R语言统计理论方法实现。本系列会坚持完成下去,请大家多多关注点赞支持,一起学习~,尽量坚持每周持续更新,欢迎大家订阅交流学习!
前言
大家好!我是JoJo,一名数据科学爱好者。在之前的文章中,我们介绍了离散型变量的概率情况,接下来,我们来看看连续型变量的情况吧。
在之前的文章中我们解释了为什么在汇总数值列表(例如身高)时,构造一个定义每个可能结果的比例的分布是没有用的。例如,如果我们要精确测量一个非常大的总体中的每个人的身高,由于没有两个人的身高完全相同,我们需要分配比例1/n
到每个观察值,这样没有得到有用的结果。类似地,在定义概率分布时,为每个高度分配一个非常小的概率是没有用的。就像使用分布来汇总数值数据一样,定义一个对区间而不是单个值进行操作的函数更为实用。执行此操作的标准方法是使用累积分布函数 (CDF)。例如,我们之前定义了成年男学生的身高分布。在这里,我们定义向量X,表示成年男学生的身高
# 导入相关库
library(tidyverse)
library(dslabs)
data(heights)
X <- heights %>% filter(sex=="Male") %>% pull(height)
我们定义经验分布函数如下:
F <- function(x){
mean(X<=x)
}
它表示的是对于任意给定的x,返回X中小于或等于x的值的比例,在实际应用中,我们经常使用经验分布函数来代替累积分布函数CDF
现在如果我随机选择一名男学生,我想知道他身高超过 70.5 英寸的概率是多少?因为每个学生被选中的机会都是一样的,所以这个答案相当于身高超过 70.5 英寸的学生的比例。使用我们刚刚定义的函数
1-F(70.5)
0.363300492610837
一旦定义了 CDF,我们就可以使用它来计算任何子集的概率。例如,一个学生在身高 a 和身高 b 之间的概率是
F
(
b
)
−
F
(
a
)
F(b)-F(a)
F(b)−F(a)
1.理论连续概率分布
统计学中,最重要的分布就是正态分布,正态分布作为许多自然分布的有用的近似分布。正态分布的累积分布由数学公式定义,在r中可以使用函数
pnorm
获得.通过均值和标准差进行定义。现在假设我们的身高数据服从正态分布,但是我们不知道它的均值和标准差,我们可以使用样本的均值和标准差近似,然后生成理论上的分布,具体如下:
m <- mean(X)#计算均值
s <- sd(X)#计算标准差
1-pnorm(70.5,m,s)#计算身高大于70.5的概率
0.371369013278474
2.近似概率分布
正态分布是从数学上推导出来的:我们不需要数据来定义它。对于数据科学家来说,我们所做的几乎所有事情都涉及数据。从实际情况上讲,数据始终是离散的。例如,我们可以认为我们的身高数据是分类的,每个特定的高度都是一个唯一的类别。概率分布由报告每个身高的学生比例定义。这是该概率分布的图:
- 虽然大多数学生将他们的身高四舍五入到最接近的英寸,但有些学生报告的值更精确。一名学生报告他的身高为
69.6850393700787
,即 177 厘米。分配给这个高度的概率是 0.001 或 1/812。70 英寸的概率要高得多,为 0.106,但是认为正好是 70 英寸的概率不同于 69.6850393700787 真的有意义吗?显然,对于数据分析目的,将此结果视为一个连续的数值变量更为有用,请记住,很少有人(或者可能没有人)正好是 70 英寸,我们在 70 时获得更多值的原因是因为人们四舍五入到最接近的英寸。- 对于连续分布,甚至没有定义单个值的概率。例如,查找正态分布值为 70 的概率是多少是没有意义的。相反,我们定义区间的概率。因此,我们可以问某人介于 69.5 和 70.5 之间的概率是多少。
在像高度这样的情况下,数据是四舍五入的,如果我们处理恰好包含一个整数的区间,正态近似特别有用。例如,正态分布可用于估计学生在以下三个区间内报告值的比例:
mean(X <= 68.5) - mean(X <= 67.5)
mean(X <= 69.5) - mean(X <= 68.5)
mean(X <= 70.5) - mean(X <= 69.5)
0.114532019704433
0.119458128078818
0.12192118226601
现在我们来看看使用正态分布的概率近似情况
pnorm(68.5, m, s) - pnorm(67.5, m, s)
pnorm(69.5, m, s) - pnorm(68.5, m, s)
pnorm(70.5, m, s) - pnorm(69.5, m, s)
0.103107700722601
0.109712077150593
0.108174271080828
在上述这种情况下,得到的差值不算太大,但是对于更细节的情况,使用正态分布近似会有较大的误差。通常,我们将这种情况称为离散化。尽管真实的高度分布是连续的,但报告的高度往往在离散值下更常见,在这种情况下,我们会选择四舍五入。只要我们知道如何处理这个实际问题,正态近似仍然可以是一个非常有用的工具。
3.概率密度
对于分类分布,我们可以定义一个类别的概率。例如,掷骰子。我们假设X是投的数字,有1,2,3,4,5,6.那么为4的概率可以定义为:
P
(
X
=
4
)
=
1
/
6
P(X=4) = 1/6
P(X=4)=1/6
累积概率密度函数(CDF)可以定义为:
F
(
4
)
=
P
(
X
=
4
)
+
P
(
X
=
3
)
+
P
(
X
=
2
)
+
P
(
X
=
1
)
F(4)= P(X=4)+P(X=3)+P(X=2)+P(X=1)
F(4)=P(X=4)+P(X=3)+P(X=2)+P(X=1)
而对于连续型分布而言,定义某一个值的概率是没有意义的。我们使用概率密度函数来表示,具体如下:
F
(
a
)
=
P
(
X
≤
a
)
=
∫
−
∞
a
f
(
x
)
d
x
F(a)=P(X\leq a)=\int _{-\infty}^{a} f(x)dx
F(a)=P(X≤a)=∫−∞af(x)dx
根据我们微积分的知识,积分其实就相当于一个求和,通过对概率密度函数积分可以求给定a,小于
P
(
X
≤
a
)
P(X\leq a)
P(X≤a)的概率。例如我们想要求大于76的概率
1 - pnorm(76, m, s)
0.0320600788708451
如下图阴影部分所示:
4.连续变量的蒙特卡洛模拟
r提供了生成正态分布结果的函数。具体来说,rnorm
函数采用三个参数:大小、平均值(默认为 0)和标准差(默认为 1)并生成随机数。具体代码如下
n <- length(X)
m <- mean(X)
s <- sd(X)
simulated_heights <- rnorm(n, m, s)
生成的数据分布具体如下:
下面如果我们想要知道最大值的分布情况。例如,如果我们随机挑选 800 名男性,那么最高的人的分布是什么?在 800 名男性中,一个7英尺以上的人有多罕见?下面的蒙特卡罗模拟可以帮助我们回答这个问题:
B <- 10000
tallest <- replicate(B, {
simulated_data <- rnorm(800, m, s)
max(simulated_data)#最大值
})
mean(tallest >= 7*12)
0.0181
可以看出高于7英尺的比例为0.0181,下图是最高身高的分布情况,看起来是右偏的
本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】