求助:生成零均值单位方差不相关标准正态随机向量协方差异常
问题分析与解决
你的代码问题出在用法错误,和随机变量的相关性无关——这些标准正态变量本身是不相关的,只是你没正确计算变量间的协方差。
核心错误说明
- 你两次调用
np.random.normal(0,1,size=17),生成的是两个独立的一维数组,而非包含17个变量的随机向量(需要用二维数组存储:每行是一个样本,每列是一个变量)。 np.cov接收一维数组时,会将其视为单个随机变量的17个观测值,计算的是这个变量的样本方差。标准正态分布的总体方差是1,样本方差会围绕1波动,你看到的0.9是正常的样本估计结果,和变量间的协方差无关。
正确实现代码
要验证17个不相关标准正态变量的协方差,需要生成足够多的样本,让协方差的样本估计接近理论值:
import numpy as np # 生成1000个样本,每个样本包含17个独立的标准正态变量 # 形状为(样本数, 变量数) random_data = np.random.normal(0, 1, size=(1000, 17)) # rowvar=False 指定每一列代表一个变量 cov_matrix = np.cov(random_data, rowvar=False) print(cov_matrix)
此时输出的协方差矩阵中:
- 对角线元素接近1(单个变量的样本方差)
- 非对角线元素接近0(变量间的协方差,符合不相关的预期)
补充说明
样本量越大,协方差矩阵的估计值会越接近理论上的单位矩阵(对角线为1,其余为0)。如果用极小的样本量(比如1个样本),协方差矩阵的估计会完全偏离理论值,这是样本统计量的固有特性。
内容的提问来源于stack exchange,提问作者user82523
相关产品推荐
相关产品推荐

