Skip to content

2.2 随机变量与分布函数 ​

2.1 节建立的语言以事件和集合为基本对象。事件域 F 上的概率 P 是一个集函数,把子集映射为 [0,1] 中的数。这套语言在推导一般性质时很方便,进入具体计算时就有局限:集合之间的加减乘除没有定义,无法对结果做求和、加权与微积分。要刻画一次测量的平均值、一组测量值的离散程度、某个阈值被超过的可能性,需要把随机试验的结果编码为实数。

随机变量(random variable)完成的正是这一编码。它把样本点 ω 映射为实数 X(ω),于是原来讨论的事件 {X≤x} 变成了实数轴上的集合,概率也随之转化为定义在实数轴上的函数。这一转化把概率论与微积分连接起来,使求导、积分、变量替换这些工具可以用于概率计算。机器学习中几乎全部模型都建立在随机变量之上:样本的特征是随机向量,标签是随机变量,损失函数的期望是对随机变量的加权求和。

本节从随机变量的定义出发,依次建立累积分布函数、概率质量函数与概率密度函数这套描述工具,再讨论分位数、生存与风险函数、概率积分变换与逆变换采样、随机变量变换、卷积、顺序统计量、经验分布函数,最后区分混合、截断与删失三类结构。这些内容构成分布论的骨架,2.3 节的数字特征、2.4 与 2.5 节的常见分布、2.6 节的联合分布都将在本节概念的基础上展开。

2.2.1 随机变量的定义与类型 ​

从样本点到实数 ​

给定概率空间 (Ω,F,P),定义在 Ω 上的实值函数

X:Ω→\R,ω↦X(ω)

称为随机变量。这个名字包含两层含义:它的取值由随机试验的结果决定,本身又是可参与数学运算的数值。掷一颗骰子时样本空间为 Ω={1,…,6},取 X(ω)=ω 得到一个随机变量;记录体检对象的身高时,样本点是具体的人,随机变量取这个人的身高厘米数。

并非任意函数都算随机变量。要求对任意实数 x,集合

{X≤x}={ω∈Ω∣X(ω)≤x}

属于事件域 F,即它是一个可以赋予概率的事件。这一条件称为 X 关于 F 可测。可测性保证 {X≤x} 有定义良好的概率 P(X≤x),从而可以讨论分布。实践中遇到的函数大多满足这一条件,后续不再逐次验证,但需要记住它决定了哪些集合可以讨论。

把事件编码为数值带来三个便利。其一是运算:实数可以求和、求平均、做变换,事件的集合运算做不到这一点。其二是描述:实数轴上的分布只需一个函数就能完整刻画,不必枚举全部事件。其三是衔接:概率计算转化为积分与求和,微积分的全部工具都可以调用。这三个便利是随机变量成为概率论核心对象的直接原因。

离散型、连续型与混合型 ​

按取值的形态,随机变量分为三类。取值有限或可列的随机变量称为离散型随机变量(discrete random variable),掷骰子的点数、一天内收到的订单数、一局游戏中出现的失误次数都属于这一类。离散型随机变量的概率集中在若干个点上,每个取值对应的概率可以逐一列出。

累积分布函数处处连续、且可表示为某个非负函数积分的随机变量称为连续型随机变量(continuous random variable),响应时间、身高、温度、电压在连续测量的模型中都按这一类处理。它们的取值充满某个区间,单点概率为零,概率由密度函数在区间上的积分给出。

两类之外还存在混合型随机变量(mixed random variable),取值中既有离散点又有连续部分。环境监测仪器测量某项指标时,低于检出限的结果常常直接记录为检出限值 L,高于检出限的结果才有连续读数。若低于检出限的比例为 p,则 X 在 L 处有概率质量 p,在 (L,+∞) 上有连续分布。这类变量的累积分布函数在 L 处有一个跳跃,其余部分连续。混合型的出现多来自测量规则或记录方式,建模时直接按两类结构相加处理。

三类随机变量的区分决定了后续使用的工具:离散型用求和,连续型用积分,混合型需要把两部分分开再相加。2.2.3 节引入的概率质量函数与概率密度函数正对应前两类。

2.2.2 累积分布函数 ​

定义与三条基本性质 ​

随机变量 X 的累积分布函数(cumulative distribution function, CDF)定义为

F(x)=P(X≤x),x∈\R

它给出 X 的取值不超过 x 的概率。分布函数是描述随机变量最统一的工具:无论是离散型、连续型还是混合型,都有唯一的分布函数,反过来分布函数也唯一决定随机变量全部事件的概率。分布函数由三条性质刻画。

第一条是单调不减:若 x1<x2,则 F(x1)≤F(x2)。原因是事件 {X≤x1} 包含于 {X≤x2},由概率的单调性得到。这条性质保证了分布函数可以用来定义分位数。

第二条是右连续:对任意 x,有 F(x+0)=F(x),即 F 在每一点从右侧连续。原因是对单调递增的递减事件列 {X≤x+1/n} 取极限,由概率的下连续性得 F(x+0)=P(X≤x)=F(x)。分布函数可以左不连续,跳跃发生的位置正是随机变量取值的离散点。

第三条是两端极限:limx→−∞F(x)=0,limx→+∞F(x)=1,且对一切 x 有 0≤F(x)≤1。左端极限为 0 是因为 {X≤x} 随着 x 减小收缩到空集,右端极限为 1 是因为 {X≤x} 随着 x 增大填满整个样本空间。

反过来,任意满足单调不减、右连续、两端极限为 0 与 1 的函数都是一个分布函数。这三条性质合起来给出了分布函数的完整刻画,是判断一个给定函数能否作为分布函数的依据。

python
import numpy as np
from scipy import stats

# 标准正态分布的 CDF 满足三条性质
xs = np.array([-3.0, -1.0, 0.0, 1.0, 3.0])
F = stats.norm.cdf(xs)

print(np.all(np.diff(F) >= 0))            # True,单调不减
print(F[0], F[-1])                         # 0.001350 0.998650,落在 [0, 1]
print(stats.norm.cdf(-40.0), stats.norm.cdf(40.0))   # 0.0 1.0,两端极限

用 CDF 表示事件概率 ​

分布函数统一给出各类事件的概率。对任意 a<b,

P(a<X≤b)=F(b)−F(a)

原因是 {X≤b} 分解为互斥的两部分 {X≤a} 与 {a<X≤b}。由此可以导出其他几种区间的概率,差别只在于端点处跳跃是否被计入。

事件用 CDF 表示
P(X>x)1−F(x)
P(X≥x)1−F(x−)
P(X=x)F(x)−F(x−)
P(a≤X≤b)F(b)−F(a−)
P(a<X<b)F(b−)−F(a)

记号 F(x−) 表示 F 在 x 处的左极限。当 F 在 x 处连续时 F(x−)=F(x),此时 P(X=x)=0,四种区间的概率不再有区别。当 F 在 x 处有跳跃时,跳跃高度就是 P(X=x),端点是否计入会改变结果。连续情形下这种差别消失,可以自由书写区间端点。

分布函数为什么统一用右连续

分布函数取右连续而不是左连续,是为了让跳跃点承载取值概率。若取 {X<x} 作为定义,得到的函数左连续,跳跃高度对应的是 P(X<x) 与 P(X≤x) 的差值,取值的概率会落在左极限一侧,许多公式的端点写法都要相应调整。约定右连续之后,P(X=x)=F(x)−F(x−) 这个形式最为简洁,后续的广义逆分位数也可以在同一约定下定义。

2.2.3 概率质量函数与概率密度函数 ​

离散型与概率质量函数 ​

离散型随机变量 X 取值为 x1,x2,…,其概率质量函数(probability mass function, PMF)定义为

p(x)=P(X=x)

概率质量函数的取值非负,且对所有可能取值求和为 1:

p(xi)≥0,∑ip(xi)=1

分布函数由质量函数累加得到,F(x)=∑xi≤xp(xi),因此呈阶梯状,在每个取值点处跳跃,跳跃高度为 p(xi)。质量函数的每个值本身就是概率,可以直接相加,这是离散情形的特点。

连续型与概率密度函数 ​

连续型随机变量 X 的分布函数 F 可表示为

F(x)=∫−∞xf(t)dt

此时的 f 称为概率密度函数(probability density function, PDF)。在 F 可导的点处有

f(x)=F′(x)

密度函数非负,在整条实数轴上的积分为 1。任取区间 (a,b],由微积分基本定理,

P(a<X≤b)=F(b)−F(a)=∫abf(t)dt

这是连续型随机变量概率计算的基本公式:求区间概率归结为对密度积分。

密度不是概率 ​

密度与概率的关系容易误解。密度函数的值不是概率,它是概率关于位置的变化率。把区间概率写成积分,在小区间上做一次近似,

P(x<X≤x+Δx)=∫xx+Δxf(t)dt≈f(x)Δx

可见 f(x) 是单位长度上的概率,量纲是概率除以长度。它可以是大于 1 的数:区间 [0,1] 上的均匀分布密度恒为 1,区间 [0,0.5] 上的均匀分布密度恒为 2。这些数值超过 1 并不违反概率公理,因为概率是密度的积分,积分结果仍不超过 1。

连续型随机变量在任意单点取值的概率为零。由分布函数在连续点满足 F(x−)=F(x),得 P(X=x)=F(x)−F(x−)=0。这一事实带来两个推论:单个取值的概率不能用来刻画连续变量;区间端点是否包含不影响概率,P(a<X<b) 与 P(a≤X≤b) 相等。概率为零的事件并不意味着不可能发生,一次连续测量的结果落在某个具体值上的概率为零,但每次测量确实会取到某个值。概率与可能性在连续情形下的这一分离,是概率论中零概率事件可以发生这一现象的来源。

需要区分密度与质量函数的是:质量函数在每一点的值就是概率,逐点相加;密度在每一点的值不是概率,必须积分。混用两者的直接后果是把某个点的密度当作取值概率,得出 BAB 统计中常见的一类错误结论。

python
import numpy as np
from scipy import stats

# 均匀分布 U(0, 0.5) 的密度恒为 2,但单点概率为 0
print(stats.uniform.pdf(0.25, loc=0, scale=0.5))    # 2.0,密度可以大于 1
print(stats.uniform.cdf(0.25, loc=0, scale=0.5))    # 0.5

# 正态分布在众数处密度约为 0.399,仍是一个密度值
print(round(stats.norm.pdf(0.0), 4))                # 0.3989

# 区间概率等于密度在区间上的积分
x = np.linspace(0.0, 0.25, 100_000)
print(round(np.trapezoid(stats.uniform.pdf(x, 0, 0.5), x), 4))   # 0.5

2.2.4 分位数函数与分位数 ​

分位数的定义 ​

给定分布函数 F 与 p∈(0,1),称

qp=inf{x∈\R∣F(x)≥p}

为该分布的 p 分位数(quantile)。分位数给出一个阈值,使得随机变量取值不超过它的概率至少为 p。当 F 严格单调时,qp 就是方程 F(x)=p 的解;当 F 有平坦段或跳跃时,用下确界定义仍唯一确定一个 qp。

把 p 视为自变量,映射 p↦qp 称为分位数函数(quantile function),记作 Q(p) 或 F−1(p)。它是分布函数的广义逆:在 F 连续严格递增处,F−1 与通常的反函数一致。一般情形下二者满足

F(F−1(p))≥p,F−1(F(x))≤x

当 F 连续时第一式取等号,当 F 严格递增时第二式取等号。分位数函数单调不减,并且是左连续的,这一点与分布函数的右连续相对。

中位数与四分位数 ​

取 p=0.5 得到中位数(median),它把分布分为概率相等的两半。中位数对极端值不敏感,在收入、房价等右偏数据的描述中比均值稳健。取 p=0.25 与 p=0.75 得到下、上四分位数(quartile),两者之差称为四分位距,是描述离散程度的稳健指标。分位数在质量控制与成长曲线中大量使用:把某项指标的第 2.5 与第 97.5 分位数之间定义为 95% 的常见范围。

经验数据的分位数由排序后的样本给出,取法随定义略有差别,连续分布与样本分位数的对应需要用插值处理。统计软件中的分位数算法不同会导致结果在小样本下略有差异,报告分位数时给出所用的定义可以避免歧义。

python
import numpy as np
from scipy import stats

rng = np.random.default_rng(3)
sample = rng.normal(loc=0, scale=1, size=10_000)

# 样本分位数与理论分位数对比
for p in [0.025, 0.25, 0.5, 0.75, 0.975]:
    q_emp = np.quantile(sample, p)
    q_the = stats.norm.ppf(p)
    print(f"p = {p:.3f},样本 {q_emp:+.4f},理论 {q_the:+.4f}")
# p = 0.500,样本约 0.00,理论 0.0000

2.2.5 生存函数、风险函数与累积风险函数 ​

三个函数及其关系 ​

在可靠性工程与生存分析中,描述非负随机变量 X(寿命、失效时间、等待时间)常使用与分布函数等价但解释更直接的一组函数。生存函数(survival function)定义为

S(x)=P(X>x)=1−F(x)

它给出存活超过 x 的概率,从 S(0)=1 单调递减到 S(∞)=0。对于连续型 X,密度与生存函数的关系为 f(x)=−S′(x)。

风险函数(hazard function)描述在已经存活到 x 的条件下,下一瞬间发生事件的瞬时速率:

h(x)=limΔx→0P(x<X≤x+Δx∣X>x)Δx=f(x)S(x)

分子是 x 附近发生事件的密度,分母是活到 x 的概率,两者相除把已存活这一条件纳入。离散情形下对应的量是条件概率 h(xi)=P(X=xi∣X≥xi)。

累积风险函数(cumulative hazard function)是风险函数的积分:

H(x)=∫0xh(t)dt

把 h=−S′/S=−(ln⁡S)′ 代入积分,得到 H(x)=−ln⁡S(x),等价地

S(x)=exp⁡(−H(x))

这三个函数互相决定,知道其中任意一个就可以还原另外两个。风险函数把分布的信息拆成逐点的瞬时倾向,便于按时间的进程描述失效。

风险函数的形状与老化 ​

风险函数的形状直接反映失效机制。取 h(x)=λ 为常数时,S(x)=e−λx 对应指数分布,此时无论已经存活多久,下一瞬间的失效倾向不变,这一性质称为无记忆性。取 h(x) 单调递增时,随时间推移失效倾向增加,对应器件老化。取 h(x) 单调递减时,早期失效倾向高,存活一段时间后趋于稳定,对应婴幼儿期的死亡率或早期批次缺陷。把三段拼在一起得到浴盆形风险曲线,是可靠性分析中经验性的标准形状。

Weibull 分布的风险函数为 h(x)=kλ(xλ)k−1,形状参数 k>1 给出递增风险,k<1 给出递减风险,k=1 退化为常数风险的指数分布。用形状参数刻画风险走势,是 Weibull 在生存分析中广泛使用的原因。区分风险函数的单调方向还可以判断分布是否具备无记忆性:指数分布是唯一风险恒定的连续分布,也是几何分布在连续情形的对应。

生存分析为什么偏爱风险函数

分布函数与密度函数描述的是绝对量,风险函数描述的是条件量。可靠性分析中更关心的问题往往是已经正常运行 t 小时的产品在接下来一段时间内失效的风险,这一问法正对应风险函数。生存分析中的 Kaplan-Meier 估计与 Cox 比例风险模型都以风险函数为主要对象。删失数据下生存函数可以直接由风险的经验估计累乘得到,而密度函数难以直接估计,这也是生存分析选择风险语言的实用原因。

2.2.6 概率积分变换与逆变换采样 ​

概率积分变换 ​

设随机变量 X 的分布函数 F 连续,令 U=F(X),则 U 服从区间 (0,1) 上的均匀分布。这一结论称为概率积分变换(probability integral transform)。证明只需计算 U 的分布函数。对 u∈(0,1),

P(U≤u)=P(F(X)≤u)=P(X≤F−1(u))=F(F−1(u))=u

这里第二步用了 F 单调这一事实:F(X)≤u 与 X≤F−1(u) 等价,因为 F 连续。第三步用 F 连续时 F(F−1(u))=u。P(U≤u)=u 正是均匀分布 U(0,1) 的分布函数。

概率积分变换的意义在于把任意连续分布映射到统一的均匀分布。若已知 X 的分布而需要检验分布假设,可以把样本做变换后检验是否服从均匀分布;若需要为任意分布生成随机样本,则可以反过来从均匀分布出发。

逆变换采样 ​

逆变换采样(inverse transform sampling)是概率积分变换的逆用。设 U∼U(0,1),F 是某个连续分布函数,令

X=F−1(U)

则 X 的分布函数为 F。证明同样计算分布函数:对任意 x,

P(X≤x)=P(F−1(U)≤x)=P(U≤F(x))=F(x)

这一步用到了 F−1(U)≤x 与 U≤F(x) 的等价性,等价性来自 F 单调。结论说明只要能够得到 U(0,1) 的样本,并且能够计算目标分布的分位数函数,就可以生成该分布的样本。这一方法是随机数生成的基础,大多数软件内置的随机数发生器都从均匀分布出发再作变换。

方法的局限在于需要显式写出 F−1。指数分布、Weibull 分布、Logistic 分布的分位数函数都有闭式表达,可以直接使用。正态分布的分位数函数没有初等闭式表达,需要用其他方法,例如 Box-Muller 变换。

python
import numpy as np

rng = np.random.default_rng(0)
n = 200_000
u = rng.random(n)

# 指数分布:F(x) = 1 - exp(-lambda x),逆为 -ln(1-u)/lambda
lam = 2.0
x_exp = -np.log1p(-u) / lam
print(round(x_exp.mean(), 4), round(x_exp.var(), 4))   # 0.5 0.25,对应 1/lambda 与 1/lambda^2

# Weibull 分布:F(x) = 1 - exp(-(x/lambda)^k),逆为 lambda*(-ln(1-u))^(1/k)
k, scale = 1.5, 2.0
x_wei = scale * (-np.log1p(-u)) ** (1.0 / k)
print(round(x_wei.mean(), 4))                          # 约 1.805

# Box-Muller:从两个独立均匀变量生成标准正态样本
u1 = rng.random(n)
u2 = rng.random(n)
z = np.sqrt(-2.0 * np.log(u1)) * np.cos(2.0 * np.pi * u2)
print(round(z.mean(), 4), round(z.std(), 4))           # 0.0 1.0

Box-Muller 变换利用二维正态分布的极坐标形式:半径的平方服从指数分布,角度服从均匀分布,两者独立。把半径与角度组合回直角坐标,两个分量都服从标准正态分布。这一步用到了 2.2.7 节将要讨论的多元变量变换与 2.2.8 节的和与卷积,是变换公式在采样中的直接应用。实际软件生成正态样本时常使用更快的 Ziggurat 算法,Box-Muller 的价值在于给出了可解析、容易实现的方案。

逆变换采样对离散分布的处理

离散分布没有严格意义上的密度,分位数函数是阶梯函数。用 X=F−1(U) 直接代入会得到阶梯的取值,这在数学上仍然有效,但需要把 F−1 定义为广义逆,用 U 与累积概率的比较逐个确定取值。若沿用连续分布的写法直接把 F−1(U) 当作连续量插值,会得到不属于离散取值集合的结果,破坏分布的正确性。

2.2.7 随机变量变换 ​

一元单调变换 ​

设 Y=g(X),g 在 X 的取值范围内严格单调且可导,反函数 g−1 存在。则 Y 的密度为

fY(y)=fX(g−1(y))|ddyg−1(y)|

绝对值因子来自单调性方向的差异:g 递增时反函数也递增,导数为正;g 递减时反函数递减,导数为负,而密度必须非负,需要取绝对值。这一因子称为雅可比因子(Jacobian factor),它补偿了变量替换引起的尺度变化。

推导思路是先写出分布函数再求导。以 g 递增为例,FY(y)=P(g(X)≤y)=P(X≤g−1(y))=FX(g−1(y)),对 y 求导并用链式法则即得。g 递减时事件方向反转,FY(y)=1−FX(g−1(y)),求导后同样得到带绝对值的公式。

若 g 不单调,需要把定义域分成若干单调区间,在每个区间上套用公式再求和。例如 Y=X2 在 X 取正负值时有两个分支,密度是两支贡献之和。忘记分段求和是变换计算中常见的疏漏。

多元变换与雅可比行列式 ​

设随机向量 X=(X1,…,Xn) 有联合密度 fX,变换 Y=g(X) 可逆、连续可微,反变换为 x=h(y)。则 Y 的联合密度为

fY(y)=fX(h(y))|detJ(y)|,J(y)=∂x∂y=(∂x1∂y1⋯∂x1∂yn⋮⋱⋮∂xn∂y1⋯∂xn∂yn)

J 是反变换的雅可比矩阵,其行列式的绝对值度量体积元在变换下的伸缩。多元情形下雅可比因子是一个行列式,把一元的导数推广为体积的膨胀率。当 g 不是全局一一对应时,同样需要按分支求和。

线性变换下正态分布的参数 ​

线性变换是最常用的一类变换,它把正态分布仍映为正态分布。设 X∼N(μ,Σ) 服从多元正态分布,Y=AX+b 是仿射变换,A 为可逆矩阵,则

Y∼N(Aμ+b, AΣA⊤)

均值按同样的变换移动,协方差矩阵按 AΣA⊤ 变换。这一结论来自正态分布的密度形式和线性变换的雅可比行列式为常数 |detA−1|。它是许多算法的出发点:给随机向量做线性组合后仍只需跟踪均值与协方差,高斯过程、卡尔曼滤波、变分自编码器的重参数化技巧都建立在这一性质上。

对一元的正态变量 X∼N(μ,σ2),取 Y=aX+b 得到 Y∼N(aμ+b,a2σ2)。方差按系数平方缩放,均值按系数一次缩放,两者幂次不同,这一点在做标准化 Z=(X−μ)/σ 时体现为方差被归一为 1。

2.2.8 和的分布与卷积 ​

连续卷积与离散卷积 ​

设 X 与 Y 相互独立,Z=X+Y。Z 的分布函数可以按条件分解:

FZ(z)=∫−∞∞FX(z−y)fY(y)dy

对 z 求导得到密度的卷积(convolution)公式

fZ(z)=∫−∞∞fX(z−y)fY(y)dy=:(fX∗fY)(z)

离散情形下积分为求和。若 X 与 Y 独立同分布且取整数,则

pZ(z)=∑xpX(x)pY(z−x)

这是离散卷积,逐项列出全部和为 z 的取值对再相乘相加。卷积把两个分布合成一个新的分布,特点是结果只依赖两个分布的形态,与各自的内部结构无关,这是独立性带来的化简。

差与商的分布 ​

和之外,差与商也可以通过变换得到。对 Z=X−Y,把变量替换成 (X,Z) 并积分掉 X,得到

fX−Y(z)=∫−∞∞fX(z+y)fY(y)dy

对商 Z=X/Y,在 Y 取正负时积分方向不同,结果需要取绝对值:

fX/Y(z)=∫−∞∞|y|fX(zy)fY(y)dy

这两类分布在假设检验中直接出现:两个独立正态变量之差仍为正态,由正态变量之比导出的 t 分布与 F 分布是 t 检验与方差分析的基础。

Gamma 与卡方由卷积得到 ​

卷积的一个有代表性的结果是 Gamma 分布的可加性。若 X∼Gamma(a1,λ) 与 Y∼Gamma(a2,λ) 独立且尺度参数相同,则

X+Y∼Gamma(a1+a2,λ)

形状参数相加,尺度参数保持不变。这条结论可以对密度的卷积积分直接验证,也是 Gamma 分布称为形状参数可加的原因。当形状参数取整数时 Gamma 分布退化为 Erlang 分布,n 个独立同分布的指数分布之和服从 Gamma(n,λ),这是排队论与可靠性中等待第 n 次事件的时间分布。

卡方分布的可加性是 Gamma 可加性的特例。若 X∼χm2 与 Y∼χn2 独立,则 X+Y∼χm+n2。原因是 χk2 是 Gamma(k/2,1/2),两者尺度相同,形状参数相加得到 (m+n)/2,对应 χm+n2。这条性质使卡方统计量在方差分析中可以直接按自由度累加,把多个观测的平方和合并。

python
import numpy as np
from scipy import stats

rng = np.random.default_rng(7)
n = 500_000

# 两个独立 Exp(1) 之和应为 Gamma(shape=2, scale=1)
s = rng.exponential(size=n) + rng.exponential(size=n)
grid = np.array([0.2, 1.0, 2.0, 4.0, 8.0])
ecdf = np.searchsorted(np.sort(s), grid, side="right") / n
print("经验 CDF:", np.round(ecdf, 4))
print("理论 CDF:", np.round(stats.gamma.cdf(grid, a=2, scale=1), 4))
# 两行接近,说明和的密度等于卷积,形状参数由 1 加到 2

# 三个独立 N(0, 1) 之和应为 N(0, 3)
t = rng.normal(size=n) + rng.normal(size=n) + rng.normal(size=n)
print(round(t.mean(), 4), round(t.var(), 4))           # 0.0 3.0

# 两个卡方变量之和的分布
c = rng.chisquare(2, size=n) + rng.chisquare(3, size=n)
print(round(c.mean(), 4), round(c.var(), 4))           # 5.0 10.0,对应 chi2_5 的均值 5 与方差 10

卷积与独立性的关系

卷积公式的推导用到了 fX,Y(x,y)=fX(x)fY(y),这一步依赖独立性。若 X 与 Y 不独立,和的分布不能只由两个边缘密度决定,必须使用联合密度,卷积公式失效。实践中把两个量的分布做卷积前,先确认它们是否独立,是很重要的一步。相关变量之和不服从简单卷积,其分布依赖具体的相关结构。

2.2.9 顺序统计量与极值 ​

最大值与最小值的分布 ​

设 X1,X2,…,Xn 独立同分布,分布函数为 F。把它们从小到大排列,记第 k 小的值为 X(k),得到顺序统计量(order statistic)X(1)≤X(2)≤⋯≤X(n)。最小值为 X(1),最大值为 X(n)。

最大值的分布函数推导用一个恒等式:最大值不超过 x 等价于每个观测都不超过 x。由独立性,

F(n)(x)=P(X(n)≤x)=P(X1≤x,…,Xn≤x)=F(x)n

最小值不小于 x 等价于每个观测都不小于 x,取对立事件后用独立性:

F(1)(x)=P(X(1)≤x)=1−P(X1>x,…,Xn>x)=1−(1−F(x))n

这两个公式在极值统计与可靠性分析中直接使用。系统由 n 个独立相同的部件串联组成时,任一部件失效则系统失效,系统寿命是最小值;并联组成时任一部件的失效不影响系统,系统寿命是最大值。

一般顺序统计量的密度 ​

第 k 个顺序统计量的密度为

f(k)(x)=n!(k−1)!(n−k)!F(x)k−1(1−F(x))n−kf(x)

公式的结构可以逐因子读懂:有一个观测落在 x 附近,贡献 f(x);另外 k−1 个观测小于 x,贡献 F(x)k−1;剩下 n−k 个观测大于 x,贡献 (1−F(x))n−k;前面的组合数是把 n 个观测分配到这三个部分的方式数。最小与最大的密度是 k=1 与 k=n 的特例。中位数样本 X((n+1)/2) 的分布随 n 增大集中到总体中位数附近,这是样本中位数作为稳健估计量趋于稳定的依据。

三种极值分布的引入 ​

关注最大值的极限分布时,出现三类可能的形式,由费歇、蒂皮特与格涅坚科给出,称为极值分布(extreme value distribution)。当 n 增大而把最大值适当标准化后,极限分布只可能属于三种类型之一。

第一类是冈贝尔分布(Gumbel distribution),对应尾部按指数衰减的分布,正态分布与指数分布的最大值极限属于这一类。第二类是弗雷歇分布(Fréchet distribution),对应重尾分布,尾部按幂律衰减,金融收益、极端洪水流量属于这一类。第三类是韦布尔分布(Weibull distribution),对应有上界的分布,标准化后极限为上界附近的分布。三种类型由尾部形态决定,与具体分布无关,只需判断尾部的衰减速度即可归类。这三类分布的细节在 2.5 节讨论常见连续分布时展开。

2.2.10 经验分布函数 ​

定义与构造 ​

给定一组独立同分布的样本 X1,…,Xn,经验分布函数(empirical distribution function, ECDF)定义为

Fn(x)=1n∑i=1n1{Xi≤x}

它统计不超过 x 的样本所占比例。经验分布函数是观测样本的阶梯函数,在每个样本点处上升 1n。它的取值完全由数据决定,不需要假定总体的分布形式,是分布的非参数估计。

样本分位数可以由经验分布函数的广义逆给出,样本中位数、四分位数都由此定义。经验分布的均值等于样本均值,经验分布的方差等于样本方差。把经验分布函数当作一个完整的分布,可以在不知道总体分布时对统计量做近似推断。

与理论分布的关系 ​

由大数定律,对固定的 x,Fn(x) 是 1{Xi≤x} 的样本均值,其期望为 F(x),因此 Fn(x)→F(x) 依概率成立。格里文科-康特利定理(Glivenko-Cantelli theorem)把逐点收敛加强为一致收敛:

supx∈\R|Fn(x)−F(x)|→0,n→∞

结论是经验分布函数在整个实数轴上一致逼近真实分布函数,收敛几乎必然成立。定理说明用样本经验分布代替总体分布在大样本下是可靠的,置信区间的宽度也在趋近中稳定下来。

基于经验分布函数的一致性,Kolmogorov-Smirnov 统计量取 nsupx|Fn(x)−F(x)|,用它检验样本是否来自某个指定分布。自助法(2.10 节)把经验分布函数当作总体分布,通过从中重抽样估计统计量的分布,其合法性正来自格里文科-康特利定理。大数定律与中心极限定理的完整表述见 2.7 节。

python
import numpy as np
from scipy import stats

rng = np.random.default_rng(11)
sample = rng.normal(loc=0.0, scale=1.0, size=2000)

grid = np.array([-2.0, -1.0, 0.0, 1.0, 2.0])
ecdf = np.searchsorted(np.sort(sample), grid, side="right") / sample.size
print("经验 CDF:", np.round(ecdf, 4))
print("理论 CDF:", np.round(stats.norm.cdf(grid), 4))
# -2: 0.0225 vs 0.0228;0: 0.5000 vs 0.5000;2: 0.9770 vs 0.9772

# Kolmogorov-Smirnov 距离随样本量增大而缩小
for m in [50, 500, 5000]:
    sub = sample[:m]
    d = np.max(np.abs(
        np.searchsorted(np.sort(sub), grid, side="right") / m - stats.norm.cdf(grid)
    ))
    print(f"n = {m:5d},网格上的最大偏差 = {d:.4f}")

2.2.11 混合分布、截断分布与删失数据 ​

混合分布 ​

混合分布(mixture distribution)由若干分量分布按权重叠加而成。若随机变量以概率 wk 来自第 k 个分量分布 fk,则整体密度为

f(x)=∑k=1Kwkfk(x),wk≥0,∑k=1Kwk=1

混合描述的是总体由若干子总体构成的情形。某类商品的价格分布在不同品类之间有差异,对整体建模时把各品类的子分布按占比加权即得混合分布。当分量是相同形式、不同参数的高斯分布时,得到高斯混合模型,它是聚类与密度估计的常用工具,也是期望最大化算法的对象。混合分布的方差大于各分量方差的加权平均,多出的部分来自分量均值之间的差异,这一分解将在 2.3 节的全方差公式中给出。

截断分布 ​

截断分布(truncated distribution)是把取值限制在某个区间 [a,b] 后的条件分布:

ftrunc(x)=f(x)F(b)−F(a),a≤x≤b

分母是归一化常数,把落在区间内的概率重新分配到 1,保证积分仍为 1。截断意味着落在区间外的样本不被纳入分析,密度在区间外取零。市场调查按条件筛选受访者,只保留某个年龄段或某收入区间的样本,得到的就是截断分布。截断会改变均值与方差,取值落在边界外的个体被整体排除,导致对总体的描述出现偏移。

删失数据 ​

删失数据(censored data)指观测值只被记录为某个界限。可靠性试验中常见右删失:观察期结束时产品仍在正常工作,只知道真实寿命 T 大于观察时长 C,观测到的是 C。左删失则是只知道真实值小于某界限。删失与截断的区别在于观测是否仍然进入样本:删失的对象仍在样本中,只是取值信息不完整;截断的对象被整体排除。

三者的联系在于都可以用似然函数统一处理。混合分布反映总体的构成差异,截断分布是条件分布,删失数据是部分信息观测,建模时分别用分量权重、归一化常数、删失似然来刻画。生存分析把风险函数与删失似然结合起来,得到可以处理不完全观测的推断方法。这一组区分的意义在于提醒建模时先明确数据的生成机制:观测值是被筛选掉了一部分,还是边界处的取值被合并,还是真实值被界限替代,三者对应的模型完全不同。

2.2.12 本节小结 ​

从事件到分布的语言转换

本节把事件层面的概率转化为随机变量层面的分布。累积分布函数 F(x)=P(X≤x) 是最统一的描述工具,单调不减、右连续、两端极限为 0 与 1 三条性质完整刻画了它,各类区间概率都可以由它表示。离散型随机变量用概率质量函数,连续型用概率密度函数,密度的值是概率的密度而不是概率本身,连续变量单点概率为零这一事实使区间端点的写法不再重要。分位数函数作为分布函数的广义逆,给出了中位数、四分位数与参考区间的计算方式。生存函数、风险函数与累积风险函数把非负随机变量的信息按时间进程重新组织,风险函数的形状刻画了老化模式。概率积分变换与逆变换采样把任意连续分布与均匀分布互相转化,是随机数生成的基础。变量变换公式、卷积公式、顺序统计量与经验分布函数分别处理了变换、求和、极值与数据驱动的估计这四类问题。混合、截断与删失的区分则为实际数据提供了三种不同的建模入口。

分布函数与密度函数完整描述了一个随机变量,实际使用中往往只关心少数几个概括性的数值:平均值、离散程度、对称性、尾部厚度。这些量把高维的函数对象压缩为可比较、可排序的标量,是模型评估与参数估计的直接依据。下一节讨论期望、方差、协方差与各种矩,说明这些数字特征的定义、性质与相互联系,为 2.4 与 2.5 节的常见分布族给出统一的描述语言。

练习题 ​

第 1 题 概念推导 ​

设连续型随机变量 X 的分布函数 F 严格单调递增,令 U=F(X)。证明 U∼U(0,1)。再说明若 F 有平坦段,结论是否仍然成立。

参考答案

由 F 严格单调递增,F−1 存在且连续。对 u∈(0,1) 计算 U 的分布函数:

P(U≤u)=P(F(X)≤u)=P(X≤F−1(u))=F(F−1(u))=u

当 u≤0 时该概率为 0,当 u≥1 时该概率为 1。因此 U 的分布函数为 FU(u)=u⋅1(0,1)(u) 加上两端的取值,这正是均匀分布 U(0,1) 的分布函数,故 U∼U(0,1)。

若 F 有平坦段,F 不是严格单调,F−1 需要用广义逆定义。结论仍然成立:对任意 u∈(0,1),事件 F(X)≤u 与 X≤F−1(u) 等价,且 F(F−1(u))=u(由于 F 连续),所以 P(U≤u)=u。平坦段只影响 F−1 的取值方式,不改变 U 的分布。结论失败的情形是 F 有跳跃,对应离散型随机变量,此时 U 取离散值而非连续均匀分布。

第 2 题 计算推理 ​

设随机变量 X 的密度为 fX(x)=3x2,0<x<1,其余位置为 0。求 X 的分布函数、中位数与 P(X>0.5),再求 Y=X2 的密度。

参考答案

先求分布函数。当 0<x<1 时,

FX(x)=∫0x3t2dt=x3

其余位置:x≤0 时 FX(x)=0,x≥1 时 FX(x)=1。

中位数是方程 FX(m)=0.5 的解,m3=0.5,得 m=0.51/3≈0.7937。

P(X>0.5)=1−FX(0.5)=1−0.53=0.875

对 Y=X2,反函数为 x=y,导数 dxdy=12y。由一元变换公式,

fY(y)=fX(y)|12y|=3(y)2⋅12y=32y,0<y<1

其余位置为 0。检验积分:∫0132ydy=32⋅23=1,归一化成立。

第 3 题 代码验证 ​

用逆变换采样从指数分布 Exp(λ) 生成样本,取 λ=3,样本量为 106。验证样本均值与方差接近理论值 1/λ 与 1/λ2,并把样本的经验分布函数与理论分布函数在同一网格上比较。

参考答案
python
import numpy as np
from scipy import stats

rng = np.random.default_rng(2024)
n = 1_000_000
lam = 3.0

u = rng.random(n)
x = -np.log1p(-u) / lam          # 逆变换采样

print(round(x.mean(), 4))                        # 0.3333,理论 1/lambda
print(round(x.var(), 4))                         # 0.1111,理论 1/lambda^2

grid = np.array([0.1, 0.3, 0.5, 1.0, 2.0])
ecdf = np.searchsorted(np.sort(x), grid, side="right") / n
print("经验 CDF:", np.round(ecdf, 4))
print("理论 CDF:", np.round(stats.expon.cdf(grid, scale=1.0 / lam), 4))

样本均值与方差与理论值相符到小数点后四位。经验分布函数在网格各点与理论分布函数一致到约 10−3,偏差随样本量增大而缩小。这段验证同时说明了逆变换采样的正确性与经验分布函数对理论分布的逼近,两项结论都由大数定律支撑。

第 4 题 综合应用 ​

某植入器械的失效时间 T(月)服从 Weibull 分布,分布函数为 F(t)=1−exp⁡(−(t/λ)k),λ=24,k=2。求生存函数、风险函数与 24 个月时的风险值,并说明 k=2 对应的老化模式。若把该器械的失效时间与另一独立同类器械的失效时间相加构成串联系统的备份方案,系统寿命的分布是否可以由卷积给出?

参考答案

生存函数为 S(t)=1−F(t)=exp⁡(−(t/24)2)。风险函数为

h(t)=f(t)S(t)=kλ(tλ)k−1=224(t24)=t288

在 t=24 时,h(24)=24/288=1/12≈0.0833,即每月的瞬时失效速率约为 8.3%。

风险函数 h(t)=t/288 关于 t 单调递增,k=2>1 对应递增风险,反映器械随时间磨损而失效倾向增加的老化模式。

两器械失效时间之和的分布可以由卷积给出,前提是两者相互独立。两个独立 Weibull 变量之和一般不再服从 Weibull 分布,其密度需要按卷积公式数值计算。需要区分串联与备份:串联系统中任一失效则系统失效,寿命是两个失效时间的最小值,分布由 1−(1−F(t))2 给出;并联备份在任一时点只要有一个工作则系统工作,寿命是最大值,分布由 F(t)2 给出。和、最小值、最大值三种组合对应三种系统结构,需要按实际方案选择正确的组合方式。

常见错误 ​

错误 1 · 把概率密度的值当作概率

原因:密度函数 f(x) 在每一点给出一个数值,形式上与概率质量函数相似,容易被直接读作概率。密度可以大于 1,例如 U(0,0.5) 的密度恒为 2,把 2 当作概率会得出荒谬结论。连续变量单点概率为零,用密度值代替 P(X=x) 没有任何意义。

解决:牢记密度是概率的密度,概率由积分得到。需要某个事件概率时对密度在对应区间上积分,需要近似小概率时用 f(x)Δx 并写成乘积形式,始终保留区间宽度这一因子。

错误 2 · 变量变换时漏掉雅可比因子

原因:把 fY(y) 直接写成 fX(g−1(y)),忽略了变量替换引起的尺度变化。密度是单位长度上的概率,变量被拉伸或压缩后单位长度对应的事件长度改变,必须用雅可比因子补偿。多元情形下漏掉行列式会使结果不归一化。

解决:一元变换写出 fY(y)=fX(g−1(y))|ddyg−1(y)|,多元变换写出 fY(y)=fX(h(y))|detJ|。做完变换后对结果积分验证是否为 1,可以及时发现漏项。

错误 3 · 用连续分布的公式处理离散分布

原因:把概率质量函数当作密度求导或积分,或者对离散分布使用连续的分位数定义。离散分布的分布函数是阶梯函数,导数在跳跃点不存在,直接把 F−1(U) 当作连续量会得到不属于取值集合的结果。

解决:先判断随机变量类型再选择公式。离散型用求和、用质量函数、用广义逆逐个比较累积概率确定取值;连续型用积分、用密度、用分位数函数。混合型把两部分分开处理后再相加。

错误 4 · 混淆删失数据与截断数据

原因:两者都出现在观测受限制的场景,名称相近。删失只记录真实值的界限,对象仍进入样本,信息不完整;截断把落在区间外的观测整体排除,样本中不再出现这些对象。用截断的归一化方式处理删失数据,或反之,都会使似然函数错位。

解决:判断观测值是被界限替代还是被排除。被界限替代的是删失,似然中需要用生存函数贡献;被排除的是截断,密度需要除以区间内的概率重新归一化。明确数据生成机制后再选择对应的似然写法。