使用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)。最后,我们可以将样本和对应的分布函数进行可视化展示。
