Pythonで棒グラフを生成するためにseabornライブラリを使用しています。エラーバーの計算にどの統計情報が使用されているのかと思いますが、Seabornのbarplotのドキュメントでこれに関する参照を見つけることができません。
私の場合はバーの値が平均に基づいて計算されることを知っています(既定のオプション)。エラーバーは正規分布の95%信頼区間に基づいて計算されると思いますが、確認したいと思います。
Pythonで棒グラフを生成するためにseabornライブラリを使用しています。エラーバーの計算にどの統計情報が使用されているのかと思いますが、Seabornのbarplotのドキュメントでこれに関する参照を見つけることができません。
私の場合はバーの値が平均に基づいて計算されることを知っています(既定のオプション)。エラーバーは正規分布の95%信頼区間に基づいて計算されると思いますが、確認したいと思います。
回答:
ソース(seaborn / seaborn / categorical.py、2166行目)を見ると、
def barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
estimator=np.mean, ci=95, n_boot=1000, units=None,
orient=None, color=None, palette=None, saturation=.75,
errcolor=".26", ax=None, **kwargs):
そのため、デフォルト値は、ご想像どおり.95です。
EDIT:CIを計算する方法:barplot
呼び出しutils.ci()
ています
seaborn / seaborn / utils.py
def ci(a, which=95, axis=None):
"""Return a percentile range from an array of values."""
p = 50 - which / 2, 50 + which / 2
return percentiles(a, p, axis)
そしてこの呼び出しpercentiles()
は呼び出しています:
def percentiles(a, pcts, axis=None):
"""Like scoreatpercentile but can take and return array of percentiles.
Parameters
----------
a : array
data
pcts : sequence of percentile values
percentile or percentiles to find score at
axis : int or None
if not None, computes scores over this axis
Returns
-------
scores: array
array of scores at requested percentiles
first dimension is length of object passed to ``pcts``
"""
scores = []
try:
n = len(pcts)
except TypeError:
pcts = [pcts]
n = 0
for i, p in enumerate(pcts):
if axis is None:
score = stats.scoreatpercentile(a.ravel(), p)
else:
score = np.apply_along_axis(stats.scoreatpercentile, axis, a, p)
scores.append(score)
scores = np.asarray(scores)
if not n:
scores = scores.squeeze()
return scores
axis=None
そうscore = stats.scoreatpercentile(a.ravel(), p)
であるが
scipy.stats.scoreatpercentile(a, per, limit=(), interpolation_method='fraction', axis=None)[source]
Calculate the score at a given percentile of the input sequence.
たとえば、per = 50でのスコアは中央値です。目的の分位点が2つのデータポイントの間にある場合は、内挿の値に従って、それらの間を内挿します。パラメータ制限が指定されている場合は、2つの値のタプル(下限、上限)である必要があります。
Parameters:
a : array_like
A 1-D array of values from which to extract score.
per : array_like
Percentile(s) at which to extract score. Values should be in range [0,100].
limit : tuple, optional
Tuple of two scalars, the lower and upper limits within which to compute the percentile. Values of a outside this (closed) interval will be ignored.
interpolation_method : {‘fraction’, ‘lower’, ‘higher’}, optional
This optional parameter specifies the interpolation method to use, when the desired quantile lies between two data points i and j
fraction: i + (j - i) * fraction where fraction is the fractional part of the index surrounded by i and j.
lower: i.
higher: j.
axis : int, optional
Axis along which the percentiles are computed. Default is None. If None, compute over the whole array a.
Returns:
score : float or ndarray
Score at percentile(s).
scipy.stats.stats.pyのソースを見ると、署名が表示されています
def scoreatpercentile(a, per, limit=(), interpolation_method='fraction',
axis=None):
そのため、seaboardはparamなしでそれを呼び出しているためinterpolation
、を使用していfraction
ます。
余談ですがstats.scoreatpercentile()
、には将来の陳腐化の警告があります。
この機能は将来廃止される予定です。Numpy 1.9以降では、numpy.percentileはscoreatpercentileが提供するすべての機能を提供します。そして、それは大幅に高速です。したがって、numpy> = 1.9のユーザーにはnumpy.percentileを使用することをお勧めします。