pymc.OrderedMultinomial#

class pymc.OrderedMultinomial(name, *args, compute_p=True, **kwargs)[源代码]#

有序多项分布的包装类。

适用于对有序数据的回归分析,其值范围从1到K,作为某些预测变量 \(\eta\) 的函数,但这些数据在试验中是 _聚合_ 的,类似于多项观测(与 pm.OrderedLogistic 不同,后者仅接受以 _分散_ 格式表示的有序数据,如分类观测)。分割点 \(c\) 决定了 \(\eta\) 的哪些范围映射到K个观测到的因变量中的哪一个。分割点的数量为K - 1。建议将分割点约束为有序。

\[\begin{split}f(k \mid \eta, c) = \left\{ \begin{array}{l} 1 - \text{logit}^{-1}(\eta - c_1) \,, \text{如果 } k = 0 \\ \text{logit}^{-1}(\eta - c_{k - 1}) - \text{logit}^{-1}(\eta - c_{k}) \,, \text{如果 } 0 < k < K \\ \text{logit}^{-1}(\eta - c_{K - 1}) \,, \text{如果 } k = K \\ \end{array} \right.\end{split}\]
参数:
eta : 类似张量floattensor_like of float

预测器。

cutpoints : 类似张量floattensor_like of float

分割点数组的长度为 K - 1,用于将 \(\eta\) 分割成多个区间。不要显式地将 \(c\) 的第一个和最后一个元素设置为负无穷和正无穷。

n : 类似张量intpython:int 的 tensor_like

多项试验的总次数。

compute_p : 布尔值,默认=Truebool, 默认=True

是否基于切点值计算并存储在跟踪中每个类别的推断概率。默认为 True。如果对内存使用有兴趣,可能需要禁用此功能。

示例

# Generate data for a simple 1 dimensional example problem
true_cum_p = np.array([0.1, 0.15, 0.25, 0.50, 0.65, 0.90, 1.0])
true_p = np.hstack([true_cum_p[0], true_cum_p[1:] - true_cum_p[:-1]])
fake_elections = np.random.multinomial(n=1_000, pvals=true_p, size=60)

# Ordered multinomial regression
with pm.Model() as model:
    cutpoints = pm.Normal(
        "cutpoints",
        mu=np.arange(6) - 2.5,
        sigma=1.5,
        initval=np.arange(6) - 2.5,
        transform=pm.distributions.transforms.ordered,
    )

    pm.OrderedMultinomial(
        "results",
        eta=0.0,
        cutpoints=cutpoints,
        n=fake_elections.sum(1),
        observed=fake_elections,
    )

    trace = pm.sample()

# Plot the results
arviz.plot_posterior(trace_12_4, var_names=["complete_p"], ref_val=list(true_p));

方法

OrderedMultinomial.dist(*args, **kwargs)