为何用pymc.Uniform("stds",0,100)计算的均匀分布标准差每次不同?
关于PyMC Uniform分布与标准差的困惑解答
嘿,我来帮你理清这个混淆点~
首先,先明确你提到的两个核心概念的区别:
- 你说的
(100-0)/(2√3)是**[0,100]区间均匀分布本身的理论标准差**,这个确实是固定值(约28.87),这部分你的理解完全正确——当一个随机变量严格服从[a,b]均匀分布时,它的标准差是确定的,不会变化。
那pymc.Uniform("stds",0,100)到底是干啥的?
它根本不是在计算均匀分布的标准差,而是定义了一个取值范围在0到100之间的均匀先验分布,用来表示你对某个未知参数(这里你命名为stds,应该是你模型里的某个标准差参数)的不确定性。
举个例子:如果你在做贝叶斯建模,假设某个正态分布的标准差你不知道具体值,只知道它肯定在0到100之间,而且这个区间里每个值的可能性都相等,那你就用pymc.Uniform("stds",0,100)来描述这个参数的先验分布。这时候每次运行得到的stds结果不同,是因为它在按照你定义的均匀分布进行随机采样——这是贝叶斯建模里的正常行为,毕竟先验分布就是用来表达参数的不确定性的。
额外补充:和std相关的PyMC用法
- 如果想获取均匀分布的理论标准差(固定值),可以直接调用分布的
std()属性:import pymc as pm import numpy as np # 获取[0,100]均匀分布的理论标准差 uniform_theory_std = pm.Uniform.dist(lower=0, upper=100).std() print(uniform_theory_std) # 输出约28.8675 - 如果你的需求是把均匀分布的理论标准差作为模型里的固定参数,那直接计算后赋值即可,不用用
pm.Uniform来定义随机变量:fixed_std = 100 / (2 * np.sqrt(3)) # 之后在模型里直接用fixed_std这个固定值
内容的提问来源于stack exchange,提问作者kiitosu
相关产品推荐
相关产品推荐

