【发布时间】:2016-01-22 02:34:53
【问题描述】:
在python中确定条形图的偏斜/峰度的有效方法是什么?考虑到条形图没有分箱(与直方图不同),这个问题没有多大意义,但我想做的是确定图的高度与距离(而不是频率与分箱)的对称性。换句话说,给定沿距离(x)测量的高度(y)值,即
y = [6.18, 10.23, 33.15, 55.25, 84.19, 91.09, 106.6, 105.63, 114.26, 134.24, 137.44, 144.61, 143.14, 150.73, 156.44, 155.71, 145.88, 120.77, 99.81, 85.81, 55.81, 49.81, 37.81, 25.81, 5.81]
x = [0.03, 0.08, 0.14, 0.2, 0.25, 0.31, 0.36, 0.42, 0.48, 0.53, 0.59, 0.64, 0.7, 0.76, 0.81, 0.87, 0.92, 0.98, 1.04, 1.09, 1.15, 1.2, 1.26, 1.32, 1.37]
在距离 (x) 上测量的高度 (y) 分布(偏度)和峰度(峰度)的对称性是什么?偏度/峰度是否适合用于确定实际值的正态分布?或者 scipy/numpy 是否为这种类型的测量提供了类似的东西?
我可以通过以下方法实现沿距离 (x) 分箱的高度 (y) 频率值的偏斜/峰度估计
freq=list(chain(*[[x_v]*int(round(y_v)) for x_v,y_v in zip(x,y)]))
x.extend([x[-1:][0]+x[0]]) #add one extra bin edge
hist(freq,bins=x)
ylabel("Height Frequency")
xlabel("Distance(km) Bins")
print "Skewness,","Kurtosis:",stats.describe(freq)[4:]
Skewness, Kurtosis: (-0.019354300509997705, -0.7447085398785758)
在这种情况下,高度分布在中点距离周围是对称的(偏斜 0.02),并以平峰(-0.74 峰度,即宽)分布为特征。
考虑到我将每次出现的 x 值乘以它们的高度 y 以创建频率,结果列表的大小有时会变得非常大。我想知道是否有更好的方法来解决这个问题?我想我总是可以尝试将数据集 y 归一化到大约 0 - 100 的范围内,而不会丢失关于数据集偏斜/峰度的太多信息。
【问题讨论】:
-
您可以用
numpy.repeat(y, np.round(x).astype(int)替换列表理解,这应该会更快。但是,我不记得看到过加权偏斜和峰度的函数。而且我从未见过它用于分布函数以外的函数。 -
x和y是什么?我的意思是,你不能有一个图表的倾斜(正如你的标题所说),它只是没有意义。你能在问题中编辑一些解释吗? -
添加了一些额外的 cmets 来声明 x 和 y...也许我在错误的论坛中提出了这个问题,应该重新发布在 stats stack overflow 上,以询问如何测量实际值的正态分布而不是测试一组随机数是否正态分布。
-
如果我们将高度与距离的关系视为一种空间分布,那么我们就会得到该分布的偏斜和峰度的标准解释。这可以作为具有有限数量的支持点的分布来完成,并按照 Hooked 的答案进行计算,或者使用密度的平滑估计来获得连续距离上的分布。