【发布时间】:2017-11-21 16:28:03
【问题描述】:
scipy.stats中的gaussian_kde函数有一个函数evaluate可以返回一个输入点的PDF值。我正在尝试使用gaussian_kde 来估计逆CDF。其动机是生成一些输入数据的蒙特卡罗实现,这些输入数据的统计分布是使用 KDE 数值估计的。是否有绑定到gaussian_kde 的方法可以达到此目的?
下面的示例显示了这在高斯分布的情况下应该如何工作。首先,我展示了如何进行 PDF 计算以设置我想要实现的特定 API:
import numpy as np
from scipy.stats import norm, gaussian_kde
npts_kde = int(5e3)
n = np.random.normal(loc=0, scale=1, size=npts_kde)
kde = gaussian_kde(n)
npts_sample = int(1e3)
x = np.linspace(-3, 3, npts_sample)
kde_pdf = kde.evaluate(x)
norm_pdf = norm.pdf(x)
是否有类似的简单方法来计算逆 CDF? norm 函数有一个非常方便的 isf 函数,它正是这样做的:
cdf_value = np.sort(np.random.rand(npts_sample))
cdf_inv = norm.isf(1 - cdf_value)
kde_gaussian 是否存在这样的功能?还是直接从已经实现的方法构造这样的函数?
【问题讨论】:
-
如果您的最终目标是重新采样,为什么不使用
resample方法? -
我的最终目标不是随机重采样,而是相关重采样。如果
resample方法允许我传递CDF 值(就像isf方法所做的那样),那么我的问题就解决了。但是resample假设我想使用随机制服通过逆 CDF 生成样本,我不这样做。 -
那么找根目录怎么样?会不会太慢了?
-
我从来没有用过这个
kde的东西,但是integrate_box_1d方法对我来说听起来几乎是cdf,也许你甚至可以把-inf作为一个边界?还有你可以使用根查找器反转的 cdf - 显然不是最快的。 -
看来我被抢了。无论如何,很高兴能帮上忙。
标签: python numpy scipy scientific-computing