【问题标题】:Densities with Frequency频率密度
【发布时间】:2014-10-30 07:19:23
【问题描述】:

下面的两张图传达了大致相同的信息。

  • 左侧是直方图,其中 Y 轴表示频率(即我们在与每个 bin 相关的范围内看到值的频率)。

  • 右边是密度(KDE 估计)。 Y轴代表密度(积分加起来应该是1)。

我通常更喜欢密度图(您可以调整,但 Y 轴通常更难解释。

我知道,假设变量的域从 -Inf 到 Inf,KDE 估计将返回一个加起来为 1 的密度,但是有没有办法将 KDE 估计产生的 PDF 映射到频率(例如,按比例放大有频率的值)?

这只是轴的“缩放”问题吗?还是有什么别的关系?

   

【问题讨论】:

标签: python matplotlib statistics statsmodels seaborn


【解决方案1】:

您必须先计算密度点,然后再进行绘图。阅读http://scikit-learn.org/stable/modules/density.html。一些代码:

from sklearn.neighbors.kde import KernelDensity
import numpy as np
import matplotlib.pyplot as plt 

# This X is your data for the histogram
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
X = X.reshape(-1, 1)

kde = KernelDensity(kernel='gaussian', bandwidth=1).fit(X)
x = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)

density = np.exp(kde.score_samples(x))

plt.plot(x, density)
plt.show()

【讨论】:

  • 谢谢。我很迷惑。为什么你的Y轴是负的?积分加起来不应该是1吗?
  • 是的,我正在调查它:你必须exp everypoint。编辑!感谢nbviewer.ipython.org/github/cs109/content/blob/master/…
  • 谢谢!我想仍然缺少的是如何缩放它以使其代表频率(如 OP 中所述)。我想知道一个简单的1/density 是否可以做到这一点?
  • 我猜你可以很容易地将频率“反卷积”(这是一个词吗?)原始数据。假设你有 {"A": 0.6, "B": 0.3, "C": 0.1}。如果你知道病例总数,并表示密度。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2019-07-19
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多