pymc.ZeroSumNormal#

class pymc.ZeroSumNormal(*args, zerosum_axes=None, n_zerosum_axes=None, support_shape=None, dims=None, **kwargs)[源代码]#

ZeroSumNormal 分布,即正态分布,其中一个或多个轴被约束为总和为零。默认情况下,最后一个轴被约束为总和为零。更多详情请参见 n_zerosum_axes 关键字参数。

\[\begin{split}\begin{align*} ZSN(\sigma) = N \Big( 0, \sigma^2 (I - \tfrac{1}{n}J) \Big) \\ \text{其中} \ ~ J_{ij} = 1 \ ~ \text{且} \\ n = \text{零和轴的数量} \end{align*}\end{split}\]
参数:
sigma : 类似张量floattensor_like of float

尺度参数(sigma > 0)。它实际上是底层无约束正态分布的标准差。如果未指定,默认为1。目前,sigma 必须是一个标量,以确保零和约束。

n_zerosum_axes: int, 默认为 1

从最右边的位置开始,强制执行零和约束的轴的数量。默认为1,即最右边的轴。

zerosum_axes: int, 已弃用,请使用其继任者 n_zerosum_axes
dims: 字符串序列, 可选

分布的维度名称。与其他 PyMC 分布的工作方式相同。如果未传递 shape,则这是必要的。

shape: 整数的元组, 可选

分布的形状。与其他 PyMC 分布的工作方式相同。如果未传递 dimsobserved,则这是必要的。

警告

sigma 必须是一个标量,以确保零和约束。未来版本可能会增加指定 sigma 向量的功能。

n_zerosum_axes 必须大于 0。如果你想使用 n_zerosum_axes = 0 的行为,只需使用 pm.Normal

示例

定义一个 ZeroSumNormal 变量,默认情况下 sigma=1n_zerosum_axes=1:

COORDS = {
    "regions": ["a", "b", "c"],
    "answers": ["yes", "no", "whatever", "don't understand question"],
}
with pm.Model(coords=COORDS) as m:
    # the zero sum axis will be 'answers'
    v = pm.ZeroSumNormal("v", dims=("regions", "answers"))

with pm.Model(coords=COORDS) as m:
    # the zero sum axes will be 'answers' and 'regions'
    v = pm.ZeroSumNormal("v", dims=("regions", "answers"), n_zerosum_axes=2)

with pm.Model(coords=COORDS) as m:
    # the zero sum axes will be the last two
    v = pm.ZeroSumNormal("v", shape=(3, 4, 5), n_zerosum_axes=2)

方法

ZeroSumNormal.dist([sigma, n_zerosum_axes, ...])

创建一个与 cls 分布相对应的张量变量。