当我将数据相应地分配到scipy.stats.binned_statistic
(see here for example)时,如何获得平均分箱值的错误(即标准偏差)?
例如,如果我将数据分类如下:
windspeed = 8 * np.random.rand(500)
boatspeed = .3 * windspeed**.5 + .2 * np.random.rand(500)
bin_means, bin_edges, binnumber = stats.binned_statistic(windspeed,
boatspeed, statistic='median', bins=[1,2,3,4,5,6,7])
plt.figure()
plt.plot(windspeed, boatspeed, 'b.', label='raw data')
plt.hlines(bin_means, bin_edges[:-1], bin_edges[1:], colors='g', lw=5,
label='binned statistic of data')
plt.legend()
如何获得bin_means
上的标准差?
答案 0 :(得分:0)
解决这个问题的方法是从直方图构建概率密度估计(这只是对直方图进行适当标准化的问题),然后计算标准偏差或估计密度的任何其他统计量。
适当的归一化是使直方图下的面积为1所需的任何值。对于计算密度估计的统计数据,从统计量的定义起作为integral(p(x)*f(x), x, -infinity, +infinity)
,用{的密度估计值替换{ {1}}以及p(x)
所需的任何内容,例如f(x)
和x
获取第一和第二时刻,从中计算方差,然后计算标准差。
明天我会发布一些公式,或者也许其他人想在此期间尝试一下。你可能能够查找一些公式,但我的建议是在尝试查找之前总是试着找出答案。
答案 1 :(得分:0)
也许我回答得有点晚了,但是我想知道如何做同样的事情并遇到这个问题。我认为可以使用stats.binned_statistic_2d
进行计算,但是我还没有弄清楚。到目前为止,我是手动计算的,就像这样(请注意,在我的代码中,我使用固定数量的等间距垃圾箱):
windspeed = 8 * numpy.random.rand(500)
boatspeed = .3 * windspeed**.5 + .2 * numpy.random.rand(500)
bin_means, bin_edges, binnumber = stats.binned_statistic(windspeed,
boatspeed, statistic='median', bins=10)
stds = []
# Match each value to the bin number it belongs to
pairs = zip(boatspeed, binnumber)
# Calculate stdev for all elements inside each bin
for n in list(set(binnumber)): # Iterate over each bin
in_bin = [x for x, nbin in pairs if nbin == n] # Get all elements inside bin n
stds.append(numpy.std(in_bin))
# Calculate the locations of the bins' centers, for plotting
bin_centers = []
for i in range(len(bin_edges) - 1):
center = bin_edges[i] + (float(bin_edges[i + 1]) - float(bin_edges[i]))/2.
bin_centers.append(center)
# Plot means
pyplot.figure()
pyplot.hlines(bin_means, bin_edges[:-1], bin_edges[1:], colors='g', lw=5,
label='binned statistic of data')
# Plot stdev as vertical lines, probably can also be done with errorbar
pyplot.vlines(bin_centers, bin_means - stds, bin_means + stds)
pyplot.legend()
pyplot.show()
您必须小心使用垃圾箱。在我正在使用的代码中,其中一个垃圾箱没有要点,因此我必须相应地调整对stdev的计算。