概率分布(Probability Distributions)
概率分布(Probability Distributions)是数学统计学中的一个重要概念,用于描述随机变量的取值规律。根据随机变量的类型,概率分布可以分为离散概率分布和连续概率分布。
离散概率分布
离散概率分布适用于取值为有限个或可数无限个的随机变量。常见的离散概率分布包括:
伯努利分布(Bernoulli Distribution)
- 两种可能的结果:伯努利试验只有两种可能的结果,通常称为“成功”(1)和“失败”(0)。
import scipy.stats as stats
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 生成10000个伯努利随机变量,成功概率为0.3,设置随机种子为0
binomial_samples = stats.bernoulli.rvs(p=0.3, size=10000, random_state=0)
# 绘制直方图,设置直方图的柱宽为0.8,柱子的对齐方式为中间对齐
plt.hist(binomial_samples, bins=[-0.5, 0.5, 1.5], rwidth=0.8, align='mid')
# 设置x轴的刻度标签为0和1
plt.xticks([0, 1])
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram of Bernoulli Samples')
plt.show()
二项分布(The Binomial distribution)
- 试验之间的相互独立:每次试验的结果不会影响其他试验的结果。
- 每次试验只有两个可能的结果:通常是“失败”和“成功”两种结果。在描述中,成功概率为p,失败概率为1-p。
import scipy.stats as stats
import matplotlib.pyplot as plt
# 设置二项分布的参数
n = 10 # 试验次数
p = 0.5 # 每次试验成功的概率
# 生成100个二项分布随机变量
binomial_samples = stats.binom.rvs(n=n, p=p, size=100)
# 打印前10个随机变量
print("First 10 Binomial samples:", binomial_samples[:10])
# 绘制直方图
plt.hist(binomial_samples, bins=range(n+2), rwidth=0.8, align='left')
plt.xlabel('Number of Successes')
plt.ylabel('Frequency')
plt.title('Histogram of Binomial Samples')
plt.show()
泊松分布(Poisson Distribution)
- 事件彼此独立:一个事件的发生不会影响另一个事件发生的概率。
- 两个事件不能同时发生:可以认为事件是逐个发生的。
- 事件发生的平均速率是常数:在任何给定的时间间隔内,事件发生的平均速率是固定的。
import scipy.stats as stats
import matplotlib.pyplot as plt
# 设置泊松分布的参数
lam = 5 # 单位时间内事件发生的平均次数
# 生成100个泊松分布随机变量
poisson_samples = stats.poisson.rvs(mu=lam, size=100)
# 打印前10个随机变量
print("First 10 Poisson samples:", poisson_samples[:10])
# 绘制直方图
plt.hist(poisson_samples, bins=range(min(poisson_samples), max(poisson_samples) + 2), rwidth=0.8, align='left')
plt.xlabel('Number of Events')
plt.ylabel('Frequency')
plt.title('Histogram of Poisson Samples')
plt.show()
连续概率分布
连续概率分布适用于取值为连续的随机变量。常见的连续概率分布包括:
均匀分布(Uniform Distribution)
- 均匀概率:均匀分布描述了在某个区间内,所有值出现的概率是均匀的,即相等的。
- 区间:由两个参数a和b定义,表示变量X的取值范围为[a, b]。
import scipy.stats as stats
import matplotlib.pyplot as plt
# 设置均匀分布的参数
a = 0 # 下界
b = 10 # 上界
# 生成100个均匀分布随机变量
uniform_samples = stats.uniform.rvs(loc=a, scale=b-a, size=100)
# 打印前10个随机变量
print("First 10 Uniform samples:", uniform_samples[:10])
# 绘制直方图
plt.hist(uniform_samples, bins=10, rwidth=0.8, align='mid')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram of Uniform Samples')
plt.show()
正态分布(Normal Distribution)
也被称为高斯分布(Gaussian Distribution)
- 对称性和钟形曲线:正态分布的概率密度函数呈对称的钟形曲线形状,以均值为中心,两侧对称下降。
- 均值和标准差:由两个参数μ(均值)和σ(标准差)定义,决定了分布的中心位置和分布的宽度。
import pymc as pm
import matplotlib.pyplot as plt
with pm.Model() as model:
y = pm.Normal.dist()
samples = pm.draw(y, draws=1000)
plt.plot(samples)
import scipy.stats as stats
import seaborn as sns
normal_dist = stats.norm.rvs(size=10000,loc=200,scale=9,random_state=0)
pd.Series(normal_dist).plot(kind='hist',bins=100)
for mean in range(400,900,200):
normal_dist = stats.norm.rvs(size=10000,loc=mean,scale=90,random_state=0)
pd.Series(normal_dist).plot(kind='hist',bins=100,label="Mean = {:f}".format(mean))
指数分布(Exponential Distribution)
- 事件发生的时间间隔:指数分布描述了两个连续事件发生之间的时间间隔。
- 平均发生率:由参数λ定义,表示单位时间内事件发生的平均次数。
import scipy.stats as stats
import seaborn as sns
import pandas as pd
# 指数分布
exponential_data = stats.expon.rvs(scale=1, size=10000, random_state=0)
pd.Series(exponential_data).plot(kind='hist', bins=30, density=True)
t分布(t-Distribution)
- 小样本推断:当样本量较小或总体标准差未知时,t分布用于估计正态总体的均值。
- 自由度:由自由度参数df定义,自由度越大,t分布越接近正态分布。
import scipy.stats as stats
import seaborn as sns
import pandas as pd
# t分布
t_data = stats.t.rvs(df=10, size=10000, random_state=0)
pd.Series(t_data).plot(kind='hist', bins=30, density=True)
卡方分布(Chi-Squared Distribution)
- 假设检验:卡方分布常用于检验观察频数与期望频数之间的差异,如卡方检验。
- 自由度:由自由度参数df定义,决定了分布的形状。
import scipy.stats as stats
import seaborn as sns
import pandas as pd
# 卡方分布
chi_squared_data = stats.chi2.rvs(df=4, size=10000, random_state=0)
pd.Series(chi_squared_data).plot(kind='hist', bins=30, density=True)
伽玛分布(Gamma Distribution):
- 总等待时间:伽玛分布用于描述多个指数分布事件发生的总等待时间。
- 形状参数和比例参数:由形状参数α(或k)和比例参数β(或θ)定义,这两个参数决定了分布的形状和尺度。
import scipy.stats as stats
import matplotlib.pyplot as plt
# 设置伽玛分布的参数
alpha = 2 # 形状参数
beta = 3 # 比例参数
# 生成10000个伽玛分布随机变量
gamma_samples = stats.gamma.rvs(a=alpha, scale=1/beta, size=10000, random_state=0)
# 绘制直方图
plt.hist(gamma_samples, bins=30, density=True)
plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Histogram of Gamma Samples')
plt.show()
随机游走/布朗运动(Random Walk/Brownian Motion):
- 连续随机过程:布朗运动是一种连续时间内连续状态变量的随机过程,用于描述粒子在液体或气体中的随机运动。
import numpy as np
import matplotlib.pyplot as plt
# 设置参数
n_steps = 1000 # 步数
delta_t = 1 # 时间间隔
sigma = 1 # 标准差
# 生成随机游走
steps = np.random.normal(loc=0, scale=sigma * np.sqrt(delta_t), size=n_steps)
brownian_motion = np.cumsum(steps)
# 绘制随机游走图
plt.plot(brownian_motion)
plt.xlabel('Time')
plt.ylabel('Position')
plt.title('Random Walk / Brownian Motion')
plt.show()
分布变换 (Distribution Transformations)
对数变换 (Log Transform):
将数据通过自然对数变换,常用于处理右偏分布,使其更接近正态分布。
平方根变换 (Square Root Transform):
对数据进行平方根变换,通常用于处理计数数据的偏态分布。
Box-Cox变换 (Box-Cox Transform):
一种更广义的数据变换方法,包括对数变换和平方根变换,用于使数据更接近正态分布
pdf,cdf,ppf
PDF (Probability Density Function)
概率密度函数(PDF)描述了连续随机变量在某个特定值或某个区间内取值的概率密度。对于连续随机变量,PDF不直接给出概率,而是表示概率的密度。
CDF (Cumulative Distribution Function)
累积分布函数(CDF)描述了随机变量取值小于或等于某个特定值的概率。对于连续随机变量,CDF是PDF的积分。
PPF (Percent Point Function)
百分点函数(PPF),也称为分位数函数或逆累积分布函数,是CDF的逆函数。PPF给出了使CDF达到某个特定概率值的随机变量的值。