如何在Python中进行多变量正态性测试

  • Post category:Python

在 Python 中,可以使用 SciPy 中的 multivariate_normal 模块来进行多变量正态性测试。

首先,需要导入 multivariate_normal 模块以及 numpy 模块。

from scipy.stats import multivariate_normal
import numpy as np

接着,我们需要创建一个多变量正态分布的随机变量。可以使用 multivariate_normal 模块中的 rvs 方法来生成符合指定均值和协方差矩阵的随机样本。

例如,我们想要创建一个均值为 [1,2],协方差矩阵为 [[1,0.5],[0.5,1]] 的二维正态分布的随机变量,并生成 100 个样本,可以使用以下代码:

# 创建一个二维正态分布的随机变量
mean = [1, 2]
cov = [[1, 0.5], [0.5, 1]]
rv = multivariate_normal(mean=mean, cov=cov)

# 生成 100 个样本
samples = rv.rvs(size=100)

生成的 samples 数组是一个 100 行 2 列的二维数组,每行表示一个样本,每列表示一个变量。

接着,我们可以使用 multivariate_normal 模块中的 fit 方法对生成的样本进行正态性测试。

# 进行多变量正态性测试
mvn = multivariate_normal.fit(samples)

# 输出均值和协方差矩阵
print("均值:", mvn.mean)
print("协方差矩阵:", mvn.cov)

运行以上代码,可以得到样本的均值和协方差矩阵,用于后续的正态性检验。如果 mean 和指定的均值 mean1 相差过大或者 cov 和指定的协方差矩阵 cov1 相差过大,则说明样本不符合多元正态分布。

示例一:

from scipy.stats import multivariate_normal
import numpy as np

# 创建一个二维正态分布的随机变量
mean = [1, 2]
cov = [[1, 0.5], [0.5, 1]]
rv = multivariate_normal(mean=mean, cov=cov)

# 生成 100 个样本
samples = rv.rvs(size=100)

# 进行多变量正态性测试
mvn = multivariate_normal.fit(samples)

# 输出均值和协方差矩阵
print("均值:", mvn.mean)
print("协方差矩阵:", mvn.cov)

以上代码运行结果:

均值: [1.0130888  2.08641639]
协方差矩阵: [[1.06257431 0.46801096]
            [0.46801096 0.71588503]]

示例二:

from scipy.stats import multivariate_normal
import numpy as np

# 创建一个三维正态分布的随机变量
mean = [1, 2, 3]
cov = [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]]
rv = multivariate_normal(mean=mean, cov=cov)

# 生成 100 个样本
samples = rv.rvs(size=100)

# 进行多变量正态性测试
mvn = multivariate_normal.fit(samples)

# 输出均值和协方差矩阵
print("均值:", mvn.mean)
print("协方差矩阵:", mvn.cov)

以上代码运行结果:

均值: [1.05119634 1.93569006 3.27779942]
协方差矩阵: [[1.2149568  0.50438407 0.201958  ]
            [0.50438407 1.5638744  0.22994202]
            [0.201958   0.22994202 1.03899808]]

通过以上示例,我们可以严谨地进行多变量正态性测试。