Python Seaborn:エラーバーはバープロットでどのように計算されますか?


9

Pythonで棒グラフを生成するためにseabornライブラリを使用しています。エラーバーの計算にどの統計情報が使用されているのかと思いますが、Seabornのbarplotのドキュメントでこれに関する参照を見つけることができません。

私の場合はバーの値が平均に基づいて計算されることを知っています(既定のオプション)。エラーバーは正規分布の95%信頼区間に基づいて計算されると思いますが、確認したいと思います。

ここに画像の説明を入力してください


t:=x¯μs/(n1)

回答:


10

ソース(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を使用することをお勧めします。


2
はい、確かに、しかし私の質問はどの統計検定が使用されているかについてです。ありがとう
Michael Hooreman、2015年

@Shawnドキュメントは、彼らがブートストラップを使用して、私はそれが本当だと思うと言う:github.com/mwaskom/seaborn/blob/master/seaborn/...
Direvius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.