【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(Xa)=af(x)dx
根据我们微积分的知识,积分其实就相当于一个求和,通过对概率密度函数积分可以求给定a,小于 P ( X ≤ a ) P(X\leq a) P(Xa)的概率。例如我们想要求大于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,下图是最高身高的分布情况,看起来是右偏的

在这里插入图片描述

本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!

posted @ 2022-08-27 11:08  JOJO数据科学  阅读(152)  评论(0编辑  收藏  举报