欢迎访问宙启技术站
智能推送

如何使用Python的sf()函数进行概率分布的拟合

发布时间:2024-01-13 09:55:32

在Python中,可以使用SciPy库来进行概率分布的拟合。该库提供了一个sf()函数(survival function)来计算概率密度函数(Probability Density Function,PDF)的累积分布函数(Cumulative Distribution Function,CDF)的补函数。

首先,确保已经安装了SciPy库。如果没有安装,可以使用以下命令来安装:

pip install scipy

接下来,导入必要的库和模块:

from scipy.stats import *
import matplotlib.pyplot as plt

假设我们有一组观测数据,表示某个随机变量的取值。我们希望拟合一个概率分布来描述这些观测数据。例如,我们有以下观测数据:

observed_data = [1.7, 2.2, 2.5, 3.1, 3.5, 3.6, 4.8, 5.2, 5.7, 6.1]

现在,我们将使用sf()函数来计算给定观测数据的概率密度函数的补函数。我们将使用正态分布(Normal Distribution)作为例子。可以使用以下代码:

# 使用正态分布拟合观测数据
params = norm.fit(observed_data)
# 使用拟合的参数创建正态分布对象
dist = norm(*params)
# 计算概率密度函数的补函数
sf_values = dist.sf(observed_data)

在这个例子中,params变量保存了拟合得到的正态分布的参数,dist变量保存了创建的正态分布对象,sf_values变量保存了通过sf()函数计算得到的正态分布的概率密度函数的补函数的值。

可以使用以下代码来绘制拟合的概率分布和观测数据的图表:

# 绘制拟合的概率分布
x = np.linspace(min(observed_data), max(observed_data), 100)
plt.plot(x, dist.pdf(x), label='Fitted PDF')
# 绘制观测数据的直方图
plt.hist(observed_data, bins=10, density=True, alpha=0.5, label='Observations')
plt.xlabel('Value')
plt.ylabel('Probability')
plt.legend()
plt.show()

这段代码中,我们使用np.linspace()函数创建了一系列的横轴值,然后使用dist.pdf()函数计算对应的纵轴值,绘制出拟合的概率密度函数。然后,使用plt.hist()函数绘制观测数据的直方图。最后,使用plt.xlabel()plt.ylabel()函数来设置横轴和纵轴的标签,使用plt.legend()函数在图表中添加图例,使用plt.show()函数显示图表。

将上述代码整合起来,以下是完整的实例代码:

from scipy.stats import *
import matplotlib.pyplot as plt
import numpy as np

# 观测数据
observed_data = [1.7, 2.2, 2.5, 3.1, 3.5, 3.6, 4.8, 5.2, 5.7, 6.1]

# 使用正态分布拟合观测数据
params = norm.fit(observed_data)
# 使用拟合的参数创建正态分布对象
dist = norm(*params)
# 计算概率密度函数的补函数
sf_values = dist.sf(observed_data)

# 绘制拟合的概率分布和观测数据的图表
x = np.linspace(min(observed_data), max(observed_data), 100)
plt.plot(x, dist.pdf(x), label='Fitted PDF')
plt.hist(observed_data, bins=10, density=True, alpha=0.5, label='Observations')
plt.xlabel('Value')
plt.ylabel('Probability')
plt.legend()
plt.show()

运行以上代码,将会得到一个图表,其中包含拟合的概率分布和观测数据的直方图。

请注意,我们在这个例子中使用了正态分布作为示例,但实际上可以使用sf()函数来拟合其他的概率分布,也可以使用其他的拟合函数例如fit()expon.fit()等。拟合的概率分布和观测数据的图表将根据使用的拟合函数和概率分布类型而有所不同。

以上就是使用Python的sf()函数进行概率分布的拟合的详细介绍和示例。