在 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]]
通过以上示例,我们可以严谨地进行多变量正态性测试。