You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中np.random.multinomial的size参数问题与协方差验证异常

多项式分布协方差实验差异问题解析

要验证多项式分布中X₁与X₂的协方差公式 cov(X₁,X₂) = -N*p₁*p₂,设置参数N=50,概率分布为[p₁=0.4, p₂=0.2, p₃=0.4],预期协方差为 -50*0.4*0.2 = -4。开展了两种实验:

  • 尝试A:使用np.random.multinomial(size=1000)生成样本,计算得到的协方差接近预期值-4;
  • 尝试B:逐行调用np.random.multinomial生成X₁、X₂、X₃,得到的协方差与预期差异极大。

核心差异:样本的关联性

尝试A的正确性

np.random.multinomial(N, p, size=1000) 会生成1000个独立完整的多项分布样本,每个样本是包含(X₁,X₂,X₃)的数组,且满足X₁+X₂+X₃=N。你计算的是这1000组同一次试验中产生的X₁和X₂的协方差——这完全符合多项式分布中X₁与X₂的定义:它们来自同一次N次独立试验的分类计数,总次数固定,一个类别计数增加必然挤压其他类别,因此呈现负相关,协方差接近-4。

尝试B的错误根源

你大概率是在逐行调用时,让X₁和X₂来自不同的多项试验。比如错误代码类似:

import numpy as np

N = 50
p = [0.4, 0.2, 0.4]
x1 = []
x2 = []

for _ in range(1000):
    # 每次单独生成X₁,来自一次独立试验
    x1.append(np.random.multinomial(N, p)[0])
    # 每次单独生成X₂,来自另一次独立试验
    x2.append(np.random.multinomial(N, p)[1])

# 计算的是独立变量的协方差,自然接近0
print(np.cov(x1, x2)[0,1])

这种情况下,X₁和X₂是来自两次完全独立的多项试验的变量,它们之间没有负相关约束,协方差会接近0,和预期值差异极大。

尝试B的修正方法

逐行生成时,必须保证X₁和X₂来自同一次多项试验,正确代码应该是:

import numpy as np

N = 50
p = [0.4, 0.2, 0.4]
x1 = []
x2 = []

for _ in range(1000):
    # 生成一个完整的多项样本,包含本次试验的X₁,X₂,X₃
    sample = np.random.multinomial(N, p)
    x1.append(sample[0])
    x2.append(sample[1])

# 此时计算的协方差会接近预期的-4
print(np.cov(x1, x2)[0,1])

内容的提问来源于stack exchange,提问作者Dreamer93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:11:05