我建议您使用原始方法评估条件和平均(基本上是使用经验 cdf)而不是使用 KDE。
我知道没有等价物,可能也是因为 numpy 中也没有等价物(它同时具有quantile
and percentile
)。scipy 中有一个:scipy.stats.percentileofscore,但我也不推荐它,除非您正在处理离散数据并且需要参数来评估关系(即您是否会关心或注意到使用或kind
之间的任何区别?)。这个 scipy 函数也只需要一个标量作为值来评估 ecdf。<
<=
因此,我的建议是坚持使用您的方法,但对实现进行一些修改,因此它在同时评估多个值以及不减少所有维度时也适用:
import arviz; import xarray
x = xarray.DataArray([-.1, 0, .1]) # skip that if working with scalars
post = arviz.load_arviz_data("rugby").posterior
prob_x_lt_zero = (post.atts < x).mean(("chain", "draw"))
它返回我们在所有 6 个团队中评估的 3 个值中的每一个的概率。
<xarray.DataArray (team: 6, dim_0: 3)>
array([[0. , 0. , 0.0485],
[0.347 , 0.975 , 1. ],
[0. , 0.004 , 0.4245],
[0.64 , 0.994 , 1. ],
[1. , 1. , 1. ],
[0. , 0. , 0. ]])
Coordinates:
* team (team) object 'Wales' 'France' 'Ireland' ... 'Italy' 'England'
Dimensions without coordinates: dim_0