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

使用scipy.stats.multivariate_normal进行多元正态分布的分布函数估计

发布时间:2023-12-17 11:42:30

scipy.stats.multivariate_normal是scipy库中用于生成多元正态分布的概率分布函数的模块,可以用于估计多元正态分布的概率密度函数(PDF)、累积分布函数(CDF),以及生成多元正态分布的随机变量。

下面将使用scipy.stats.multivariate_normal进行多元正态分布的分布函数估计,并给出一个实际的例子。

首先,我们需要导入相应的包:

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

然后,我们定义一个二维的正态分布:

# 定义均值和协方差矩阵
mean = [0, 0]
cov = [[1, 0], [0, 1]]

# 创建一个多元正态分布对象
mvn = multivariate_normal(mean=mean, cov=cov)

接着,我们可以使用定义好的多元正态分布对象进行一些操作。

1. 生成随机样本:

# 生成1000个样本
samples = mvn.rvs(size=1000)

2. 计算概率密度函数(PDF):

# 计算PDF
pdf = mvn.pdf(samples)

3. 计算累积分布函数(CDF):

# 计算CDF
cdf = mvn.cdf(samples)

最后,我们可以绘制生成的样本和其对应的概率密度函数(PDF)的等高线图,以及累积分布函数(CDF)的散点图。

# 绘制样本和PDF
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = mvn.pdf(np.dstack((X, Y)))
plt.contour(X, Y, Z, colors='r')

plt.scatter(samples[:, 0], samples[:, 1], s=5, alpha=0.5)
plt.xlim(-5, 5)
plt.ylim(-5, 5)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Samples and PDF')
plt.show()

# 绘制CDF
plt.scatter(samples[:, 0], samples[:, 1], c=cdf, s=5, alpha=0.5)
plt.xlim(-5, 5)
plt.ylim(-5, 5)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('CDF')
plt.colorbar(label='CDF value')
plt.show()

以上就是一个使用scipy.stats.multivariate_normal进行多元正态分布的分布函数估计的例子。通过该例子,我们可以生成多元正态分布的随机样本,并计算样本的概率密度函数(PDF)和累积分布函数(CDF)。最后,我们可以将样本和对应的分布函数进行可视化展示。