1. uniform分布(均匀分布)
Python的scipy.stats包中的对象uniform表示连续型的均匀分布。下表展示了uniform分布的几个常用函数。
函数名 | 参数 | 功能 |
---|---|---|
rvs(loc, scale, size) | loc:分布参数 a a a,缺省值为0, scale:分布参数差 b − a b-a b−a,缺省值为1,size:产生的随机数个数,缺省值为1 | 产生size个随机数 |
pdf(x, loc, scale) | x:自变量取值,loc,scale:与上同 | 概率密度函数 f ( x ) f(x) f(x) |
cdf(x, loc, scale) | x,loc,scale:与上同 | 累积概率函数(分布函数) F ( x ) F(x) F(x) |
ppf(q, loc, scale) | q:分位点函数自变量,loc,scale:与上同 | 分布函数的反函数 F − 1 ( q ) F^{-1}(q) F−1(q) |
sf(x, loc, scale) | x:自变量取值,loc,scale:与上同 | 残存函数 1 − F ( x ) 1-F(x) 1−F(x) |
例1 某公共汽车站从上午7时起,每15分钟来一班车。即7:00,7:15,7:30,7:45,……等时刻有汽车到达此站。如果乘客到达此站的时间
X
X
X是服从7:00到7:30之间的均匀分布的随机变量,试求他候车时间少于5分钟的概率。
解:由题设知
X
X
X~
U
(
0
,
30
)
U(0, 30)
U(0,30),其分布函数
F
(
x
)
=
{
0
x
<
0
x
30
0
≤
x
≤
30
1
x
≥
30
F(x)=\begin{cases} 0&x<0\\ \frac{x}{30}&0\leq x\leq 30\\ 1&x\geq 30 \end{cases}
F(x)=⎩⎪⎨⎪⎧030x1x<00≤x≤30x≥30
若以7:00为起始时刻7:30为最终时刻,分钟为单位。要使该乘客候车时间少于5分钟(记为事件
A
A
A),根据班车时刻表,有三种情形:
X
=
0
X=0
X=0,
10
≤
X
≤
15
10\leq X\leq 15
10≤X≤15和
25
≤
X
≤
30
25\leq X\leq 30
25≤X≤30。由于
X
X
X是连续型随机变量,故
P
(
X
=
0
)
=
0
P(X=0)=0
P(X=0)=0。于是
P
(
A
)
=
P
(
{
10
≤
X
≤
15
}
∪
{
25
≤
X
≤
30
}
)
=
P
(
10
≤
X
≤
15
)
+
P
(
25
≤
X
≤
30
)
=
F
(
15
)
−
F
(
10
)
+
F
(
30
)
−
F
(
25
)
=
15
30
−
10
30
+
30
30
−
25
30
=
1
3
P(A)=P(\{10\leq X\leq15\}\cup\{25\leq X\leq30\})\\ =P(10\leq X\leq15)+P(25\leq X\leq30)\\ =F(15)-F(10)+F(30)-F(25)\\ =\frac{15}{30}-\frac{10}{30}+\frac{30}{30}-\frac{25}{30}=\frac{1}{3}
P(A)=P({10≤X≤15}∪{25≤X≤30})=P(10≤X≤15)+P(25≤X≤30)=F(15)−F(10)+F(30)−F(25)=3015−3010+3030−3025=31
下列Python代码计算本例中的概率
P
(
A
)
=
F
(
15
)
−
F
(
10
)
+
F
(
30
)
−
F
(
25
)
P(A)=F(15)-F(10)+F(30)-F(25)
P(A)=F(15)−F(10)+F(30)−F(25)。
from scipy.stats import uniform #导入uniform
print('P(A)=%.4f'%(uniform.cdf(x=15, scale=30)- #F(15)-
uniform.cdf(x=10, scale=30)+ #F(10)+
uniform.cdf(x=30, scale=30)- #F(30)-
uniform.cdf(x=25, scale=30)))#F(25)
程序的第1行导入uniform。第2~5行输出计算结果。注意,调用cdf函数时传递的参数:首个参数x分别表示自变量的值15、10、30和25,第2个参数loc,由于本例中均匀分布的参数 a = 0 a=0 a=0与loc的缺省值相同,故省略。第三个参数scale表示分布参数差 b − a b-a b−a,本例中 b − a = 30 b-a=30 b−a=30,故传递scale=30。运行该程序,输出
P(A)=0.3333
此即为 P ( A ) = 1 / 3 P(A)=1/3 P(A)=1/3精确到万分位的值。
2. expon分布(指数分布)
Scipy.stats包中的expon对象表示指数分布。下表展示了expon分布的常用函数。
函数名 | 参数 | 功能 |
---|---|---|
rvs(scale, size) | scale:分布参数 λ \lambda λ,缺省值为1,size:产生的随机数个数,缺省值为1 | 产生size个随机数 |
pdf(x, loc, scale) | x:自变量取值,scale:与上同 | 概率密度函数 f ( x ) f(x) f(x) |
cdf(x, scale) | x,scale:与上同 | 累积概率函数(分布函数) F ( x ) F(x) F(x) |
ppf(q, scale) | q:分位点函数自变量,scale:与上同 | 分布函数的反函数 F − 1 ( q ) F^{-1}(q) F−1(q) |
sf(x, scale) | x:自变量取值,scale:与上同 | 残存函数 1 − F ( x ) 1-F(x) 1−F(x) |
例2 假定自动取款机对每位顾客的服务时间(单位:min)服从 λ = 3 \lambda=3 λ=3的指数分布,如果有一个顾客恰好在你前头走到空闲的取款机,求:
- 你至少等候3分钟的概率;
- 你等候的时间在3~6分钟的概率;
解:按题设,两人来到的时间一致。一人使用取款机而另一人等待的时间
X
X
X的分布函数为
F
(
x
)
=
{
0
x
<
0
1
−
e
−
x
/
3
x
≥
0
F(x)=\begin{cases} 0&x<0\\ 1-e^{-x/3}&x\geq 0 \end{cases}
F(x)={01−e−x/3x<0x≥0
因此,
(1)至少等待3分钟的概率为
P
(
X
≥
3
)
=
1
−
P
(
X
<
3
)
=
1
−
F
(
3
)
=
e
−
1
=
0.3678.
P(X\geq3)=1-P(X<3)=1-F(3)=e^{-1}=0.3678.
P(X≥3)=1−P(X<3)=1−F(3)=e−1=0.3678.
(2)等待时间在3~6分钟的概率为
P
(
3
≤
X
≤
6
)
=
F
(
6
)
−
F
(
3
)
=
e
−
1
−
e
−
2
=
0.2325.
P(3\leq X\leq 6)=F(6)-F(3)=e^{-1}-e^{-2}=0.2325.
P(3≤X≤6)=F(6)−F(3)=e−1−e−2=0.2325.
下列代码验算本例的计算结果。
from scipy.stats import expon #导入expon
prob1=expon.sf(x=3, scale=3) #1-F(3)
prob2=expon.cdf(x=6, scale=3)-expon.cdf(x=3, scale=3) #F(6)-F(3)
print('P(X>3)=%.4f'%prob1)
print('P(3<=X<=6)=%.4f'%prob2)
程序中第1行导入expon。第2行用残存函数sf计算 P ( X > 3 ) P(X>3) P(X>3)。第3行用cdf函数计算 P ( 3 ≤ X ≤ 6 ) P(3\leq X\leq6) P(3≤X≤6)。注意传递给参数scale的是指数分布的参数 λ = 3 \lambda=3 λ=3。运行该程序输出:
P(X>3)=0.3679
P(3<=X<=6)=0.2325