Python 负指数分布拟合

在统计学和概率论中,负指数分布(Negative Exponential Distribution)是一种重要的概率分布,常用于建模事件之间的时间间隔,例如客户到达、机器故障等。本文将介绍如何在Python中使用负指数分布进行数据拟合,并给出代码示例。

负指数分布简介

负指数分布是一种具有单一参数(通常为速率λ)的连续概率分布,其概率密度函数(PDF)表达式为:

[ f(x; \lambda) = \lambda e^{-\lambda x}, \quad x \geq 0 ]

其中,λ是速率参数,表示单位时间内事件发生的预期次数。与普通的指数分布不同,负指数分布有时也被称为“生存分布”,通常用于描述等待时间或生命周期等问题。

数据生成与可视化

在开始拟合之前,首先生成一组符合负指数分布的随机数据。我们将使用Numpy库中的numpy.random.exponential函数来生成数据,并使用Matplotlib库进行可视化。

import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子以便重现
np.random.seed(0)

# 生成符合负指数分布的随机数据
lambda_param = 0.5  # 速率参数
data = np.random.exponential(1/lambda_param, 1000)  # 生成1000个样本

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')

# 绘制理论的负指数分布曲线
x = np.linspace(0, max(data), 1000)
pdf = lambda_param * np.exp(-lambda_param * x)
plt.plot(x, pdf, 'r', linewidth=2)

plt.title('Negative Exponential Distribution Fit')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.show()

在上面的代码中,首先导入了必要的库,并生成符合负指数分布的随机数据。通过使用直方图和理论概率密度函数进行可视化,我们直观地看到了生成的数据和负指数分布的关系。

参数估计与数据拟合

接下来,我们需要估计生成的数据的速率参数λ。可以使用SciPy库中的最大似然估计(MLE)方法来实现。

from scipy.stats import expon

# 使用最大似然估计计算速率参数λ
lambda_est = 1 / np.mean(data)
print(f'Estimated lambda: {lambda_est:.4f}')

在这个例子中,我们通过计算数据的均值来估计参数λ。这是因为在负指数分布中,均值等于1/λ。

拟合结果检验

为了检验我们的拟合结果,我们可以使用QQ图(Quantile-Quantile Plot)来比较样本分位数与理论分位数。QQ图是一个非常有用的工具,可以用于检测样本数据是否符合某种假设分布。

import scipy.stats as stats

# 绘制QQ图
stats.probplot(data, dist="expon", sparams=(1/lambda_est,), plot=plt)
plt.title('QQ Plot')
plt.show()

在生成的QQ图中,如果数据点沿着对角线分布,则说明我们的样本数据符合负指数分布,否则可能存在其他分布特征。

模拟与推断

为了进一步说明负指数分布的应用,假设我们正在进行一个模拟实验,统计顾客到达超市的时间间隔。可以设置一个阈值来判断顾客何时到达并计算相关时间间隔。

# 模拟顾客到达过程
arrival_times = np.cumsum(data)  # 累计到达时间
print(arrival_times[:10])  # 打印前10个顾客到达的时间

事件序列图

下图表示顾客到达事件的序列。我们使用mermaid语法来展示这一过程。

sequenceDiagram
    participant Customers as 顾客
    participant Store as 超市
    Customers->>Store: 到达请求
    Store-->>Customers: 允许进入
    Customers->>Store: 结束

在这个序列图中,顾客依次到达超市并请求进入,超市则允许他们进入,形成一个简单的交互过程。

结论

在本文中,我们探讨了如何在Python中进行负指数分布拟合的过程。通过数据生成、参数估计、可视化以及拟合结果检验,我们展示了负指数分布的基本概念和应用。使用Python的Numpy、Matplotlib和SciPy库,可以高效地完成这些任务。

负指数分布在许多实际场景中都具有重要意义,了解其性质和应用能够帮助我们更好地分析相关数据。希望通过本文的介绍,读者能够掌握负指数分布的基本理论与应用,并能在实际工作中应用这一知识。