scipy.stats.sampling.FastGeneratorInversion.

evaluate_error#

FastGeneratorInversion.evaluate_error(size=100000, random_state=None, x_error=False)[source]#

评估反演的数值准确性(u 误差和 x 误差)。

参数:
sizeint,可选

估算误差的随机点的数量。默认值为 100000

random_state{None、int、numpy.random.Generator,

NumPy 随机数生成器或种子,用于生成基础的 NumPy 随机数生成器以生成均匀随机数流。如果 random_state 为 None,则使用 self.random_state。如果 random_state 为 int,则使用 np.random.default_rng(random_state)。如果 random_state 已为 GeneratorRandomState 实例,则使用该实例。

返回:
u_error, x_error浮点值元组

随机变量的 NumPy 数组。

注意

反向分布函数 ppf 的数值精度由 u-error 控制。计算如下: max |u - CDF(PPF(u))|,其中 max 取 [0,1] 中的一个size随机点。 random_state 确定随机样本。请注意,如果 ppf 是精确的,则 u-error 将为零。

x 错误测量精确 PPF 和 ppf 之间的直线距离。如果 x_error 设置为 True`, it is computed as the maximum of the minimum of the relative and absolute x-error: ``max(min(x_error_abs[i], x_error_rel[i])),其中 x_error_abs[i] = |PPF(u[i]) - PPF_fast(u[i])|, x_error_rel[i] = max |(PPF(u[i]) - PPF_fast(u[i])) / PPF(u[i])|。请注意,如果 PPF(u) 接近零或非常大,那么考虑相对 x 错误非常重要。

默认情况下,仅评估 u 错误,并且 x 错误设置为 np.nan。如果 PPF 的实现很慢,请注意 x 错误的评估将会非常慢。

有关这些误差测量的更多信息,请参见 [1]

参考文献

[1]

Derflinger,Gerhard,Wolfgang Hörmann 和 Josef Leydold。“仅当已知密度时通过数值反演生成随机变量。”ACM Transactions on Modeling and Computer Simulation (TOMACS) 20.4 (2010): 1-25。

示例

>>> import numpy as np
>>> from scipy import stats
>>> from scipy.stats.sampling import FastGeneratorInversion

针对正态分布创建一个对象

>>> d_norm_frozen = stats.norm()
>>> d_norm = FastGeneratorInversion(d_norm_frozen)

为了确认该数值反演的准确性,我们评估近似误差(u 错误和 x 错误)。

>>> u_error, x_error = d_norm.evaluate_error(x_error=True)

u 错误应低于 1e-10

>>> u_error
8.785783212061915e-11  # may vary

将 PPF 与近似值 ppf 进行比较

>>> q = [0.001, 0.2, 0.4, 0.6, 0.8, 0.999]
>>> diff = np.abs(d_norm_frozen.ppf(q) - d_norm.ppf(q))
>>> x_error_abs = np.max(diff)
>>> x_error_abs
1.2937954707581412e-08

这是在点 q 处评估的绝对 x 错误。相对误差由下式给出:

>>> x_error_rel = np.max(diff / np.abs(d_norm_frozen.ppf(q)))
>>> x_error_rel
4.186725600453555e-09

以上计算的 x_error 按照非常类似的方式在更大一组随机值 q 上进行推导。对每个值 q[i],取相对误差和绝对误差的最小值。然后将最终值派生为这些值的较大者。在我们的示例中,我们得到以下值

>>> x_error
4.507068014335139e-07  # may vary