2.2 随机变量与分布函数
2.1 节建立的语言以事件和集合为基本对象。事件域
随机变量(random variable)完成的正是这一编码。它把样本点
本节从随机变量的定义出发,依次建立累积分布函数、概率质量函数与概率密度函数这套描述工具,再讨论分位数、生存与风险函数、概率积分变换与逆变换采样、随机变量变换、卷积、顺序统计量、经验分布函数,最后区分混合、截断与删失三类结构。这些内容构成分布论的骨架,2.3 节的数字特征、2.4 与 2.5 节的常见分布、2.6 节的联合分布都将在本节概念的基础上展开。
2.2.1 随机变量的定义与类型
从样本点到实数
给定概率空间
称为随机变量。这个名字包含两层含义:它的取值由随机试验的结果决定,本身又是可参与数学运算的数值。掷一颗骰子时样本空间为
并非任意函数都算随机变量。要求对任意实数
属于事件域
把事件编码为数值带来三个便利。其一是运算:实数可以求和、求平均、做变换,事件的集合运算做不到这一点。其二是描述:实数轴上的分布只需一个函数就能完整刻画,不必枚举全部事件。其三是衔接:概率计算转化为积分与求和,微积分的全部工具都可以调用。这三个便利是随机变量成为概率论核心对象的直接原因。
离散型、连续型与混合型
按取值的形态,随机变量分为三类。取值有限或可列的随机变量称为离散型随机变量(discrete random variable),掷骰子的点数、一天内收到的订单数、一局游戏中出现的失误次数都属于这一类。离散型随机变量的概率集中在若干个点上,每个取值对应的概率可以逐一列出。
累积分布函数处处连续、且可表示为某个非负函数积分的随机变量称为连续型随机变量(continuous random variable),响应时间、身高、温度、电压在连续测量的模型中都按这一类处理。它们的取值充满某个区间,单点概率为零,概率由密度函数在区间上的积分给出。
两类之外还存在混合型随机变量(mixed random variable),取值中既有离散点又有连续部分。环境监测仪器测量某项指标时,低于检出限的结果常常直接记录为检出限值
三类随机变量的区分决定了后续使用的工具:离散型用求和,连续型用积分,混合型需要把两部分分开再相加。2.2.3 节引入的概率质量函数与概率密度函数正对应前两类。
2.2.2 累积分布函数
定义与三条基本性质
随机变量
它给出
第一条是单调不减:若
第二条是右连续:对任意
第三条是两端极限:
反过来,任意满足单调不减、右连续、两端极限为
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 表示事件概率
分布函数统一给出各类事件的概率。对任意
原因是
| 事件 | 用 CDF 表示 |
|---|---|
记号
分布函数为什么统一用右连续
分布函数取右连续而不是左连续,是为了让跳跃点承载取值概率。若取
2.2.3 概率质量函数与概率密度函数
离散型与概率质量函数
离散型随机变量
概率质量函数的取值非负,且对所有可能取值求和为
分布函数由质量函数累加得到,
连续型与概率密度函数
连续型随机变量
此时的
密度函数非负,在整条实数轴上的积分为
这是连续型随机变量概率计算的基本公式:求区间概率归结为对密度积分。
密度不是概率
密度与概率的关系容易误解。密度函数的值不是概率,它是概率关于位置的变化率。把区间概率写成积分,在小区间上做一次近似,
可见
连续型随机变量在任意单点取值的概率为零。由分布函数在连续点满足
需要区分密度与质量函数的是:质量函数在每一点的值就是概率,逐点相加;密度在每一点的值不是概率,必须积分。混用两者的直接后果是把某个点的密度当作取值概率,得出 BAB 统计中常见的一类错误结论。
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.52.2.4 分位数函数与分位数
分位数的定义
给定分布函数
为该分布的
把
当
中位数与四分位数
取
经验数据的分位数由排序后的样本给出,取法随定义略有差别,连续分布与样本分位数的对应需要用插值处理。统计软件中的分位数算法不同会导致结果在小样本下略有差异,报告分位数时给出所用的定义可以避免歧义。
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.00002.2.5 生存函数、风险函数与累积风险函数
三个函数及其关系
在可靠性工程与生存分析中,描述非负随机变量
它给出存活超过
风险函数(hazard function)描述在已经存活到
分子是
累积风险函数(cumulative hazard function)是风险函数的积分:
把
这三个函数互相决定,知道其中任意一个就可以还原另外两个。风险函数把分布的信息拆成逐点的瞬时倾向,便于按时间的进程描述失效。
风险函数的形状与老化
风险函数的形状直接反映失效机制。取
Weibull 分布的风险函数为
生存分析为什么偏爱风险函数
分布函数与密度函数描述的是绝对量,风险函数描述的是条件量。可靠性分析中更关心的问题往往是已经正常运行
2.2.6 概率积分变换与逆变换采样
概率积分变换
设随机变量
这里第二步用了
概率积分变换的意义在于把任意连续分布映射到统一的均匀分布。若已知
逆变换采样
逆变换采样(inverse transform sampling)是概率积分变换的逆用。设
则
这一步用到了
方法的局限在于需要显式写出
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.0Box-Muller 变换利用二维正态分布的极坐标形式:半径的平方服从指数分布,角度服从均匀分布,两者独立。把半径与角度组合回直角坐标,两个分量都服从标准正态分布。这一步用到了 2.2.7 节将要讨论的多元变量变换与 2.2.8 节的和与卷积,是变换公式在采样中的直接应用。实际软件生成正态样本时常使用更快的 Ziggurat 算法,Box-Muller 的价值在于给出了可解析、容易实现的方案。
逆变换采样对离散分布的处理
离散分布没有严格意义上的密度,分位数函数是阶梯函数。用
2.2.7 随机变量变换
一元单调变换
设
绝对值因子来自单调性方向的差异:
推导思路是先写出分布函数再求导。以
若
多元变换与雅可比行列式
设随机向量
线性变换下正态分布的参数
线性变换是最常用的一类变换,它把正态分布仍映为正态分布。设
均值按同样的变换移动,协方差矩阵按
对一元的正态变量
2.2.8 和的分布与卷积
连续卷积与离散卷积
设
对
离散情形下积分为求和。若
这是离散卷积,逐项列出全部和为
差与商的分布
和之外,差与商也可以通过变换得到。对
对商
这两类分布在假设检验中直接出现:两个独立正态变量之差仍为正态,由正态变量之比导出的
Gamma 与卡方由卷积得到
卷积的一个有代表性的结果是 Gamma 分布的可加性。若
形状参数相加,尺度参数保持不变。这条结论可以对密度的卷积积分直接验证,也是 Gamma 分布称为形状参数可加的原因。当形状参数取整数时 Gamma 分布退化为 Erlang 分布,
卡方分布的可加性是 Gamma 可加性的特例。若
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卷积与独立性的关系
卷积公式的推导用到了
2.2.9 顺序统计量与极值
最大值与最小值的分布
设
最大值的分布函数推导用一个恒等式:最大值不超过
最小值不小于
这两个公式在极值统计与可靠性分析中直接使用。系统由
一般顺序统计量的密度
第
公式的结构可以逐因子读懂:有一个观测落在
三种极值分布的引入
关注最大值的极限分布时,出现三类可能的形式,由费歇、蒂皮特与格涅坚科给出,称为极值分布(extreme value distribution)。当
第一类是冈贝尔分布(Gumbel distribution),对应尾部按指数衰减的分布,正态分布与指数分布的最大值极限属于这一类。第二类是弗雷歇分布(Fréchet distribution),对应重尾分布,尾部按幂律衰减,金融收益、极端洪水流量属于这一类。第三类是韦布尔分布(Weibull distribution),对应有上界的分布,标准化后极限为上界附近的分布。三种类型由尾部形态决定,与具体分布无关,只需判断尾部的衰减速度即可归类。这三类分布的细节在 2.5 节讨论常见连续分布时展开。
2.2.10 经验分布函数
定义与构造
给定一组独立同分布的样本
它统计不超过
样本分位数可以由经验分布函数的广义逆给出,样本中位数、四分位数都由此定义。经验分布的均值等于样本均值,经验分布的方差等于样本方差。把经验分布函数当作一个完整的分布,可以在不知道总体分布时对统计量做近似推断。
与理论分布的关系
由大数定律,对固定的
结论是经验分布函数在整个实数轴上一致逼近真实分布函数,收敛几乎必然成立。定理说明用样本经验分布代替总体分布在大样本下是可靠的,置信区间的宽度也在趋近中稳定下来。
基于经验分布函数的一致性,Kolmogorov-Smirnov 统计量取
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)由若干分量分布按权重叠加而成。若随机变量以概率
混合描述的是总体由若干子总体构成的情形。某类商品的价格分布在不同品类之间有差异,对整体建模时把各品类的子分布按占比加权即得混合分布。当分量是相同形式、不同参数的高斯分布时,得到高斯混合模型,它是聚类与密度估计的常用工具,也是期望最大化算法的对象。混合分布的方差大于各分量方差的加权平均,多出的部分来自分量均值之间的差异,这一分解将在 2.3 节的全方差公式中给出。
截断分布
截断分布(truncated distribution)是把取值限制在某个区间
分母是归一化常数,把落在区间内的概率重新分配到
删失数据
删失数据(censored data)指观测值只被记录为某个界限。可靠性试验中常见右删失:观察期结束时产品仍在正常工作,只知道真实寿命
三者的联系在于都可以用似然函数统一处理。混合分布反映总体的构成差异,截断分布是条件分布,删失数据是部分信息观测,建模时分别用分量权重、归一化常数、删失似然来刻画。生存分析把风险函数与删失似然结合起来,得到可以处理不完全观测的推断方法。这一组区分的意义在于提醒建模时先明确数据的生成机制:观测值是被筛选掉了一部分,还是边界处的取值被合并,还是真实值被界限替代,三者对应的模型完全不同。
2.2.12 本节小结
从事件到分布的语言转换
本节把事件层面的概率转化为随机变量层面的分布。累积分布函数
分布函数与密度函数完整描述了一个随机变量,实际使用中往往只关心少数几个概括性的数值:平均值、离散程度、对称性、尾部厚度。这些量把高维的函数对象压缩为可比较、可排序的标量,是模型评估与参数估计的直接依据。下一节讨论期望、方差、协方差与各种矩,说明这些数字特征的定义、性质与相互联系,为 2.4 与 2.5 节的常见分布族给出统一的描述语言。
练习题
第 1 题 概念推导
设连续型随机变量
参考答案
由
当
若
第 2 题 计算推理
设随机变量
参考答案
先求分布函数。当
其余位置:
中位数是方程
对
其余位置为
第 3 题 代码验证
用逆变换采样从指数分布
参考答案
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))样本均值与方差与理论值相符到小数点后四位。经验分布函数在网格各点与理论分布函数一致到约
第 4 题 综合应用
某植入器械的失效时间
参考答案
生存函数为
在
风险函数
两器械失效时间之和的分布可以由卷积给出,前提是两者相互独立。两个独立 Weibull 变量之和一般不再服从 Weibull 分布,其密度需要按卷积公式数值计算。需要区分串联与备份:串联系统中任一失效则系统失效,寿命是两个失效时间的最小值,分布由
常见错误
错误 1 · 把概率密度的值当作概率
原因:密度函数
解决:牢记密度是概率的密度,概率由积分得到。需要某个事件概率时对密度在对应区间上积分,需要近似小概率时用
错误 2 · 变量变换时漏掉雅可比因子
原因:把
解决:一元变换写出
错误 3 · 用连续分布的公式处理离散分布
原因:把概率质量函数当作密度求导或积分,或者对离散分布使用连续的分位数定义。离散分布的分布函数是阶梯函数,导数在跳跃点不存在,直接把
解决:先判断随机变量类型再选择公式。离散型用求和、用质量函数、用广义逆逐个比较累积概率确定取值;连续型用积分、用密度、用分位数函数。混合型把两部分分开处理后再相加。
错误 4 · 混淆删失数据与截断数据
原因:两者都出现在观测受限制的场景,名称相近。删失只记录真实值的界限,对象仍进入样本,信息不完整;截断把落在区间外的观测整体排除,样本中不再出现这些对象。用截断的归一化方式处理删失数据,或反之,都会使似然函数错位。
解决:判断观测值是被界限替代还是被排除。被界限替代的是删失,似然中需要用生存函数贡献;被排除的是截断,密度需要除以区间内的概率重新归一化。明确数据生成机制后再选择对应的似然写法。