2013-06-26 25 views
1

我正試圖找到最準確的函數來給我一個數據集內給定值的分位數。數據集將(可能)始終是指數分佈。當處理指數數據集時,是否使用mquantiles()是否準確?

我使用的方法如下(我道歉,如果編碼很差,因爲我真的基礎設施的人,而不是一個統計的傢伙,也不是每天DEV):

import sys, scipy, numpy 
from matplotlib import pyplot 
from scipy.stats.mstats import mquantiles 

def FindQuantile(data,findme): 
    print 'entered FindQuantile' 
    probset=[] 
    #cheap hack to make a quick list to get quantiles for each permille value] 
    for i in numpy.linspace(0,1,10000): 
      probset.append(i) 

    #http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.mquantiles.html 
    quantile_results = mquantiles(data,prob=probset) 
    quantiles = [] 
    i = 0 
    for value in quantile_results: 
      print str(i) + ' permille ' + str(value) 
      quantiles.append(value) 
      i = i+1 
    #goal is to figure out which quantile findme falls in: 
    i = 0 
    for quantile in quantiles: 
      if (findme > quantile): 
        print str(quantile) + ' is too small for ' + str(findme) 
      else: 
        print str(quantile) + ' is the quantile value for the ' + str(i) + '-' + str(i + 1) + ' permille quantile range. ' + str(findme) + ' falls within this range.' 
        break 
      i = i + 1 

在我的研究,我注意到有幾個更高級的功能可供使用,如scipy.stats.[distribution type].ppf()

使用mquantiles()的優勢是什麼?

有沒有一種方法可以有效地確定數據集中數據的分佈(這是我對scipy.stats.[distribution type]()的關注)?

感謝,

馬特

[更新]

與討論後,「統計花花公子,」我相信,這種方法(他被稱爲「經驗方法」)僅僅是如果您不知道分配情況,則爲有效。要找到分佈,可以使用通過scipy.stats.ksonescipy.stats.kstwobign顯示的Kolmogorov–Smirnov test來確定分佈,然後使用scipy.stats.[distribution type].ppf()函數之一。他還表示,根本沒有關係,上述方法與完成所有這些工作一樣好,沒有多少回報。儘管他警告說,上述方法的優勢將隨着data中的可用數據量的增加而增加(意味着情況反過來也是如此),但沒有人解決了針對小數據集應用法律的問題。

我會做的是考慮數據集的強度,並對我的結果加以權衡,並且認爲數據集「小」時它會更加模糊/重量更輕。什麼是「小」?我不肯定。

我仍然想找到其他人輸入有效使用ppf()與mquantile()。

回答

1

ppf給出了給定分佈參數的特定分佈的分位數。例如,您可以將數據擬合成指數分佈,然後您可以使用ppf和估計的參數來獲得分位數。

當你使用mquantiles時,你不會認爲你有特定的分佈。

估計一個給定的分佈的參數和使用ppf會給你更好的結果,低方差比mquantiles,如果你的數據確實來自於分佈或分佈至少一個很好的近似。

+0

感謝您的回覆。我在原來的問題中附加了更多的信息,因爲它涉及到確定數據所在的分佈。我應該使用一種方法來嘗試發現分佈並使用'ppf'函數嗎?或者這太昂貴了?我希望整合到這個系統中的系統將是一個接近實時的異常檢測機制。謝謝! – mbrownnyc

+0

異常值檢測是一個不同的問題。你需要一個參考分佈來知道什麼是異常值(否則它只是尾部的常規隨機抽取)。參考分佈是過去的乾淨數據集(mquantiles)還是基於分佈假設(distr.ppf)取決於您的用例。此外,如果分佈變化不是很快,那麼不需要每次新觀察都更新參考分位數。一旦你擁有分位數,np.searchsorted是找到新的觀察位置相對於基準位置的最快速度。 – user333700

+0

對於指數分佈也有特定的異常值測試,但我不記得參考。 – user333700

相關問題