2013-07-11 43 views
4

確定Python中條形圖的偏斜/峯度的有效方法是什麼?考慮到條形圖不是分級的(與直方圖不同),這個問題沒有多大意義,但是我想要做的是確定圖形高度與距離(而不是頻率與桶)的對稱性。換句話說,如在距離測量的給定的沿的距離(X)測量的高度(Y)的值,即峯度,偏斜的條形圖? - Python

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] 

那是什麼高度(y)的分佈(偏斜)和peakness(峯度)的對稱性( X)?偏度/峯度是否適合用來確定實際值的正態分佈?或者scipy/numpy爲這種類型的測量提供了類似的東西嗎?

我能實現高度(y)的頻率值的沿着距離裝箱偏斜/峯度估計(X)由下列

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) 

Histogram

在這種情況下,高度分佈是對稱的(歪斜0.02)圍繞中點距離,並以platykurtic(-0.74峯度即寬)分佈爲特徵。

考慮到我將x值的每次出現乘以它們的高度y來創建頻率,結果列表的大小有時會變得非常大。我想知道是否有更好的方法來解決這個問題?我想我總是可以嘗試將數據集y歸一化到0-100的範圍,而不會丟失關於數據集偏斜/峯度的太多信息。

+0

你可以替換'numpy.repeat(Y,np.round(x)的列表理解。astype(int)'應該更快。但是,我不記得看到一個加權偏斜和峯度的函數。我從來沒有見過它用於分配函數以外的功能。 – user333700

+1

這些'x'和'y'是什麼?我的意思是,你不能有一個圖形的傾斜(正如你的標題所說),它只是沒有意義。你可以編輯一些問題的解釋嗎? –

+0

增加了一些額外的意見宣佈x和y ...也許我在錯誤的論壇問這個問題,應該重新發布stats堆棧溢出問如何衡量實數值的正態分佈,而不是測試一組隨機數通常是分佈式的。 – BJEBN

回答

6

這不是一個python問題,也不是一個真正的編程問題,但答案很簡單。我們首先考慮基於較低時刻的更容易的值,即meanstandard deviation,而不是偏斜和峯度。爲了使混凝土,並以適合你的問題,讓我們假設你的數據是這樣的:

X = 3, 3, 5, 5, 5, 7 = x1, x2, x3 .... 

這將給予「柱狀圖」,看起來像:

{3:2, 5:3, 7:1} = {k1:p1, k2:p2, k3:p3} 

平均,U,通過

E[X] = (1/N) * (x1 + x2 + x3 + ...) = (1/N) * (3 + 3 + 5 + ...) 

給予我們的數據,但是,已經重複的值,所以這可以被改寫爲

E[X] = (1/N) * (p1*k1 + p2*k2 + ...) = (1/N) * (3*2 + 5*3 + 7*1) 

下一項,標準的開發。,S,簡直是

sqrt(E[(X-u)^2]) = sqrt((1/N)*((x1-u)^2 + (x2-u)^3 + ...)) 

但是,我們可以使用同樣減少到E[(X-u)^2]項,把它寫成

E[(X-u)^2] = (1/N)*(p1*(k1-u)^2 + p2*(k2-u)^2 + ...) 
      = (1/6)*(2*(3-u)^2 + 3*(5-u)^2 + 1*(7-u)^2) 

這意味着我們唐如您在問題中指出的那樣,不必每個數據項都有多個副本來執行總和

skewkurtosis是因爲這點很簡單:

skew  = E[(x-u)^3]/(E[(x-u)^2])^(3/2) 
kurtosis = (E[(x-u)^4]/(E[(x-u)^2])^2) - 3