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

如何在Python中生成零均值单位方差的Burr-Type XII分布样本?

生成零均值、单位方差的Burr-Type XII分布样本

核心思路

Burr-Type XII分布(scipy.stats.burr12)包含两个形状参数c、d,以及位置参数loc、尺度参数scale。要得到零均值、单位方差的样本,有两种可靠方法:直接通过参数调整使分布本身满足要求,或生成原生分布样本后标准化。关键前提是:必须选择c、d使得分布的均值和方差存在(要求d > 2/c,否则方差不存在)。


方法一:直接通过loc和scale参数调整

  1. 选择合法的形状参数c、d
    需满足d > 2/c,比如选c=2、d=3(3 > 2/2=1,满足方差存在条件)。

  2. 计算原生分布(loc=0, scale=1)的均值和方差
    使用burr12.stats()获取理论均值mu0和方差var0:

    from scipy.stats import burr12
    import numpy as np
    
    c = 2
    d = 3
    mu0, var0 = burr12.stats(c, d, moments='mv')
    sigma0 = np.sqrt(var0)
    
  3. 计算目标loc和scale参数
    设目标分布为X = loc + scale * Z(Z是原生Burr12样本),要满足E[X]=0、Var[X]=1,推导得:

    loc = -mu0 / sigma0
    scale = 1 / sigma0
    
  4. 生成符合要求的样本

    samples = burr12.rvs(c, d, loc=loc, scale=scale, size=10000)
    
  5. 验证结果
    查看样本的均值和方差(因随机性会接近0和1):

    print(f"样本均值:{np.mean(samples):.4f}")
    print(f"样本方差:{np.var(samples):.4f}")
    

方法二:生成原生样本后标准化

你的思路是对的,但1000个样本量较小,统计量波动大,导致结果看起来偏离。只需增大样本量,同时确保c、d满足方差存在条件:

c = 1
d = 2.1  # d=2.1 > 2/1=2,满足方差存在
mu0, var0 = burr12.stats(c, d, moments='mv')
sigma0 = np.sqrt(var0)

# 生成原生样本并标准化
raw_samples = burr12.rvs(c, d, size=10000)
standardized_samples = (raw_samples - mu0) / sigma0

# 验证
print(f"标准化样本均值:{np.mean(standardized_samples):.4f}")
print(f"标准化样本方差:{np.var(standardized_samples):.4f}")

常见问题说明

  • 如果选择的c、d不满足d > 2/c,burr12.stats()会返回inf,表示方差不存在,无法生成单位方差样本。
  • 小样本(如1000个)的统计量会有随机波动,建议使用至少5000个样本观察分布特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:36:17