python – 如何從numpy陣列中確定什麼是概率分佈函式?
我已經搜尋了,令我驚訝的是,這個問題似乎還沒有得到回答.
我有一個包含10000個值的Numpy陣列.我已經繪製了Matplotlib的直方圖,通過目視檢查,這些值似乎是正態分佈的:
但是,我想驗證這一點.我已經發現在ofollow,noindex" target="_blank">scipy.stats.mstats.normaltest 下實施了一個正常測試,但結果另有說明.我得到這個輸出:
(masked_array(data = [1472.8855375088663], mask = [False], fill_value = 1e+20) , masked_array(data = [ 0.], mask = False, fill_value = 1e+20)
)
這意味著資料集正常分佈的機會為0.我已經重新執行實驗並再次測試獲得相同的結果,而在“最佳”情況下,p值為3.0e-290.
我已經使用以下程式碼測試了這個函式,它似乎做了我想要的:
import numpy import scipy.stats as stats mu, sigma = 0, 0.1 s = numpy.random.normal(mu, sigma, 10000) print stats.normaltest(s) (1.0491016699730547, 0.59182113002186942)
如果我已經理解並正確使用該功能,則意味著這些值不是正態分佈的. (老實說,我不知道為什麼產出有差異,即較少的細節.)
我很確定這是一個正常的分配(雖然我的統計知識是基礎的),我不知道可以選擇什麼.如何檢視有問題的概率分佈函式是什麼?
編輯:
我的包含10000個值的Numpy陣列是這樣生成的(我知道這不是填充Numpy陣列的最佳方法),之後執行正常值:
values = numpy.empty(shape=10000, 1)) for i in range(0, 10000): values[i] = measurement(...) # The function returns a float print normaltest(values)
編輯2:
我剛剛意識到輸出之間的差異是因為我無意中使用了兩個不同的功能(scipy.stats.normaltest()和scipy.stats.mstats.normaltest()),但是沒有什麼區別,因為相關部分的輸出是相同的,不管使用的功能.
編輯3:
使用askewchan的建議對直方圖進行擬合:
plt.plot(bin_edges, scipy.stats.norm.pdf(bin_edges, loc=values.mean(), scale=values.std()))
結果如下:
編輯4:
使用使用者user333700的建議對直方圖進行擬合:
scipy.stats.t.fit(data)
結果如下:
假設您已經正確使用了測試,我的猜測是,您與正態分佈有很小的偏差,並且由於您的樣本數量如此之大,即使小的偏差也將導致拒絕正態分佈的零假設.
一種可能性是通過繪製具有大量分割槽的規範直方圖和使用loc = data.mean()和scale = data.std()的pdf來直觀檢查資料.
有測試正常性的替代測試,當估計分佈引數時,統計模型有Anderson-Darling和Lillifors(Kolmogorov-Smirnov)進行測試.
但是,由於樣本量較大,我預計結果不會有很大差異.
主要問題是您是否要測試您的樣本是否從正態分佈“完全”,或者您是否對您的樣本是否來自非常接近正態分佈的分佈感興趣,關於實際使用情況.
詳細說明最後一點:
http://jpktd.blogspot.ca/2012/10/tost-statistically-significant.html
http://www.graphpad.com/guides/prism/6/statistics/index.htm?testing_for_equivalence2.htm隨著樣本量增加,假設檢驗獲得更多的權力,這意味著即使對於越來越小的差異,該測試也能夠拒絕平等的零假設.如果我們把我們的意義水平固定下來,那麼最終我們會拒絕我們不太在意的微小差異.
一種替代型別的假設檢驗是我們想要顯示我們的樣本接近給定點假設的地方,例如兩個樣本具有幾乎相同的平均值.問題是我們必須定義我們的等價區域是什麼.
在適合度測試的情況下,我們需要選擇距離度量並定義樣本與假設分佈之間的距離測量的閾值.我沒有發現任何直覺有助於選擇這個距離門檻的解釋.
stats.normaltest是基於偏差和峰度偏差與正態分佈的偏差.
安德森 – 達令是基於cdf之間的加權平方差的積分.
Kolmogorov-Smirnov是基於cdf之間的最大絕對差異.
合併資料的chisquare將基於平方箱概率的加權和.
等等.
我只曾嘗試過等價測試,採用binned或離散資料,其中我使用了一些仍然相當任意的參考案例的閾值.
在醫療等效性測試中,有一些預定義的標準規定了兩種治療方案可以被認為是相同的,或者類似於單側版本的劣質或更高級別.
http://stackoverflow.com/questions/23251759/how-to-determine-what-is-the-probability-distribution-function-from-a-numpy-arra