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 : 类似张量 的
float
tensor_like offloat
预测器。
- cutpoints : 类似张量 的
float
tensor_like offloat
分割点数组的长度为 K - 1,用于将 \(\eta\) 分割成多个区间。不要显式地将 \(c\) 的第一个和最后一个元素设置为负无穷和正无穷。
- n : 类似张量 的
int
python:int 的 tensor_like 多项试验的总次数。
- compute_p : 布尔值,默认=Truebool, 默认=True
是否基于切点值计算并存储在跟踪中每个类别的推断概率。默认为 True。如果对内存使用有兴趣,可能需要禁用此功能。
- eta : 类似张量 的
示例
# 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)