stats | 概率分布与随机数生成(一)——离散型分布

article/2025/11/10 23:07:20

随机变量的分布模式是统计模型的基础,R的基础包stats提供了许多关于概率分布的函数。本篇主要介绍离散型分布,包括两点分布、二项分布、帕斯卡分布、负二项分布、几何分布、超几何分布和泊松分布。

1 stats中关于概率分布的函数

stats工具包针对每种分布模式提供了4个函数,分别用于计算概率密度函数、概率分布函数、概率分位数的取值以及生成符合该分布的随机序列。

概率密度函数主要对于连续型变量而言。对于离散型变量,概率密度函数相当于随机变量取某值的概率:

 

概率分布函数是随机变量不大于某个数值的概率累计和:

概率分位数是指当概率分布函数取某个数值时对应的随机变量的取值:

 

stats工具包中,计算概率密度、概率分布、概率分位数取值的函数分别以d(density)、p(probability)和q(quantile)开头,生成符合该分布的随机序列的函数以r(random)开头。

2 两点分布和二项分布

随机事件每次发生的几率恒定,则在一次试验中事件发生的次数服从两点分布,又称伯努利分布(Bernoulli Distribution),记为。

在n次独立重复试验中,随机事件每次发生的几率恒定,那么它发生的次数服从二项分布(Binomial Distribution),记为。其中在每次试验下,事件发生的次数服从两点分布,即两点分布是n = 1时的二项分布。

二项分布的概率密度函数:

dbinom(x, size, prob, log = FALSE)
pbinom(q, size, prob, lower.tail = TRUE, log.p = FALSE)
qbinom(p, size, prob, lower.tail = TRUE, log.p = FALSE)
rbinom(n, size, prob)

概率密度函数:已知分布参数求随机变量为某值的概率

dbinom()函数的参数:

  • x是随机事件发生次数;

  • size是总的试验次数,当size = 1时是两点分布

  • prob为随机事件每次发生的几率;

  • log默认值为FALSE,当为TRUE时,结果取自然对数后再输出。

dbinom(2, 10, 0.4)
dbinom(0, 1, 0.4)
dbinom(2, 10, 0.4, log = T)
[1] 0.1209324
[1] 0.6
[1] -2.112524

概率分布函数:已知分布参数求随机变量取值不大于或大于某个数值的概率

pbinom()函数的参数: q相当于dbinom()中的x,之所以用q表示是因为pbinom()qbinom()互为反函数,这样表示更加对称;

  • lower.tail表示从小到大进行概率累计,默认为TRUE,表示计算出现次数不大于q的概率,当为FALSE时,计算大于q的概率;

  • log.p类似dbinom()中的log参数。

pbinom(2, 10, 0.4)
pbinom(2, 10, 0.4, lower.tail = F)
[1] 0.1672898
[1] 0.8327102

分位数:已知分布参数和分布函数的取值,求临界的发生次数

qbinom()中的p表示已知的概率,其他参数同上。

qbinom(0.4, 10, 0.4)
qbinom(0.4, 10, 0.4, lower.tail = F)
[1] 4
[1] 4

生成符合两点分布或二项分布的随机数序列

rbinom()中的n表示要生成的随机数个数,其他参数表示该分布的参数,意义同上。

set.seed(123)
rbinom(10, 10, 0.4)
rbinom(10, 1, 0.4)
[1] 3 5 4 6 6 1 4 6 4 4
[1] 1 0 1 0 0 1 0 0 0 1

二项分布关于发生几率的概率密度函数图象

set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),xlab = "X", ylab = "概率",panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)for(prob in seq(0.1, 0.9, 0.1)) {x <- c(0:10)y <- dbinom(c(0:10), 10, prob)lines(x, y, type = "b", lwd = 2, col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1), lty = 1, xpd = T,col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))

3 帕斯卡分布与负二项分布

帕斯卡分布(Pascal Distribution)有多种定义形式,stats中的相关函数针对的定义如下:

在独立重复试验中,随机事件第次发生时,没有发生的次数服从帕斯卡分布,记为。

  • 独立试验一共重复了次;

  • 为非负整数,r为正整数;

  • 当不为0时,随机事件在前次独立试验中发生了次,第次发生在第次独立试验中。

负二项分布(Negative Binomial Distribution)是帕斯卡分布的扩展,它允许事件发生次数可以为非整数。

  • 可以为任意正数,不要求为整数,即;

  • 负二项分布仍然是离散型分布,必须为非负整数即。

帕斯卡分布的概率函数:

 

引入伽马函数:

 

所以

负二项分布的概率密度函数:

 

stats工具包相关的函数:

dnbinom(x, size, prob, mu, log = FALSE)
pnbinom(q, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
qnbinom(p, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
rnbinom(n, size, prob, mu)
  • x表示随机事件没有发生的次数;

  • size表示随机事件发生的次数,即;

  • prob为随机事件每次发生的几率,mu为的数学期望,二者不能同时设定,有prob = size/(size + mu);

  • 其他参数含义同二项分布的相关参数。

dnbinom(c(1:10), size = 5, prob = 0.4)
dnbinom(c(1:10), size = 5, mu = 5)# 生成随机数
rnbinom(10, size = 5, prob = 0.4)
rnbinom(10, size = 5, mu = 5)
 [1] 0.03072000 0.05529600 0.07741440 0.09289728 0.10032906[6] 0.10032906 0.09459597 0.08513638 0.07378486 0.06197928[1] 0.07812500 0.11718750 0.13671875 0.13671875 0.12304688[6] 0.10253906 0.08056641 0.06042480 0.04364014 0.03054810[1] 12  8  5 15  1  5  3  7  1  4[1]  5  5  5  6  7 11  4  4  4  6

帕斯卡分布关于发生几率的概率密度函数图象

set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),xlab = "X", ylab = "概率",panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)for(prob in seq(0.1, 0.9, 0.1)) {x <- c(0:10)y <- dnbinom(c(0:10), 10, prob)lines(x, y, type = "b", lwd = 2, col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1), lty = 1, xpd = T,col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))

帕斯卡分布的几种定义:

  1. 随机事件第次发生时,事件不发生的次数记为;

  2. 随机事件第次发生时,试验次数总数记为;

  3. 随机事件第次不发生时,事件发生的次数记为;

  4. 随机事件第次不发生时,试验次数总数记为。

其中第1种即为stats采用的定义,其他三种均可以通过参数变换转化为第1种形式。

4 几何分布与超几何分布

stats中相关函数对几何分布的定义是:
随机事件第1次发生时,不发生的次数记为,则X服从几何分布(Geometric Distribution),记为。

显然,几何分布是r=1时的帕斯卡分布。

相关函数如下:

dgeom(x, prob, log = FALSE)
pgeom(q, prob, lower.tail = TRUE, log.p = FALSE)
qgeom(p, prob, lower.tail = TRUE, log.p = FALSE)
rgeom(n, prob)

超几何分布(Hypergeometric Distribution)描述的是不放回抽样:

dhyper(x, m, n, k, log = FALSE)
phyper(q, m, n, k, lower.tail = TRUE, log.p = FALSE)
qhyper(p, m, n, k, lower.tail = TRUE, log.p = FALSE)
rhyper(nn, m, n, k)

以从不透明箱子抽球为例,x为抽到的白球个数,m为箱子中的白球总数,n为黑球总数,k为抽取的总球数。

超几何分布关于箱子中白球总数的概率密度函数图象

set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),xlab = "X", ylab = "概率",panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)for(m in seq(11, 19, 1)) {x <- c(0:10)y <- dhyper(c(0:10), m, 10, 10)prob <- (m-10)/10lines(x, y, type = "b", lwd = 2, col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(11, 19, 1), lty = 1, xpd = T,col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))

5 泊松分布

随机事件在单位时间内发生的次数服从泊松分布(Poisson Distribution),记为,其中是随机事件在单位时间内的平均发生次数。

泊松分布可以看作是二项分布在试验次数很大,随机事件每次发生几率很小的情况下的近似,有。

泊松分布的概率密度函数:

 

相关函数:

dpois(x, lambda, log = FALSE)
ppois(q, lambda, lower.tail = TRUE, log.p = FALSE)
qpois(p, lambda, lower.tail = TRUE, log.p = FALSE)
rpois(n, lambda)

泊松分布关于的概率密度函数图象

set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),xlab = "X", ylab = "概率",panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)for(lambda in seq(0.1, 0.9, 0.1)*10) {x <- c(0:10)y <- dpois(c(0:10), lambda)prob <- lambda/10lines(x, y, type = "b", lwd = 2, col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1)*10, lty = 1, xpd = T,col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))

 

 

 


http://chatgpt.dhexx.cn/article/8Uct1FKa.shtml

相关文章

概率论 随机变量及常用6大分布整理

随机变量 随机变量定义&#xff1a; 样本空间为Ω&#xff0c;随机变量X表示样本空间Ω中的一个样本点&#xff08;样本空间和随机变量的关系类似于实数轴上的x轴和自变量x的区别&#xff09;。如随机抛掷一枚骰子&#xff0c;X就是表示骰子的点数。 分布函数 分布函数定义&…

随机变量分布和概率

N.1 随机变量分布 1&#xff09;正态分布(高斯分布&#xff0c;用的比较多) 这里句一个例子&#xff0c;小明有一枚筛子&#xff0c;但它不是六个面的&#xff0c;而是数不清多的面(即每一面都有个点对应点数)&#xff0c;但塞子的外形不均匀的&#xff0c;所以扔筛子有些点数的…

任意分布的随机数的产生方法

摘要&#xff1a; 随机数在实际运用中非常之多&#xff0c;如游戏设计&#xff0c;信号处理&#xff0c;通常我们很容易得到平均分布的随机数。但如何根据平均分布的随机数进而产生其它分布的随机数呢&#xff1f;本文提出了一种基于几何直观面积的方法&#xff0c;以正态分…

如何用均匀分布随机数生成正态分布随机数

文章目录 前言The Box–Muller transformThe Ziggurat algorithm(金字形神塔)附录&#xff1a;Inverse transform sampling直观解释 前言 在Monte Carlo模拟技术中&#xff0c;许多地方都需要用到符合标准正态分布(高斯)的随机数来设计采样方案&#xff0c;因此了解如何用均匀…

常见的概率分布并生成随机数

一、均匀分布&#xff08;Uniform Distribution&#xff09; 在相同长度间隔的分布概率是等可能的。 1.概率密度函数&#xff1a; 2.分布函数&#xff1a; 3.期望和方差&#xff1a; 4.生成随机数 import numpy as np #生成从0-1的均匀分布 np.random.rand(10)#生成十个均匀…

生成特定分布随机数的方法

生成随机数是程序设计里常见的需求。一般的编程语言都会自带一个随机数生成函数&#xff0c;用于生成服从均匀分布的随机数。不过有时需要生成服从其它分布的随机数&#xff0c;例如高斯分布或指数分布等。有些编程语言已经有比较完善的实现&#xff0c;例如Python的NumPy。这篇…

推导:通过均匀分布来产生任意分布随机数

最近想用C语言写一个产生服从指数分布的随机数的程序。从网上找了找&#xff0c;发现可以通过均匀分布来产生服从任意分布的随机数。然而&#xff0c;网上的推导不是很完善&#xff0c;我把自己的理解写在这里&#xff0c;有不严谨的地方请大家指正。 命题1&#xff1a;对一连续…

随机数生成(一):均匀分布

引言 许多应用中都需要用到随机数&#xff0c;如物理仿真、统计采样、密码学、博彩等。随机数一般可以通过两种方法得到。一种是基于物理现象由硬件产生。由此得到的随机数&#xff0c;在产生之前是不可预知的&#xff0c;因此&#xff0c;是真正的随机数。另一种是通过计算机算…

如何产生指定分布的随机数?

参考&#xff1a;https://www.cnblogs.com/xingshansi/p/6539319.html&#xff1b;    https://www.jianshu.com/p/3d30070932a8&#xff1b;    https://blog.csdn.net/pipisorry/article/details/50615652&#xff1b;    https://cosx.org/2015/06/generating-n…

一、三大基础随机分布与数学特征

一、三大基础随机分布 均匀、指数、正态 1、均匀分布 表示在相同长度间隔的分布概率是等可能的 其概率密度、均值、方差 2、指数分布 事件以恒定平均速度连续且独立地发生的过程(泊松过程中的事件之间的时间的概率分布) 其概率密度、均值、方差 3、正态分布 常见的连续概…

AttributeError:Can only use .str accessor with string values!

修改之前&#xff1a; 出现错误&#xff1a;意为matches不是字符串则使用此方法错误 修改方法&#xff1a; 将最后两行代码改为&#xff1a;

“ Can only use .str accessor with string values!”

“ Can only use .str accessor with string values&#xff01;” 出现错误 原代码 解决办法&#xff1a;

vue3报错‘get‘ on proxy: property ‘__accessor__‘ is a read-only and non-configurable data property on t

在使用arcgis地图时候 我把map对象存进了store里面共享数据 结果其他页面使用时候 给我甩了这样一个错误 get on proxy: property __accessor__ is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expe…

Access数据库是什么

数据是当今社会的命脉&#xff0c;因此自然而然地&#xff0c;很多注意力都集中在不同的数据库工具上。毕竟&#xff0c;如果用户有合适的工具&#xff0c;用户就有最有效的方法来处理当前的海量数据过剩问题&#xff0c;或许还能让整个过程变得更易于管理。为此&#xff0c;本…

【ERROR Error: No value accessor for form control with unspecified name attribute】

遇到问题&#xff1a; 控制台报错如下ERROR Error: No value accessor for form control with unspecified name attribute 解决&#xff1a; [(ngModel)]不能直接加在某些标签中 需要同时加ngDefaultControl

access是干什么的软件

Access是一款数据库应用开发工具软件&#xff0c;中文名:微软办公软件-关系数据库管理系统。 access安装包 Access是微软公司于1994年发布的微机数据库管理系统。作为一种功能强大的MIS系统开发工具&#xff0c;它具有界面友好、易学易用、开发简单、界面灵活等特点&#xff0…

Access数据库有什么用?该数据库有什么功能?

对于那些想寻找一个简单的数据库管理系统的用户来说&#xff0c;微软旗下的Access数据库也许是可以让其眼前一亮的工具。 数据库基本定义 Access是Microsoft 365套件工具随附的强大生产力工具&#xff0c;该工具允许用户创建以有组织的结构存储信息的自定义数据库&#xff0c;还…

@Accessors

Accessors 作用&#xff1a;存取器&#xff0c;用于配置getter和setter方法的生成结果 三个属性&#xff1a;fluent、chain、prefix 1、fluent&#xff1a;流畅的&#xff0c;设置为true&#xff0c;getter和setter方法的方法名都是基础属性名&#xff0c;且setter方法返回当前…

使用pandas对数据提取时报错,AttributeError: Can only use .str accessor with string values!

from pandas import DataFrame from pandas import read_excel df read_excel(ri_nuc.xls,sheet_nameSheet4) df.head() 运行结果如下图 df.电话.head().str.strip() 结果出现报错 AttributeError: Can only use .str accessor with string values! 这句话翻译成&#xf…

@Accessors 注解详解

??前言1. Accessors 源码2. Accessors 属性详解2.1 fluent 属性2.2 chain 属性2.3 prefix 属性 前言 在你的工作中&#xff0c;有时候可能会看到Accessors(chain true)这样的注解&#xff0c;他是 lombok 插件包中的一个注解&#xff0c;那么它是什么意思呢&#xff1f; 1.…