👇 连享会 · 推文导航 www.lianxh.cn
🍓 课程推荐:连享会:2025面板数据因果推断专题 · 线上 嘉宾:徐轶青,斯坦福大学 时间:2025 年 6 月 14-15;21-22;28-29 日每天9:00-12:30 咨询:王老师 18903405450(微信)
温馨提示: 文中链接在微信中无法生效。请点击底部 「阅读原文」 。或直接长按/扫描如下二维码,直达原文:
作者: 刘潍嘉 (清华大学) 邮箱: weijialiu99@163.com
受限于个人能力,文中难免有错误和疏漏之处,还请大家多多批评指正!
0. 引言 概率分布是统计建模、推断和数据分析的基石,它们为描述随机现象和量化不确定性提供了数学框架。本文为15种关键的离散和连续概率分布提供了相关理论及 Python 的软件实现概述。对于每种分布,将分别阐述其简介、常见用途、数学属性 (包括概率质量函数/概率密度函数 (PMF/PDF)、累积分布函数 (CDF)、矩母函数 (MGF)、特征函数 (CF)、期望值 ( ) 和方差 (
),然后提供在 Python 中实现的代码示例,并附带使用多个参数绘制PMF/PDF和CDF图形变化的代码。整体结构分为两部分:第一部分介绍离散分布,第二部分介绍连续分布。
1. 离散分布 离散随机变量是指其可能取值是有限个或可数无限多个的随机变量。离散分布通过概率质量函数 (Probability Mass Function, PMF) 来描述,PMF 给出了随机变量取每个特定值的概率。离散分布广泛应用于对计数结果 (如事件发生次数、成功次数等) 进行建模。
1.1 伯努利分布 (X ~ Bernoulli(p)) 1.1.1 简介与用途 伯努利分布是最简单的离散分布,用于模拟只有两个可能结果 (通常称为“成功”和“失败”,编码为 1 和 0) 的单次随机试验。参数 (
) 代表“成功”结果发生的概率。
常见用途 :
作为构建更复杂离散分布 (如二项分布、几何分布) 的基础模块。 1.1.2 数学性质 表 1.1:伯努利分布性质总结
1.1.3 软件实现 (Python) Python 实现代码 (PMF, CDF, RVS (Random variables))
import scipy.stats as stats # 导入统计模块 # 参数设置 p_bernoulli = 0.7 # 计算 PMF (P(X=1) 和 P(X=0)) print( f"P(X=1) for p= {p_bernoulli} : {stats.bernoulli.pmf( 1 , p_bernoulli)} " ) print( f"P(X=0) for p= {p_bernoulli} : {stats.bernoulli.pmf( 0 , p_bernoulli)} " ) # 计算 CDF (P(X<=0)) print( f"P(X<=0) for p= {p_bernoulli} : {stats.bernoulli.cdf( 0 , p_bernoulli)} " ) # 生成随机变量 (生成10个) print( f"Random variables for p= {p_bernoulli} (10 samples): {stats.bernoulli.rvs(p_bernoulli, size= 10 )} " )
1.1.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 k_values = [ 0 , 1 ] params_p = [ 0.3 , 0.5 , 0.7 ] colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- bar_width = 0.1 for i, p_val in enumerate(params_p): pmf_values = stats.bernoulli.pmf(k_values, p_val) # 为每个p值创建一组偏移的条形图 ax1.bar(np.array(k_values) + (i - 1 ) * bar_width, pmf_values, width=bar_width, label= f'p = {p_val} ' , color=colors[i], alpha= 0.7 ) ax1.set_xticks(k_values) ax1.set_xlabel( 'k (outcome)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( 'Bernoulli Distribution PMF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6
) ax1.set_ylim(bottom= 0 ) # --- 绘制 CDF --- # 为了画阶梯图,我们需要在每个跳跃点前后都定义点 k_plot = np.linspace( -1 , 2 , 500 ) for i, p_val in enumerate(params_p): cdf_values = stats.bernoulli.cdf(k_plot, p_val) ax2.plot(k_plot, cdf_values, label= f'p = {p_val} ' , color=colors[i]) ax2.set_xlabel( 'k' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( 'Bernoulli Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim( -0.1 , 1.1 ) ax2.set_xlim( -1 , 2 ) plt.tight_layout() plt.show()
1.1.5 联系与延伸 伯努利分布是理解其他几个重要离散分布的关键基础。二项分布描述了多次独立伯努利试验中的成功次数;几何分布描述了获得第一次成功所需的伯努利试验次数;负二项分布则描述了获得指定次数成功所需的伯努利试验次数。因此,这些更复杂分布的性质 (如期望、方差) 通常可以通过考虑其底层的独立伯努利试验来推导。
1.2 二项分布 (X ~ Binomial(n, p)) 1.2.1 简介与用途 二项分布用于描述在一系列固定的 次独立同分布的伯努利试验中,“成功”结果出现的次数 ,其中每次试验成功的概率为
。
常见用途 :
1.2.2 数学性质 表 1.2:二项分布性质总结
说明 :
PMF 中的
是二项式系数,代表从 次试验中选出 次成功的方式数。 期望和方差可以通过将二项变量视为 个独立伯努利变量之和来推导:
,
(其中
) 。 MGF 也是基于独立伯努利变量之和的 MGF 是各 MGF 的乘积这一性质得出的:
。 1.2.3 软件实现 (Python) Python 实现代码 (PMF, CDF, RVS) import scipy.stats as stats # 导入统计模块 # 参数设置 n_binom = 10 # 试验次数 p_binom = 0.3 # 成功概率 # 计算 PMF (例: k=3) print( f"P(X=3) for n= {n_binom} , p= {p_binom} : {stats.binom.pmf( 3 , n_binom, p_binom)} " ) # 计算 CDF (例: k=4) print( f"P(X<=4) for n= {n_binom} , p= {p_binom} : {stats.binom.cdf( 4 , n_binom, p_binom)} " ) # 生成随机变量 (生成5个) print( f"Random variables for n= {n_binom} , p= {p_binom} (5 samples): {stats.binom.rvs(n_binom, p_binom, size= 5 )} " )
1.2.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 n_binom_plot = 20 params_p_binom = [ 0.2 , 0.5 , 0.8 ] k_values_binom = np.arange( 0 , n_binom_plot + 1 ) colors = [ 'blue' , 'red' ,
'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- for i, p_val in enumerate(params_p_binom): pmf_values = stats.binom.pmf(k_values_binom, n_binom_plot, p_val) ax1.plot(k_values_binom, pmf_values, marker= 'o' , linestyle= '-' , label= f'p= {p_val} ' , color=colors[i]) ax1.set_xlabel( 'k (Number of Successes)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( f'Binomial Distribution PMF (n= {n_binom_plot} )' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_xticks(k_values_binom[:: 2 ]) # --- 绘制 CDF --- for i, p_val in enumerate(params_p_binom): cdf_values = stats.binom.cdf(k_values_binom, n_binom_plot, p_val) ax2.step(k_values_binom, cdf_values, where= 'post' , label= f'p= {p_val} ' , color=colors[i]) ax2.set_xlabel( 'k (Number of Successes)' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( f'Binomial Distribution CDF (n= {n_binom_plot} )' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_xticks(k_values_binom[:: 2 ]) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
1.2.5 联系与延伸 二项分布与其他分布有着重要的联系。当试验次数 很大且成功概率
适中时,根据中心极限定理,二项分布可以用正态分布 来近似。通常当
且 时,近似效果较好。这是因为二项变量是独立同分布伯努利变量的和,而中心极限定理保证了独立同分布变量之和 (或均值) 在 趋于无穷时趋向正态分布。
另一方面,当 很大, 很小,使得
的值适中时,二项分布可以用泊松分布 来近似。这可以通过考察二项 PMF 在
条件下的极限来证明,极限结果恰好是泊松 PMF。这个近似在处理稀有事件的大量重复试验时非常有用。
此外,比较二项分布与泊松分布的方差和期望关系也很有启发。对于 的二项分布,方差
严格小于其期望 。而泊松分布的方差等于期望 (
) 。这意味着,如果使用 的泊松分布来近似二项分布,二项分布本身表现出相对于泊松分布的“欠离散” (underdispersion) 。在对实际计数数据建模时,这是一个重要的诊断特征:如果观察数据的方差显著小于均值,可能暗示着一个类似二项分布的机制 (例如,存在一个固定的试验总数上限) ,而不是一个纯粹的泊松过程。
1.3 几何分布 (X ~ Geometric(p)) 1.3.1 简介与用途 几何分布用于模拟为了获得 第一次 成功所需要进行的独立伯努利试验的次数。需要注意的是,几何分布有两种常见的定义:
scipy.stats.geom
采用第一种定义 ( 为试验次数, )。
常见用途 :
模拟离散场景下的等待时间 (例如,直到成功的尝试次数) 。 其他关注的是第一次成功所需的尝试次数,而不是总尝试次数的问题。 1.3.2 数学性质 表 1.3:几何分布性质总结 (X = 试验次数)
说明 :
PMF 表示前 次试验失败 (每次概率
) ,第 次试验成功 (概率 ) 。 CDF 可以通过计算 PMF 的累加和 (一个等比数列求和) 得到。 几何分布具有无记忆性 (Memoryless Property):
。这意味着,已知已经进行了 次试验且未成功,还需要进行至少 次试验才能成功的条件概率,等于从一开始就需要至少 次试验才能成功的概率。过去的失败不影响未来的等待时间。 1.3.3 软件实现 (Python) Python 实现代码 (PMF, CDF, RVS) import scipy.stats as stats # 导入统计模块 import numpy
as np # 参数设置 p_geom = 0.2 # 成功概率 # 计算 PMF (例: 试验次数 k=5) # scipy.stats.geom 定义 k 为试验次数 (k>=1) print( f"P(X=5 trials) for p= {p_geom} : {stats.geom.pmf( 5 , p_geom)} " ) # 计算 CDF (例: 试验次数 k=5, P(X<=5)) print( f"P(X<=5 trials) for p= {p_geom} : {stats.geom.cdf( 5 , p_geom)} " ) # 生成随机变量 (生成10个试验次数) print( f"Random variables (trials) for p= {p_geom} (10 samples): {stats.geom.rvs(p_geom, size= 10 )} " )
1.3.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_p_geom = [ 0.1 , 0.3 , 0.5 ] k_values_geom = np.arange( 1 , 21 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- for i, p_val in enumerate(params_p_geom): pmf_values = stats.geom.pmf(k_values_geom, p_val) ax1.plot(k_values_geom, pmf_values, marker= 'o' , linestyle= '-' , label= f'p= {p_val} ' , color=colors[i]) ax1.set_xlabel( 'k (Number of Trials until first success)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( 'Geometric Distribution PMF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_xticks(k_values_geom[:: 2 ]) # --- 绘制 CDF --- for i, p_val in enumerate(params_p_geom): cdf_values = stats.geom.cdf(k_values_geom, p_val) ax2.step(k_values_geom, cdf_values, where= 'post' , label= f'p=
{p_val} ' , color=colors[i]) ax2.set_xlabel( 'k (Number of Trials until first success)' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( 'Geometric Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_xticks(k_values_geom[:: 2 ]) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
1.3.5 联系与延伸 几何分布是连续情形下指数分布的离散对应。两者都用于模拟等待时间 (直到第一个事件发生) ,并且都具有标志性的无记忆性。这种概念上的联系对于在应用中 (如可靠性、排队) 选择使用离散时间模型还是连续时间模型至关重要。
同时,几何分布是负二项分布的一个特例。负二项分布计算的是获得 次成功所需的试验次数,而几何分布计算的是获得第 1 次成功所需的试验次数。在负二项分布的各种公式 (PMF、MGF 等) 中,令 ,即可得到相应的几何分布公式。这表明几何分布属于更广泛的等待时间分布族。
1.4 负二项 (帕斯卡) 分布 (X ~ Pascal(m, p) or NB(r, p)) 1.4.1 简介与用途 负二项分布 (帕斯卡分布) 用于模拟在一系列独立同分布的伯努利试验中,为了达到预定次数 (或
) 的成功,所需要的试验总次数,或者在达到 次成功 之前 所经历的失败次数。与几何分布类似,其定义需要明确:随机变量 究竟是计数总试验次数,还是计数失败次数。 scipy.stats.nbinom
定义随机变量 是在获得 次成功 (对应文中的 ) 之前 所经历的失败次数 。
常见用途 :
对“过度离散” (overdispersed) 的计数数据进行建模,即数据的方差大于均值的情况,这在生物学、流行病学、经济学等领域很常见。 1.4.2 数学性质 表 1.4:负二项分布性质总结 (X = 失败次数 k, r = 成功次数)
说明 :
PMF 的含义是:在总共
次试验中,最后一次必须是成功 (概率 ) ,而在之前的 次试验中,恰好有 次成功和 次失败。从
次中选择 次失败位置的方式数为 。 期望和方差可以通过将负二项变量看作 个独立几何变量 (计数失败次数) 之和来推导。
1.4.3 软件实现 (Python) Python 实现代码 (PMF, CDF, RVS) import scipy.stats as stats # 导入统计模块 # 参数设置 r_nbinom = 5 # 成功次数 (scipy中的 n) p_nbinom = 0.6 # 成功概率 (scipy中的 p) # 计算 PMF (例: k=3 次失败) # scipy.stats.nbinom 定义 k 为失败次数 print( f"P(X=3 failures) for r= {r_nbinom} , p= {p_nbinom} : {stats.nbinom.pmf( 3 , r_nbinom, p_nbinom)} " ) # 计算 CDF (例: k=4 次失败, P(X<=4)) print( f"P(X<=4 failures) for r= {r_nbinom} , p= {p_nbinom} : {stats.nbinom.cdf( 4 , r_nbinom, p_nbinom)} " ) # 生成随机变量 (生成10个失败次数) print( f"Random variables (failures) for r= {r_nbinom} , p= {p_nbinom} (10 samples): {stats.nbinom.rvs(r_nbinom, p_nbinom, size= 10 )} " )
1.4.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 r_nbinom_plot = 5 params_p_nbinom = [ 0.2 , 0.5 , 0.8 ] k_values_nbinom = np.arange( 0 , 31 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- for i, p_val in enumerate(params_p_nbinom): pmf_values = stats.nbinom.pmf(k_values_nbinom, r_nbinom_plot, p_val) ax1.plot(k_values_nbinom, pmf_values, marker= 'o' , linestyle= '-' , label= f'p= {p_val} ' , color=colors[i]) ax1.set_xlabel(
'k (Number of Failures)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( f'Negative Binomial PMF (r= {r_nbinom_plot} )' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_xticks(k_values_nbinom[:: 2 ]) # --- 绘制 CDF --- for i, p_val in enumerate(params_p_nbinom): cdf_values = stats.nbinom.cdf(k_values_nbinom, r_nbinom_plot, p_val) ax2.step(k_values_nbinom, cdf_values, where= 'post' , label= f'p= {p_val} ' , color=colors[i]) ax2.set_xlabel( 'k (Number of Failures)' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( f'Negative Binomial CDF (r= {r_nbinom_plot} )' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_xticks(k_values_nbinom[:: 2 ]) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
1.4.5 联系与延伸 负二项分布可以通过泊松分布与伽马分布的混合得到。如果 的条件分布是
,而 服从
,则 的边际分布是 。这解释了其在过度离散数据建模中的应用。
此外,负二项分布是 个独立几何分布变量 (计数失败次数) 之和,提供了一个直观的构造方式。
1.5 超几何分布 (X ~ Hypergeometric(N, K, n)) 1.5.1 简介与用途 超几何分布描述了从一个包含
个元素 (其中有 个“成功”元素和 个“失败”元素) 的有限总体中,进行不放回抽样,抽取 个元素时,抽到的“成功”元素的数量 。
常见用途 :
质量控制:从一批产品中抽检 件,其中次品 (成功) 的数量。
与二项分布的关键区别 :超几何分布的试验是不独立的,因为每次抽取都改变了总体中剩余元素的构成比例。
1.5.2 数学性质 表 1.5:超几何分布性质总结
(总体大小), (总体中成功数, ), (样本大小,
)
说明 :
PMF 的逻辑是:从
个成功元素中选出 个的方式数 ,乘以从 个失败元素中选出 个的方式数
,再除以从 个总元素中选出 个的所有可能方式数 。 期望值的形式
与二项分布的期望 类似,其中 是第一次抽取时成功概率。 方差包含有限总体修正因子 (FPC)
,比二项分布方差小,反映不放回抽样的信息增益。 1.5.3 软件实现 (Python) scipy.stats.hypergeom
使用参数 M
(总体大小 N), n
(总体中成功元素个数 K), N
(抽取样本大小 n)。 为了避免混淆,这里代码中的变量名会尽量对应 scipy
的参数名。
Python 实现代码 (PMF, CDF, RVS) import scipy.stats as stats # 导入统计模块 # 参数设置 (对应 scipy.stats.hypergeom) M_hyper = 50 # 总体大小 (N_total in text) n_hyper = 10 # 总体中成功元素个数 (K_success in text) N_drawn_hyper = 8 # 抽取样本大小 (n_drawn in text) # 计算 PMF (例: x=2 个成功) # k 是抽取的样本中的成功数 print( f"P(X=2) for M= {M_hyper} , n= {n_hyper} , N= {N_drawn_hyper} : {stats.hypergeom.pmf(k= 2 , M=M_hyper, n=n_hyper, N=N_drawn_hyper)} " ) # 计算 CDF (例: x=3 个成功, P(X<=3)) print( f"P(X<=3) for M= {M_hyper} , n= {n_hyper} , N= {N_drawn_hyper} : {stats.hypergeom.cdf(k= 3 , M=M_hyper, n=n_hyper, N=N_drawn_hyper)} " ) # 生成随机变量 (生成10个) print( f"Random variables for M= {M_hyper} , n= {n_hyper} , N= {N_drawn_hyper} (10 samples): {stats.hypergeom.rvs(M=M_hyper, n=n_hyper, N=N_drawn_hyper, size= 10 )} " )
1.5.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 M_plot = 50 N_drawn_plot = 10 params_n_success = [ 5 , 15 , 25 ] # K in text, n in scipy k_values_hyper = np.arange( 0 , N_drawn_plot + 1 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- for i, n_success_val in enumerate(params_n_success): valid_k = k_values_hyper[k_values_hyper <= n_success_val] pmf_values = stats.hypergeom.pmf(valid_k, M=M_plot, n=n_success_val, N=N_drawn_plot) ax1.plot(valid_k, pmf_values, marker= 'o' , linestyle= '-' , label= f'K= {n_success_val} ' , color=colors[i]) ax1.set_xlabel( 'k (Number of Successes in Sample)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( f'Hypergeometric PMF (N= {M_plot} , n_drawn= {N_drawn_plot} )' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_xticks(k_values_hyper) # --- 绘制 CDF --- for i, n_success_val in enumerate(params_n_success): cdf_values = stats.hypergeom.cdf(k_values_hyper, M=M_plot, n=n_success_val, N=N_drawn_plot) ax2.step(k_values_hyper, cdf_values, where= 'post' , label= f'K= {n_success_val} ' , color=colors[i]) ax2.set_xlabel( 'k (Number of Successes in Sample)' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( f'Hypergeometric CDF (N= {M_plot} , n_drawn= {N_drawn_plot} )' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_xticks(k_values_hyper) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
1.5.5 联系与延伸 当 (总体大小远大于样本大小时),超几何分布近似于
,因为不放回抽样的影响变得很小。这在大型总体抽样中常用于简化计算。
1.6 泊松分布 (X ~ Poisson(λ)) 1.6.1 简介与用途 泊松分布用于模拟固定区间内随机独立事件的数量,参数 是平均发生次数。
常见用途 :
1.6.2 数学性质 表 1.6:泊松分布性质总结
说明 :
可加性:独立泊松变量之和仍为泊松分布。如果 和
是独立的,则
。 1.6.3 软件实现 (Python) scipy.stats.poisson
使用参数 mu
对应文中的 。
Python 实现代码 (PMF, CDF, RVS)
import scipy.stats as stats # 参数设置 lambda_param_poisson = 3.5 # scipy 中用 mu 表示 lambda # 计算 PMF (例: k=4) print( f"P(X=4) for lambda= {lambda_param_poisson} : {stats.poisson.pmf( 4 , mu=lambda_param_poisson)} " ) # 计算 CDF (例: k=5, P(X<=5)) print( f"P(X<=5) for lambda= {lambda_param_poisson} : {stats.poisson.cdf( 5 , mu=lambda_param_poisson)} " ) # 生成随机变量 (生成10个) print( f"Random variables for lambda= {lambda_param_poisson} (10 samples): {stats.poisson.rvs(mu=lambda_param_poisson, size= 10 )} " )
1.6.4 分布函数绘图 (Python) Python 绘图代码 (PMF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_lambda_poisson = [ 1.0 , 4.0 , 10.0 ] max_k_poisson = 25 k_values_poisson = np.arange( 0 , max_k_poisson + 1 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PMF --- for i, lambda_val in enumerate(params_lambda_poisson): pmf_values = stats.poisson.pmf(k_values_poisson, mu=lambda_val) ax1.plot(k_values_poisson, pmf_values, marker= 'o' , linestyle= '-' , label= f'λ= {lambda_val} ' , color=colors[i]) ax1.set_xlabel( 'k (Number of Events)' ) ax1.set_ylabel( 'P(X = k)' ) ax1.set_title( 'Poisson Distribution PMF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_xticks(k_values_poisson[:: 2 ]) # --- 绘制 CDF --- for i, lambda_val in enumerate(params_lambda_poisson):
cdf_values = stats.poisson.cdf(k_values_poisson, mu=lambda_val) ax2.step(k_values_poisson, cdf_values, where= 'post' , label= f'λ= {lambda_val} ' , color=colors[i]) ax2.set_xlabel( 'k (Number of Events)' ) ax2.set_ylabel( 'F(k) = P(X <= k)' ) ax2.set_title( 'Poisson Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_xticks(k_values_poisson[:: 2 ]) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
1.6.5 联系与延伸 泊松分布是二项分布在
条件下的极限,适用于描述在连续时间或空间内稀有事件的发生次数。当 较大时 (通常 或 作为一个粗略的指导),泊松分布可以用正态分布 来近似。如果观察到的计数数据的方差显著大于或小于其均值,则可能需要考虑其他分布,如负二项分布 (用于过度离散,方差大于均值) 或广义泊松分布。
2. 连续分布 连续随机变量的取值覆盖一个区间或多个区间的并集。它们通过概率密度函数 (Probability Density Function, PDF)
来描述。对于连续随机变量 ,其在任意单点 的概率
。概率是通过 PDF 在某个区间上的积分来定义的:
。
2.1 指数分布 (X ~ Exponential(λ)) 2.1.1 简介与用途 指数分布用于模拟独立随机事件发生的时间间隔。如果事件的发生遵循泊松过程 (即单位时间内事件发生的平均次数 是恒定的),那么两次连续事件之间的时间间隔服从参数为 (速率参数) 的指数分布。有时也用尺度参数 来参数化。
常见用途 :
排队论:顾客到达服务台的时间间隔,或服务时间的模型。 2.1.2 数学性质 表 2.1:指数分布性质总结 (参数为速率
)
说明 :
无记忆性:
for 。这意味着,如果一个设备已经无故障运行了 小时,它还能至少再无故障运行 小时的概率,与一个全新设备能至少无故障运行 小时的概率相同。 2.1.3 软件实现 (Python) scipy.stats.expon
使用 scale
参数,它等于
。即 scale
= 。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 lambda_param_exp = 0.5 # 速率参数 lambda scale_param_exp = 1 / lambda_param_exp # Scipy 的 expon 使用 scale 参数 (beta = 1/lambda) # 计算 PDF (例: x=2) print( f"PDF at x=2 for lambda= {lambda_param_exp} (scale= {scale_param_exp} ): {stats.expon.pdf( 2 , scale=scale_param_exp)} " ) # 计算 CDF (例: x=3) print( f"CDF at x=3 for lambda= {lambda_param_exp} (scale= {scale_param_exp} ): {stats.expon.cdf( 3 , scale=scale_param_exp)} " ) # 生成随机变量 (生成10个) print( f"Random variables for lambda= {lambda_param_exp} (scale= {scale_param_exp} ) (10 samples): {stats.expon.rvs(scale=scale_param_exp, size= 10 )} " )
2.1.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_lambda_exp = [ 0.5 , 1.0 , 2.0 ] x_values_exp = np.linspace( 0 , 5 , 500 ) colors = [ 'blue' , 'red' , 'green'
] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PDF --- for i, lambda_val in enumerate(params_lambda_exp): scale_val = 1 / lambda_val pdf_values = stats.expon.pdf(x_values_exp, scale=scale_val) ax1.plot(x_values_exp, pdf_values, label= f'λ= {lambda_val} ' , color=colors[i]) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( 'Exponential Distribution PDF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 ) # --- 绘制 CDF --- for i, lambda_val in enumerate(params_lambda_exp): scale_val = 1 / lambda_val cdf_values = stats.expon.cdf(x_values_exp, scale=scale_val) ax2.plot(x_values_exp, cdf_values, label= f'λ= {lambda_val} ' , color=colors[i]) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( 'Exponential Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
2.1.5 联系与延伸 指数分布是几何分布的连续对应物,两者都具有无记忆性。指数分布是伽马分布
在形状参数 时的特例 (即
)。它也是韦伯分布 (Weibull distribution) 在形状参数为1时的特例。多个独立同分布的指数随机变量之和服从爱尔朗分布或伽马分布。
2.2 拉普拉斯 (双指数) 分布 (X ~ Laplace(μ, b))
2.2.1 简介与用途 拉普拉斯分布,也称为双指数分布,是一种连续概率分布,以其相对于均值的对称“尖峰”形状和比正态分布更重的尾部(即具有更高的峰度)而闻名。它由位置参数 (决定分布的中心) 和尺度参数 (决定分布的离散程度或宽度) 来定义。
常见用途 :
建模具有重尾特征的数据,例如金融市场中的某些资产回报率。 在稳健统计中,拉普拉斯分布与最小绝对偏差 (LAD) 回归相关,正如正态分布与最小二乘回归相关一样。LAD 回归对异常值不如最小二乘敏感。 2.2.2 数学性质 表 2.2:拉普拉斯分布性质总结
$f(x; \mu, b) = \frac{1}{2b} \exp\left(-\frac{
2.2.3 软件实现 (Python) scipy.stats.laplace
使用 loc
参数对应文中的
, scale
参数对应文中的 。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 mu_laplace = 0 # 位置参数 mu (scipy中的 loc) b_laplace = 1 # 尺度参数 b (scipy中的 scale) # 计算 PDF (例: x=1.5) print( f"PDF at x=1.5 for mu= {mu_laplace} , b= {b_laplace} : {stats.laplace.pdf( 1.5 , loc=mu_laplace, scale=b_laplace)} " ) # 计算 CDF (例: x=1.5) print( f"CDF at x=1.5 for mu= {mu_laplace} , b= {b_laplace} : {stats.laplace.cdf( 1.5 , loc=mu_laplace, scale=b_laplace)} " ) # 生成随机变量 (生成10个) print( f"Random variables for mu= {mu_laplace} , b= {b_laplace} (10 samples): {stats.laplace.rvs(loc=mu_laplace, scale=b_laplace, size= 10 )} " )
2.2.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 mu_laplace_plot = 0 params_b_laplace = [ 0.5 , 1.0 , 2.0 ] x_values_laplace = np.linspace( -5 , 5 , 500 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=(
14 , 5 )) # --- 绘制 PDF --- for i, b_val in enumerate(params_b_laplace): pdf_values = stats.laplace.pdf(x_values_laplace, loc=mu_laplace_plot, scale=b_val) ax1.plot(x_values_laplace, pdf_values, label= f'b= {b_val} ' , color=colors[i]) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( f'Laplace Distribution PDF (μ= {mu_laplace_plot} )' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 ) # --- 绘制 CDF --- for i, b_val in enumerate(params_b_laplace): cdf_values = stats.laplace.cdf(x_values_laplace, loc=mu_laplace_plot, scale=b_val) ax2.plot(x_values_laplace, cdf_values, label= f'b= {b_val} ' , color=colors[i]) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( f'Laplace Distribution CDF (μ= {mu_laplace_plot} )' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
2.2.5 联系与延伸 拉普拉斯分布可以看作是两个独立同分布的指数随机变量之差(经过适当的移位和缩放)。具体来说,如果
和
是独立的,那么
服从参数为 和 的拉普拉斯分布。拉普拉斯分布的最大似然估计 (MLE) 对于位置参数 是样本中位数,而对于尺度参数 是样本绝对偏差的平均值 (
)。
2.3 正态 (高斯) 分布 (X ~ N(μ, σ²)) 2.3.1 简介与用途 正态分布,也称高斯分布,是统计学中最重要和最广泛应用的连续概率分布之一。它由两个参数定义:均值 ,表示分布的中心位置;方差 (或标准差 ),表示分布的离散程度或宽度。其概率密度函数曲线呈对称的钟形。
常见用途 :
模拟许多自然界和社会科学中的现象,如身高、体重、测量误差等。 中心极限定理的核心:大量独立随机变量之和(或均值)的分布在满足一定条件下趋向于正态分布,无论原始变量的分布是什么。 许多统计检验和推断方法(如 t 检验、ANOVA、线性回归中的误差项假设)的基础。 2.3.2 数学性质 表 2.3:正态分布性质总结
说明 :
标准正态分布:当 且 (即 ) 时,称为标准正态分布,通常用 表示。其 PDF 为
。 线性组合:独立正态随机变量的线性组合仍然服从正态分布。 2.3.3 软件实现 (Python) scipy.stats.norm
使用 loc
参数对应文中的均值 , scale
参数对应文中的标准差 。
Python 实现代码 (PDF, CDF, RVS)
import scipy.stats as stats # 参数设置 mu_norm = 10 # 均值 mu (scipy中的 loc) sigma_norm = 2 # 标准差 sigma (scipy中的 scale) # 计算 PDF (例: x=11) print( f"PDF at x=11 for mu= {mu_norm} , sigma= {sigma_norm} : {stats.norm.pdf( 11 , loc=mu_norm, scale=sigma_norm)} " ) # 计算 CDF (例: x=12) print( f"CDF at x=12 for mu= {mu_norm} , sigma= {sigma_norm} : {stats.norm.cdf( 12 , loc=mu_norm, scale=sigma_norm)} " ) # 生成随机变量 (生成5个) print( f"Random variables for mu= {mu_norm} , sigma= {sigma_norm} (5 samples): {stats.norm.rvs(loc=mu_norm, scale=sigma_norm, size= 5 )} " )
2.3.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # --- Case 1: Varying sigma, fixed mu --- fig1, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) mu_fixed = 0 params_sigma_norm = [ 0.5 , 1.0 , 2.0 ] x_values_norm1 = np.linspace( -7 , 7 , 500 ) colors = [ 'blue' , 'red' , 'green' ] # PDF plot (varying sigma) for i, sigma_val in enumerate(params_sigma_norm): pdf_values = stats.norm.pdf(x_values_norm1, loc=mu_fixed, scale=sigma_val) ax1.plot(x_values_norm1, pdf_values, label= f'σ= {sigma_val} ' , color=colors[i]) ax1.set_title( f'Normal PDF (μ= {mu_fixed} , varying σ)' ) ax1.set_xlabel( 'x' ); ax1.set_ylabel( 'f(x)' ); ax1.legend(); ax1.grid( True , linestyle= '--' , alpha= 0.6 )
# CDF plot (varying sigma) for i, sigma_val in enumerate(params_sigma_norm): cdf_values = stats.norm.cdf(x_values_norm1, loc=mu_fixed, scale=sigma_val) ax2.plot(x_values_norm1, cdf_values, label= f'σ= {sigma_val} ' , color=colors[i]) ax2.set_title( f'Normal CDF (μ= {mu_fixed} , varying σ)' ) ax2.set_xlabel( 'x' ); ax2.set_ylabel( 'F(x)' ); ax2.legend(); ax2.grid( True , linestyle= '--' , alpha= 0.6 ) plt.tight_layout() plt.show() # --- Case 2: Varying mu, fixed sigma --- fig2, (ax3, ax4) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) sigma_fixed = 1.0 params_mu_norm = [ -2.0 , 0.0 , 2.0 ] x_values_norm2 = np.linspace( -7 , 7 , 500 ) # PDF plot (varying mu) for i, mu_val in enumerate(params_mu_norm): pdf_values = stats.norm.pdf(x_values_norm2, loc=mu_val, scale=sigma_fixed) ax3.plot(x_values_norm2, pdf_values, label= f'μ= {mu_val} ' , color=colors[i]) ax3.set_title( f'Normal PDF (σ= {sigma_fixed} , varying μ)' ) ax3.set_xlabel( 'x' ); ax3.set_ylabel( 'f(x)' ); ax3.legend(); ax3.grid( True , linestyle= '--' , alpha= 0.6 ) # CDF plot (varying mu) for i, mu_val in enumerate(params_mu_norm): cdf_values = stats.norm.cdf(x_values_norm2, loc=mu_val, scale=sigma_fixed) ax4.plot(x_values_norm2, cdf_values, label= f'μ= {mu_val} ' , color=colors[i]) ax4.set_title( f'Normal CDF (σ= {sigma_fixed} , varying μ)' ) ax4.set_xlabel( 'x' ); ax4.set_ylabel( 'F(x)' ); ax4.legend(); ax4.grid( True , linestyle= '--' , alpha= 0.6 ) plt.tight_layout() plt.show()
2.3.5 联系与延伸 中心极限定理 (Central Limit Theorem,CLT) 是统计理论中的一个基石。CLT 指出,从任何具有有限均值和有限方差的总体中抽取足够大的独立随机样本时,样本均值的分布将近似于正态分布,无论原始总体的分布形状如何。通常样本大小
被认为“足够大”,但具体取决于原始分布的偏度和峰度。这个定理的重要性在于,它允许我们对总体参数(如均值)进行统计推断,即使我们对总体的具体分布知之甚少,这使得正态分布在假设检验和置信区间构建中扮演核心角色。
2.4 Beta 分布 (X ~ Beta(a, b)) 2.4.1 简介与用途 Beta 分布是一种定义在区间 上的连续概率分布族,由两个正的形状参数 (alpha) 和 (beta) 控制。由于其取值范围限定在0到1之间,Beta 分布特别适用于对比例、百分比或概率等量进行建模。
常见用途 :
对服从二项分布的事件的成功概率 进行建模,特别是在贝叶斯统计中,Beta 分布是伯努利分布和二项分布成功概率
的共轭先验分布。 项目管理(如 PERT 技术)中,用于描述任务完成时间的随机性(经过适当的缩放和平移后)。 建模任何取值范围在0和1之间的随机变量,如人口中某特征的比例、机器的效率等。 根据 和 的不同取值,Beta 分布可以呈现出多种形状(如U形、钟形、偏斜、均匀分布等)。 2.4.2 数学性质 表 2.4:Beta 分布性质总结
for . 若
则为U形,众数为0和1. 若 则为均匀分布. 其他情况需单独讨论.
2.4.3 软件实现 (Python) scipy.stats.beta
使用参数 a
和 b
直接对应文中的形状参数 和 。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 a_beta = 2 b_beta =
5 # 计算 PDF (例: x=0.3) print( f"PDF at x=0.3 for a= {a_beta} , b= {b_beta} : {stats.beta.pdf( 0.3 , a_beta, b_beta)} " ) # 计算 CDF (例: x=0.4) print( f"CDF at x=0.4 for a= {a_beta} , b= {b_beta} : {stats.beta.cdf( 0.4 , a_beta, b_beta)} " ) # 生成随机变量 (生成10个) print( f"Random variables for a= {a_beta} , b= {b_beta} (10 samples): {stats.beta.rvs(a_beta, b_beta, size= 10 )} " )
2.4.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_beta = [ ( 0.5 , 0.5 ), ( 5 , 1 ), ( 1 , 3 ), ( 2 , 2 ), ( 2 , 5 ), ( 1 , 1 ) ] x_values_beta = np.linspace( 0.001 , 0.999 , 500 ) fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PDF --- for a_val, b_val in params_beta: pdf_values = stats.beta.pdf(x_values_beta, a_val, b_val) ax1.plot(x_values_beta, pdf_values, label= f'a= {a_val} , b= {b_val} ' ) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( 'Beta Distribution PDF' ) ax1.legend(fontsize= 'small' ) ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 ); ax1.set_xlim( 0 , 1 )
# --- 绘制 CDF --- for a_val, b_val in params_beta: cdf_values = stats.beta.cdf(x_values_beta, a_val, b_val) ax2.plot(x_values_beta, cdf_values, label= f'a= {a_val} , b= {b_val} ' ) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( 'Beta Distribution CDF' ) ax2.legend(fontsize= 'small' ) ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ); ax2.set_xlim( 0 , 1 ) plt.tight_layout() plt.show()
2.4.5 联系与延伸 Beta 分布在贝叶斯推断中作为伯努利/二项分布成功概率的共轭先验分布非常有用。如果先验信念用 Beta(a,b) 表达,观察到 k 次成功和 n-k 次失败后,后验分布仍然是 Beta 分布,具体为 Beta(a+k, b+n-k)。Beta 分布与F分布和t分布也有关系。如果
和
是独立的,则
。当 时,Beta(1,1) 就是 [0,1] 上的均匀分布。
2.5 卡方分布 (X ~ χ²(n)) 2.5.1 简介与用途 卡方分布(Chi-squared distribution),记作 ,是由 个独立的标准正态随机变量的平方和构成的分布。参数
称为自由度(degrees of freedom),它必须是一个正整数。卡方分布是伽马分布的一个特例。
常见用途 :
拟合优度检验 :例如,皮尔逊卡方检验,用于检验观察频数与期望频数之间是否存在显著差异。 方差推断 :对正态总体的方差进行置信区间的估计和假设检验。 在构建其他统计分布(如 F 分布和 t 分布)时作为组成部分。 2.5.2 数学性质 表 2.5:卡方分布性质总结
说明 :
当自由度 较大时,卡方分布 可以用正态分布
来近似。 2.5.3 软件实现 (Python) scipy.stats.chi2
使用 df
参数对应文中的自由度 。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 n_chi2 = 5 # 自由度 df (scipy中的 df) # 计算 PDF (例: x=4.5) print( f"PDF at x=4.5 for df= {n_chi2} : {stats.chi2.pdf( 4.5 , df=n_chi2)} " ) # 计算 CDF (例: x=6.0, P(X<=6.0)) print( f"CDF at x=6.0 for df= {n_chi2} : {stats.chi2.cdf( 6.0 , df=n_chi2)} " ) # 生成随机变量 (生成10个) print( f"Random variables for df= {n_chi2} (10 samples): {stats.chi2.rvs(df=n_chi2, size= 10 )} " )
2.5.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats
# 定义参数 params_df_chi2 = [ 1 , 2 , 3 , 5 , 10 ] x_values_chi2 = np.linspace( 0.01 , 20 , 500 ) colors = plt.cm.viridis(np.linspace( 0 , 1 , len(params_df_chi2))) fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PDF --- for i, df_val in enumerate(params_df_chi2): pdf_values = stats.chi2.pdf(x_values_chi2, df=df_val) ax1.plot(x_values_chi2, pdf_values, label= f'df= {df_val} ' , color=colors[i]) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( 'Chi-squared Distribution PDF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 , top= 0.5 ); ax1.set_xlim(left= 0 ) # --- 绘制 CDF --- for i, df_val in enumerate(params_df_chi2): cdf_values = stats.chi2.cdf(x_values_chi2, df=df_val) ax2.plot(x_values_chi2, cdf_values, label= f'df= {df_val} ' , color=colors[i]) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( 'Chi-squared Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ); ax2.set_xlim(left= 0 ) plt.tight_layout() plt.show()
2.5.5 联系与延伸 卡方分布是伽马分布
的一个特例:
(如果伽马分布的第二个参数是速率参数) 或
(如果伽马分布的第二个参数是尺度参数)。它在抽样理论中非常重要,特别是在涉及样本方差的推断时。例如,若从正态总体
中抽取大小为 的随机样本,其样本方差为 ,则统计量
服从自由度为 的卡方分布。
2.6 t 分布 (X ~ T(n)) 2.6.1 简介与用途 t 分布(Student's t-distribution)是一种形状与正态分布相似但尾部更重(即更易出现极端值)的连续概率分布。它由一个参数定义:自由度 (degrees of freedom, df),通常是一个正整数。当样本量较小且总体标准差未知时,t 分布用于估计正态总体的均值。
常见用途 :
单样本 t 检验 :检验单个总体的均值是否等于某个特定值。 双样本 t 检验 :检验两个独立或配对总体的均值是否相等。 2.6.2 数学性质 表 2.6:t 分布性质总结
没有简单的闭式解,通常通过数值方法或正则化不完全 Beta 函数计算。
说明 :
当自由度 时,t 分布趋近于标准正态分布 N(0,1)。 对于较小的
,t 分布的尾部比正态分布更厚,这意味着它赋予远离均值的值更高的概率。 2.6.3 软件实现 (Python) scipy.stats.t
使用 df
参数对应文中的自由度 。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 n_t = 10 # 自由度 df (scipy中的 df) # 计算 PDF (例: x=1.5) print( f"PDF at x=1.5 for df= {n_t} : {stats.t.pdf( 1.5 , df=n_t)} " ) # 计算 CDF (例: x=2.0, P(X<=2.0)) print( f"CDF at x=2.0 for df= {n_t} : {stats.t.cdf( 2.0 , df=n_t)} " ) # 生成随机变量 (生成5个) print( f"Random variables for df= {n_t} (5 samples): {stats.t.rvs(df=n_t, size= 5 )} " )
2.6.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_df_t = [ 1 , 2 ,
5 , 30 ] x_values_t = np.linspace( -5 , 5 , 500 ) colors = plt.cm.viridis(np.linspace( 0 , 1 , len(params_df_t))) fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PDF --- for i, df_val in enumerate(params_df_t): pdf_values = stats.t.pdf(x_values_t, df=df_val) ax1.plot(x_values_t, pdf_values, label= f't (df= {df_val} )' , color=colors[i]) pdf_normal_std = stats.norm.pdf(x_values_t, loc= 0 , scale= 1 ) ax1.plot(x_values_t, pdf_normal_std, label= 'Normal(0,1)' , linestyle= '--' , color= 'black' ) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( 't-Distribution PDF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 , top= 0.45 ) # --- 绘制 CDF --- for i, df_val in enumerate(params_df_t): cdf_values = stats.t.cdf(x_values_t, df=df_val) ax2.plot(x_values_t, cdf_values, label= f't (df= {df_val} )' , color=colors[i]) cdf_normal_std = stats.norm.cdf(x_values_t, loc= 0 , scale= 1 ) ax2.plot(x_values_t, cdf_normal_std, label= 'Normal(0,1)' , linestyle= '--' , color= 'black' ) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( 't-Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
2.6.5 联系与延伸 t 分布可以通过一个标准正态随机变量
和一个独立于 的卡方随机变量 来构造。具体地,随机变量
服从自由度为 的 t 分布。在实际应用中,这通常出现在当从正态总体 中抽取小样本(
)时,用样本均值 和样本标准差 来构建统计量
,该统计量服从自由度为
的 t 分布。
2.7 伽马分布 (X ~ Gamma(α, λ)) 2.7.1 简介与用途 伽马分布是一种非常灵活的连续概率分布,定义在正实数轴上。它由两个参数控制:形状参数 (alpha, or k) 和速率参数 (lambda, or )。有时,伽马分布也用形状参数 和尺度参数
来参数化。
常见用途 :
模拟等待时间,例如,直到第 个独立泊松事件发生的总时间。 作为贝叶斯统计中一些参数(如泊松分布的均值 ,或正态分布的精度即方差的倒数)的共轭先验分布。 2.7.2 数学性质 (使用形状 和速率 ) 表 2.7:伽马分布性质总结
说明 :
可加性:如果
是独立的 (i=1,2),则
(速率参数相同)。 2.7.3 软件实现 (Python) scipy.stats.gamma
使用形状参数 a
(对应文中的 ) 和 scale
参数 (对应文中的 )。 loc
参数默认为0,用于平移分布。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 alpha_gamma = 3 # 形状参数 alpha (scipy中的 a) lambda_gamma = 0.5 # 速率参数 lambda scale_gamma = 1 / lambda_gamma # 尺度参数 theta (scipy中的 scale) # 计算 PDF (例: x=5) print( f"PDF at x=5 for alpha= {alpha_gamma} , lambda= {lambda_gamma} (scale= {scale_gamma} ): {stats.gamma.pdf( 5 , a=alpha_gamma, scale=scale_gamma)} " ) # 计算 CDF (例: x=7) print( f"CDF at x=7 for alpha= {alpha_gamma} , lambda= {lambda_gamma} (scale= {scale_gamma} ): {stats.gamma.cdf( 7 , a=alpha_gamma, scale=scale_gamma)} " ) # 生成随机变量 (生成10个) print( f"Random variables for alpha= {alpha_gamma} , lambda= {lambda_gamma} (scale= {scale_gamma} ) (10 samples): {stats.gamma.rvs(a=alpha_gamma, scale=scale_gamma, size= 10 )} " )
2.7.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats x_values_gamma = np.linspace(
0.01 , 20 , 500 ) # --- Case 1: Varying shape (alpha), fixed scale --- fig1, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) fixed_lambda1 = 1.0 params_alpha_gamma1 = [ 1.0 , 2.0 , 3.0 , 5.0 ] colors1 = plt.cm.viridis(np.linspace( 0 , 1 , len(params_alpha_gamma1))) ax1.set_title( f'Gamma PDF (λ= {fixed_lambda1} , varying α)' ) ax2.set_title( f'Gamma CDF (λ= {fixed_lambda1} , varying α)' ) for i, alpha_val in enumerate(params_alpha_gamma1): pdf_values = stats.gamma.pdf(x_values_gamma, a=alpha_val, scale=( 1 /fixed_lambda1)) ax1.plot(x_values_gamma, pdf_values, label= f'α= {alpha_val} ' , color=colors1[i]) cdf_values = stats.gamma.cdf(x_values_gamma, a=alpha_val, scale=( 1 /fixed_lambda1)) ax2.plot(x_values_gamma, cdf_values, label= f'α= {alpha_val} ' , color=colors1[i]) ax1.set_xlabel( 'x' ); ax1.set_ylabel( 'f(x)' ); ax1.legend(); ax1.grid( True , linestyle= '--' , alpha= 0.6 ); ax1.set_ylim(bottom= 0 ) ax2.set_xlabel( 'x' ); ax2.set_ylabel( 'F(x)' ); ax2.legend(); ax2.grid( True , linestyle= '--' , alpha= 0.6 ); ax2.set_ylim(bottom= 0 ) fig1.tight_layout() plt.show() # --- Case 2: Fixed shape (alpha), varying rate (lambda) --- fig2, (ax3, ax4) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) fixed_alpha2 = 2.0 params_lambda_gamma2 = [ 0.5 , 1.0 , 2.0 ] colors2 = [ 'blue' , 'red' , 'green' ] ax3.set_title( f'Gamma PDF (α= {fixed_alpha2} , varying λ)' ) ax4.set_title( f'Gamma CDF (α= {fixed_alpha2} , varying λ)' ) for i, lambda_val in enumerate(params_lambda_gamma2): scale_val = 1 / lambda_val pdf_values = stats.gamma.pdf(x_values_gamma, a=fixed_alpha2, scale=scale_val) ax3.plot(x_values_gamma, pdf_values, label= f'λ= {lambda_val} ' , color=colors2[i]) cdf_values = stats.gamma.cdf(x_values_gamma, a=fixed_alpha2, scale=scale_val) ax4.plot(x_values_gamma, cdf_values, label= f'λ= {lambda_val} ' , color=colors2[i]) ax3.set_xlabel( 'x' ); ax3.set_ylabel(
'f(x)' ); ax3.legend(); ax3.grid( True , linestyle= '--' , alpha= 0.6 ); ax3.set_ylim(bottom= 0 ) ax4.set_xlabel( 'x' ); ax4.set_ylabel( 'F(x)' ); ax4.legend(); ax4.grid( True , linestyle= '--' , alpha= 0.6 ); ax4.set_ylim(bottom= 0 ) fig2.tight_layout() plt.show()
2.7.5 联系与延伸 伽马分布是一个非常通用的分布族,它包含了其他几个重要的分布作为特例:
指数分布 :当形状参数 时,伽马分布
就是速率为 的指数分布
。 爱尔朗分布 :当形状参数 是一个正整数(通常记为 )时,伽马分布
就是爱尔朗分布 。它表示 个独立的、速率均为 的指数随机变量之和的分布。 卡方分布 :当形状参数
(其中 是自由度) 且速率参数 (或者说尺度参数 ) 时,伽马分布
就是自由度为 的卡方分布 。 形状参数
通常可以解释为“事件发生的数量”,而速率参数 (或尺度参数 ) 则与事件发生的快慢或平均间隔有关。
2.8 爱尔朗分布 (X ~ Erlang(k, λ)) 2.8.1 简介与用途 爱尔朗分布是伽马分布的一个特例,其形状参数 (对应伽马分布中的 ) 必须是一个正整数。速率参数 (或尺度参数 ) 与伽马分布中的定义相同。爱尔朗分布描述了
个独立的、具有相同速率 的指数随机事件的总等待时间。
常见用途 :
排队论 :模拟需要经过 个独立同分布指数服务阶段的总服务时间,或者模拟第 个顾客到达的时间(如果顾客到达遵循泊松过程)。 可靠性工程 :模拟一个由 个部件串联组成的系统,当一个部件失效后立即被同类部件替换,直到第 个部件失效的总时间(假设每个部件寿命服从指数分布)。 电话工程(由 A.K. Erlang 首次提出用于建模电话呼叫)。 2.8.2 数学性质 (使用形状 和速率
) 表 2.8:爱尔朗分布性质总结
说明 :
CDF 的形式表明,如果
,则 等于一个泊松随机变量
取值至少为 的概率,即
。 2.8.3 软件实现 (Python) 爱尔朗分布是伽马分布的特例,因此可以使用 scipy.stats.gamma
来实现,只需确保形状参数 a
(对应这里的 ) 是整数。 scipy
也直接提供了 scipy.stats.erlang
,其参数 a
对应 , scale
对应
。
Python 实现代码 (PDF, CDF, RVS using `scipy.stats.erlang`) import scipy.stats as stats # 参数设置 k_erlang = 4 # 形状参数 k (整数, scipy erlang/gamma 中的 a) lambda_erlang = 0.8 # 速率参数 lambda scale_erlang = 1 / lambda_erlang # 尺度参数 theta (scipy erlang/gamma 中的 scale) # 使用 scipy.stats.erlang (更直接) # 计算 PDF (例: x=5) print( f"Erlang PDF at x=5 for k= {k_erlang} , lambda= {lambda_erlang} (scale= {scale_erlang} ): {stats.erlang.pdf( 5 , a=k_erlang, scale=scale_erlang)} " ) # 计算 CDF (例: x=6) print( f"Erlang CDF at x=6 for k= {k_erlang} , lambda= {lambda_erlang} (scale= {scale_erlang} ): {stats.erlang.cdf( 6 , a=k_erlang, scale=scale_erlang)} " ) # 生成随机变量 (生成10个) print( f"Erlang Random variables for k= {k_erlang} , lambda= {lambda_erlang} (scale= {scale_erlang} ) (10 samples): {stats.erlang.rvs(a=k_erlang, scale=scale_erlang, size= 10 )} " )
2.8.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例 using `scipy.stats.erlang`) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats x_values_erlang = np.linspace( 0.01 , 15 , 500 )
# --- Case 1: Varying shape (k), fixed scale --- fig1, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) fixed_lambda_erl1 = 1.0 params_k_erlang1 = [ 1 , 2 , 5 , 10 ] colors1 = plt.cm.viridis(np.linspace( 0 , 1 , len(params_k_erlang1))) ax1.set_title( f'Erlang PDF (λ= {fixed_lambda_erl1} , varying k)' ) ax2.set_title( f'Erlang CDF (λ= {fixed_lambda_erl1} , varying k)' ) for i, k_val in enumerate(params_k_erlang1): pdf_values = stats.erlang.pdf(x_values_erlang, a=k_val, scale=( 1 /fixed_lambda_erl1)) ax1.plot(x_values_erlang, pdf_values, label= f'k= {k_val} ' , color=colors1[i]) cdf_values = stats.erlang.cdf(x_values_erlang, a=k_val, scale=( 1 /fixed_lambda_erl1)) ax2.plot(x_values_erlang, cdf_values, label= f'k= {k_val} ' , color=colors1[i]) ax1.set_xlabel( 'x' ); ax1.set_ylabel( 'f(x)' ); ax1.legend(); ax1.grid( True , alpha= 0.6 ); ax1.set_ylim(bottom= 0 ) ax2.set_xlabel( 'x' ); ax2.set_ylabel( 'F(x)' ); ax2.legend(); ax2.grid( True , alpha= 0.6 ); ax2.set_ylim(bottom= 0 ) fig1.tight_layout() plt.show() # --- Case 2: Fixed shape (k), varying rate (lambda) --- fig2, (ax3, ax4) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) fixed_k_erl2 = 3 params_lambda_erlang2 = [ 0.5 , 1.0 , 2.0 ] colors2 = [ 'blue' , 'red' , 'green' ] ax3.set_title( f'Erlang PDF (k= {fixed_k_erl2} , varying λ)' ) ax4.set_title( f'Erlang CDF (k= {fixed_k_erl2} , varying λ)' ) for i, lambda_val in enumerate(params_lambda_erlang2): scale_val = 1 / lambda_val pdf_values = stats.erlang.pdf(x_values_erlang, a=fixed_k_erl2, scale=scale_val) ax3.plot(x_values_erlang, pdf_values, label= f'λ= {lambda_val} ' , color=colors2[i]) cdf_values = stats.erlang.cdf(x_values_erlang, a=fixed_k_erl2, scale=scale_val) ax4.plot(x_values_erlang, cdf_values, label= f'λ= {lambda_val} ' , color=colors2[i]) ax3.set_xlabel( 'x' ); ax3.set_ylabel( 'f(x)' ); ax3.legend(); ax3.grid( True , alpha= 0.6 ); ax3.set_ylim(bottom= 0 ) ax4.set_xlabel( 'x' ); ax4.set_ylabel(
'F(x)' ); ax4.legend(); ax4.grid( True , alpha= 0.6 ); ax4.set_ylim(bottom= 0 ) fig2.tight_layout() plt.show()
2.8.5 联系与延伸 爱尔朗分布是伽马分布中形状参数为整数的特例。当 时,爱尔朗分布
简化为指数分布 。随着 的增加,爱尔朗分布的形状从指数分布的单调递减变为具有明显峰值的钟形,并逐渐趋向对称。当
很大时,根据中心极限定理(因为爱尔朗变量是 个独立同分布指数变量之和),爱尔朗分布可以用正态分布 来近似。爱尔朗分布的 CDF 与泊松分布的 PMF/CDF 之间存在密切关系,这在排队论中有重要应用。
2.9 均匀分布 (X ~ Uniform(a, b)) 2.9.1 简介与用途 均匀分布(Uniform distribution),也称矩形分布,是一种简单的概率分布,其中所有等长度的子区间内的结果具有相同的概率。它由两个参数定义:下界
和上界 ,其中 。随机变量 在区间 内取任何值的概率密度是恒定的,而在该区间之外为零。
常见用途 :
随机数生成 :计算机生成其他分布的随机数时,通常以标准均匀分布
作为基础(例如通过逆变换法)。 无信息先验 :在贝叶斯统计中,当对某个参数的先验知识非常有限时,有时会使用均匀分布作为无信息或“平坦”先验(尽管这在某些情况下可能不合适或导致不当后验)。 模拟某些物理过程,例如一个圆盘上随机一点到圆心的距离的平方(经过变换后)。 2.9.2 数学性质 表 2.9:均匀分布性质总结
2.9.3 软件实现 (Python) scipy.stats.uniform
使用 loc
参数对应下界 , scale
参数对应区间的宽度 。因此,上界为 loc + scale
。
Python 实现代码 (PDF, CDF, RVS) import scipy.stats as stats # 参数设置 a_unif = 2 # 下界 a (scipy中的 loc) b_unif = 8 # 上界 b width_unif = b_unif - a_unif # 区间宽度 (scipy中的 scale) # 计算 PDF (例: x=5, 应该在 [a,b] 内) print( f"PDF at x=5 for Uniform( {a_unif} , {b_unif} ): {stats.uniform.pdf( 5 , loc=a_unif, scale=width_unif)} " ) # PDF at x=1 (应该在 [a,b] 外, PDF为0) print( f"PDF at x=1 for Uniform( {a_unif} ,
{b_unif} ): {stats.uniform.pdf( 1 , loc=a_unif, scale=width_unif)} " ) # 计算 CDF (例: x=6) print( f"CDF at x=6 for Uniform( {a_unif} , {b_unif} ): {stats.uniform.cdf( 6 , loc=a_unif, scale=width_unif)} " ) # 生成随机变量 (生成10个) print( f"Random variables for Uniform( {a_unif} , {b_unif} ) (10 samples): {stats.uniform.rvs(loc=a_unif, scale=width_unif, size= 10 )} " )
2.9.4 分布函数绘图 (Python) Python 绘图代码 (PDF 与 CDF 示例) import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats # 定义参数 params_uniform = [( 0 , 1 ), ( -1 , 1 ), ( 2 , 5 )] all_a = [p[ 0 ] for p in params_uniform] all_b = [p[ 1 ] for p in params_uniform] x_values_unif = np.linspace(min(all_a) - 1 , max(all_b) + 1 , 500 ) colors = [ 'blue' , 'red' , 'green' ] fig, (ax1, ax2) = plt.subplots( 1 , 2 , figsize=( 14 , 5 )) # --- 绘制 PDF --- for i, (a_val, b_val) in enumerate(params_uniform): width_val = b_val - a_val pdf_values = stats.uniform.pdf(x_values_unif, loc=a_val, scale=width_val) ax1.plot(x_values_unif, pdf_values, label= f'U( {a_val} , {b_val} )' , color=colors[i]) ax1.set_xlabel( 'x' ) ax1.set_ylabel( 'f(x)' ) ax1.set_title( 'Uniform Distribution PDF' ) ax1.legend() ax1.grid( True , linestyle= '--' , alpha= 0.6 ) ax1.set_ylim(bottom= 0 , top= 1.1 ) # --- 绘制 CDF ---
for i, (a_val, b_val) in enumerate(params_uniform): width_val = b_val - a_val cdf_values = stats.uniform.cdf(x_values_unif, loc=a_val, scale=width_val) ax2.plot(x_values_unif, cdf_values, label= f'U( {a_val} , {b_val} )' , color=colors[i]) ax2.set_xlabel( 'x' ) ax2.set_ylabel( 'F(x) = P(X <= x)' ) ax2.set_title( 'Uniform Distribution CDF' ) ax2.legend() ax2.grid( True , linestyle= '--' , alpha= 0.6 ) ax2.set_ylim(bottom= 0 ) plt.tight_layout() plt.show()
2.9.5 联系与延伸 标准均匀分布
是许多随机数生成算法的核心。逆变换法 (Inverse Transform Sampling) 是一种重要的技术,它利用均匀分布的 CDF 来从任何其他概率分布生成随机数,前提是该分布的 CDF 的逆函数已知或易于计算。在给定区间上,均匀分布是具有最大熵的连续分布,这意味着在仅知道变量取值范围的情况下,均匀分布是最不带有额外假设或信息的选择。
3. 参考资料 Pishro-Nik, H. (2014). Introduction to Probability, Statistics, and Random Processes . Kappa Research LLC. Available at: https://www.probabilitycourse.com. Casella, G., & Berger, R. L. (2002). Statistical Inference . Duxbury Press. Hogg, R. V., McKean, J., & Craig, A. T. (2013). Introduction to Mathematical Statistics (7th ed.). Pearson. Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., ... & van Mulbregt, P. (2020). SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python. Nature Methods , 17(3), 261–272. (SciPy Documentation: https://docs.scipy.org/doc/scipy/reference/stats.html) Matplotlib Development Team. (2023). Matplotlib Documentation . Available at: https://matplotlib.org/stable/contents.html Harris, C.R., Millman, K.J., van der Walt, S.J. et al. (2020). Array programming with NumPy. Nature 585, 357–362. (NumPy Documentation: https://numpy.org/doc/)
4. 相关推文 Note:产生如下推文列表的 Stata 命令为: lianxh 统计证据 独立与不相关 分布 经济显著性 如何检查 , md nocat
安装最新版 lianxh
命令: ssc install lianxh, replace
侯新烁, 连玉君, 2020, 快速呈现常用分布临界值表, 连享会 No.362. 修博文, 2024, 你的研究是可信的吗?本文将教你如何检查, 连享会 No.1342. 刘潍嘉, 2024, 偏态分布数据的回归模型选择, 连享会 No.1405.
吕卓阳, 2021, Stata 论文复现:Temperature Shocks and Economic Growth, 连享会 No.730. 崔颖, 2020, Stata:用负二项分布预测蚊子存活率, 连享会 No.399. 汪京, 2024, multihistogram-多变量直方图, 连享会 No.1457. 王恩泽, 2020, reldist-相对分布:分布差异分析和检验, 连享会 No.441. 罗丹, 2025, 不要“拍脑袋”建模:如何有效连接统计证据与理论解释, 连享会 No.1590. 苗妙, 2022, 抛弃p值?经济显著性与统计显著性, 连享会 No.990. 连玉君, 2022, Stata绘图:唯美的函数图-自定义水平附加线和竖直附加线, 连享会 No.1064. 陈勇吏, 2020, Stata程序:Monte-Carlo-模拟之产生符合特定分布的随机数, 连享会 No.343. 陈卓然, 2022, Stata:多元正态t截断分布的命令, 连享会 No.883. 陈卓然, 2022, Stata:局部回归分布估计量-lpdensity, 连享会 No.850. 陈卓然, 2022, Stata:自回归分布滞后模型简介 (ARDL), 连享会 No.999. 陈治中, 2020, 品头论足-distcomp:组间分布差异检验, 连享会 No.488. 雷诺, 2023, 因果推断:傻傻分不清-独立与不相关等价吗?, 连享会 No.1274. 🍓 课程推荐:连享会:2025社会网络分析·线上 嘉宾:杨张博,西安交通大学 时间:2025 年 7 月 30-31 日 咨询:王老师 18903405450(微信)
连享会微信小店上线啦! Note:扫一扫进入“连享会微信小店”,你想学的课程在这里······
New! Stata 搜索神器: lianxh
和 songbl
GIF 动图介绍 搜: 推文、数据分享、期刊论文、重现代码 …… 👉 安装: . ssc install lianxh
. ssc install songbl
👉 使用: . lianxh DID 倍分法
. songbl all
🍏 关于我们 直通车: 👉【 百度一下: 连享会 】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。