在python中使用Gaussian、KDE或EF拟合曲线

icomxhvb  于 2023-05-19  发布在  Python
关注(0)|答案(1)|浏览(213)

如何从seaborn保存KDE曲线并将其用于互相关?
我有一个代表脉冲的直方图,我想用前面提到的一种方法来拟合它。我知道你可以用seaborn来做KDE,但是它不能让我保存建模的曲线。我需要某种函数来模拟这些曲线,以便与较小尺寸的脉冲进行互相关。
有没有办法创造出这样的东西?

u0njafvf

u0njafvf1#

摘要:seaborn.kdeplot()seaborn.ecdfplot()都不允许您直接访问其图表中拟合的模型曲线。但是,使用下面的链接代码,应该可以通过直接运行底层seaborn代码来复制结果。
核密度估计

seaborn库包含适合_statistics.py中的KDE的代码。在该脚本中,_fit方法利用scipy的实现,如下所示:

from scipy.stats import gaussian_kde

# note: `bw_method`, `weights`, and `factor` are arguments which can be
# specified in seaborn.kdeplot()
def _fit(self, fit_data, weights=None):
    """Fit the scipy kde while adding bw_adjust logic and version check."""
    fit_kws = {"bw_method": self.bw_method}
    if weights is not None:
        fit_kws["weights"] = weights

    kde = gaussian_kde(fit_data, **fit_kws)
    kde.set_bandwidth(kde.factor * self.bw_adjust)

    return kde

不幸的是,_fit()没有被分配给任何属性,无论是在_statistics.py还是在distributions.py中,其中seaborn.kdeplot() id已定义。因此,**虽然不可能直接从图表中检索拟合的KDE,但拟合KDE的代码非常简单,您可以直接使用上面的代码轻松复制拟合曲线。

经验累积分布函数(ECDF)

首先,我假设Empirical Fourier是指ECDF。与KDE类似,统计代码可以在_statistics.py中找到,seaborn.ecdfplot()的实现在distributions.py中。和以前一样,我无法在类中识别出任何允许您从图表中检索信息的属性。但是,**和KDE一样,代码定义应该允许您直接复制经验累积分布函数。**获取ECDF的seaborn代码如下:

def _eval_univariate(self, x, weights):
    """Inner function for ECDF of one variable."""
    sorter = x.argsort()
    x = x[sorter]
    weights = weights[sorter]
    y = weights.cumsum()

    if self.stat in ["percent", "proportion"]:
        y = y / y.max()
    if self.stat == "percent":
        y = y * 100

    x = np.r_[-np.inf, x]
    y = np.r_[0, y]

    if self.complementary:
        y = y.max() - y

    return y, x

相关问题