有没有办法使用具有观察权重的数据绘制密度?
我有一个观察向量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)
允许观察权重。计算和绘制密度是否有任何等价物?
我希望软件包能够做到这一点的原因是我的数据非常大,而且我正在寻找更有效的替代方案。
或者,我可以对其他套餐开放。
答案 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')
注意:您可能无法解决有关阵列创建的时间问题。因为正如source code中所述:
如果FFT为False,则为'number_of_obs'x'grididsize'中间 数组已创建