使用观察权重绘制密度

时间:2014-11-12 22:23:17

标签: python matplotlib scikits

有没有办法使用具有观察权重的数据绘制密度?

我有一个观察向量x和一个整数权重向量y,这样y1表示我们对x1的观察数量。也就是说,密度

   x    y 
   1    2
   2    2
   2    3 

等于1, 1, 2, 2, 2, 2 ,2(2x1,5x2)的密度。据我了解, 在绘制直方图时,matplotlib.pyplot.hist(weights=y)允许观察权重。计算和绘制密度是否有任何等价物?

我希望软件包能够做到这一点的原因是我的数据非常大,而且我正在寻找更有效的替代方案。

或者,我可以对其他套餐开放。

1 个答案:

答案 0 :(得分:3)

Statsmodels的kde单变量在其fit function中接收权重。请参阅以下代码的输出。

import matplotlib.pyplot as plt
import statsmodels.api as sm
import pandas as pd

df = pd.DataFrame({'x':[1.,2.],'weight':[2,4]})
weighted = sm.nonparametric.KDEUnivariate(df.x)
noweight = sm.nonparametric.KDEUnivariate(df.x)
weighted.fit(fft=False, weights=df.weight)
noweight.fit()

f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(noweight.support, noweight.density)
ax2.plot(weighted.support, weighted.density)

ax1.set_title('No Weight')
ax2.set_title('Weighted')

输出: No Weight vs Weighted Densities

注意:您可能无法解决有关阵列创建的时间问题。因为正如source code中所述:

  

如果FFT为False,则为'number_of_obs'x'grididsize'中间   数组已创建