データセット内の特定の値の分位点を与える最も正確な関数を見つけようとしています。データセットは (おそらく) 常に指数分布になります。
私が使用している方法論は次のとおりです (コーディングが貧弱である場合は申し訳ありません。私は実際にはインフラストラクチャの専門家であり、統計担当者でも日常的な開発者でもありません)。
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.ksone
を使用できます。これはおよびを介して明らかになりscipy.stats.kstwobign
、分布を決定してから、scipy.stats.[distribution type].ppf()
関数の 1 つを利用します。彼はまた、それはまったく問題ではなく、上記の方法は、このすべての作業をほとんど報酬なしで行うのと同じくらい優れていると述べました. 彼は、上記の方法の強度は、利用可能なデータの量に応じて増加すると警告しましたがdata
(逆もまた真であることを意味します)、小さなデータセットに対して法律を適用するという問題を解決した人は誰もいない.
私がやろうとしているのは、データセットの強度を考慮し、結果に重みを付けて、データセットが「小さい」場合ははるかにファジーである/重みが少ないと見なすことです。「小さい」とは?まだ分からない。
ppf() と mquantile() の効果的な使用について、他の人々の意見を引き続き見つけたいと思います。