統計的推定とエラーバー#

データの可視化には、集計または推定のステップが含まれる場合があります。このステップでは、複数のデータポイントが平均値や中央値などの要約統計量に縮小されます。要約統計量を表示する場合、通常は*エラーバー*を追加することが適切です。エラーバーは、要約が基礎となるデータポイントをどの程度適切に表しているかについての視覚的な手がかりを提供します。

いくつかのseaborn関数は、完全なデータセットが与えられると、要約統計量とエラーバーの両方を自動的に計算します。この章では、エラーバーの表示内容と、seabornが提供する各オプションを選択する理由について説明します。

中心傾向の推定値の周りのエラーバーは、2つの一般的な事柄のいずれかを示すことができます。推定値に関する不確実性の範囲、またはその周りの基礎となるデータのばらつきです。これらの尺度は関連しています。同じサンプルサイズが与えられた場合、データのばらつきが大きいほど推定値の不確実性は大きくなります。しかし、不確実性はサンプルサイズが大きくなるにつれて減少しますが、ばらつきは減少はしません。

seabornでは、それぞれの種類のエラーバーを構築するための2つのアプローチがあります。1つのアプローチはパラメトリックで、分布の形状に関する仮定に基づく式を使用します。もう1つのアプローチはノンパラメトリックで、提供されたデータのみを使用します。

選択は、プロットの一部として推定を行う各関数に存在するerrorbarパラメータを使用して行われます。このパラメータは、使用するメソッドの名前と、オプションで間隔のサイズを制御するパラメータを受け入れます。選択肢は、表示される内容とそれがどのように構築されるかによって、2次元分類で定義できます。

../_images/error_bars_2_0.svg

サイズパラメータは、パラメトリックアプローチとノンパラメトリックアプローチで異なる方法で定義されていることに注意してください。パラメトリックエラーバーの場合、エラーを定義する統計量(標準誤差または標準偏差)に乗算されるスカラー係数です。ノンパラメトリックエラーバーの場合、パーセンタイル幅です。これは、以下の各特定のアプローチについてさらに説明します。

注記

ここで説明するerrorbar APIは、seaborn v0.12で導入されました。以前のバージョンでは、ブートストラップ信頼区間または標準偏差を表示することのみがオプションであり、選択肢はciパラメータ(つまり、ci=<size>またはci="sd")によって制御されていました。

異なるパラメータ化を比較するために、次のヘルパー関数を使用します。

def plot_errorbars(arg, **kws):
    np.random.seed(sum(map(ord, "error_bars")))
    x = np.random.normal(0, 1, 100)
    f, axs = plt.subplots(2, figsize=(7, 2), sharex=True, layout="tight")
    sns.pointplot(x=x, errorbar=arg, **kws, capsize=.3, ax=axs[0])
    sns.stripplot(x=x, jitter=.3, ax=axs[1])

データのばらつきの尺度#

データのばらつきを表すエラーバーは、boxplot()が5つ以上を使用し、violinplot()が複雑なアルゴリズムを使用する分布のコンパクトな表示を、3つの数値を使用して提示します。

標準偏差エラーバー#

標準偏差はよく知られた統計量であるため、標準偏差エラーバーは最も簡単に説明できます。これは、各データポイントからサンプル平均までの平均距離です。デフォルトでは、errorbar="sd"は推定値の周りの+/- 1 sdにエラーバーを描画しますが、スケーリングサイズパラメータを渡すことで範囲を拡大できます。正規分布データと仮定すると、データの約68%は1標準偏差内、約95%は2標準偏差内、約99.7%は3標準偏差内に収まります。

plot_errorbars("sd")
../_images/error_bars_6_0.png

パーセンタイル区間エラーバー#

パーセンタイル区間も、ある量のデータが収まる範囲を表しますが、サンプルから直接これらのパーセンタイルを計算することによってそうします。デフォルトでは、errorbar="pi"は、2.5パーセンタイルから97.5パーセンタイルまでの95%区間を表示します。たとえば、四分位範囲を表示するために、サイズパラメータを渡すことによって異なる範囲を選択できます。

plot_errorbars(("pi", 50))
../_images/error_bars_8_0.png

標準偏差エラーバーは、常に推定値の周りに左右対称になります。これは、データが歪んでいる場合、特に自然な境界がある場合(たとえば、データが正の値のみをとることができる量を表している場合)に問題になる可能性があります。場合によっては、標準偏差エラーバーが「不可能な」値まで拡張されることがあります。ノンパラメトリックアプローチにはこの問題はありません。非対称のばらつきを考慮でき、データの範囲を超えて拡張されることはないためです。

推定の不確実性の尺度#

データが母集団からのランダムサンプルである場合、平均値(またはその他の推定値)は真の母平均の不完全な尺度になります。推定の不確実性を示すエラーバーは、真のパラメータの尤もらしい値の範囲を表そうとします。

標準誤差バー#

標準誤差統計量は標準偏差に関連しています。実際、それはサンプルサイズの平方根で割った標準偏差にすぎません。errorbar="se"を使用するデフォルトでは、平均値から+/- 1標準誤差の間隔を描画します。

plot_errorbars("se")
../_images/error_bars_11_0.png

信頼区間エラーバー#

不確実性を表すノンパラメトリックアプローチでは、*ブートストラップ*を使用します。これは、データセットを復元抽出でランダムに複数回再サンプリングし、各再サンプルから推定値を再計算する手順です。この手順により、異なるサンプルがあった場合に推定値に対して得られた可能性のある値の分布を近似する統計量の分布が作成されます。

信頼区間は、*ブートストラップ分布*のパーセンタイル区間をとることによって構築されます。デフォルトでは、errorbar="ci"は95%信頼区間を描画します。

plot_errorbars("ci")
../_images/error_bars_13_0.png

統計における信頼区間はパラメトリックまたはノンパラメトリックである可能性があるため、seabornの用語はやや具体的です。パラメトリック信頼区間を描画するには、前述の式と同様の式を使用して標準誤差をスケーリングします。たとえば、近似95%信頼区間は、平均値+/- 2標準誤差をとることによって構築できます。

plot_errorbars(("se", 2))
../_images/error_bars_15_0.png

ノンパラメトリックブートストラップには、パーセンタイル区間と同様の利点があります。標準誤差区間では不可能な方法で、歪んだデータと境界のあるデータに自然に適応します。また、より一般的です。標準誤差の式は平均値に固有ですが、エラーバーは任意の推定量に対してブートストラップを使用して計算できます。

plot_errorbars("ci", estimator="median")
../_images/error_bars_17_0.png

ブートストラップにはランダム性が伴い、エラーバーは、それらを作成するコードを実行するたびにわずかに異なって表示されます。いくつかのパラメータがこれを制御します。1つは反復回数(n_boot)を設定します。反復回数が多いほど、結果の区間はより安定します。もう1つは乱数ジェネレータのseedを設定し、これにより同一の結果が保証されます。

plot_errorbars("ci", n_boot=5000, seed=10)
../_images/error_bars_19_0.png

反復プロセスのため、ブートストラップ区間は、特に大規模なデータセットの場合、計算に費用がかかる可能性があります。ただし、不確実性はサンプルサイズとともに減少するため、その場合、データのばらつきを表すエラーバーを使用する方が情報量が多い場合があります。

カスタムエラーバー#

これらのレシピでは不十分な場合、汎用関数をerrorbarパラメータに渡すことも可能です。この関数はベクトルを取り、区間の最小点と最大点を表す値のペアを生成する必要があります。

plot_errorbars(lambda x: (x.min(), x.max()))
../_images/error_bars_21_0.png

(実際には、上記のカスタム関数ではなく、errorbar=("pi", 100)を使用してデータの全範囲を表示できます)。

seaborn関数は現在、外部で計算された値からエラーバーを描画できませんが、matplotlib関数はseabornプロットにそのようなエラーバーを追加するために使用できます。

回帰適合のエラーバー#

前述の議論は、集計データのパラメータ推定値の周りに表示されるエラーバーに焦点を当てていました。seabornでは、関係を可視化するために回帰モデルを推定する場合にもエラーバーが発生します。ここでは、エラーバーは回帰直線の周りの「バンド」で表されます。

x = np.random.normal(0, 1, 50)
y = x * 2 + np.random.normal(0, 2, size=x.size)
sns.regplot(x=x, y=y)
../_images/error_bars_24_0.png

現在、回帰推定値のエラーバーは柔軟性が低く、ci=によって設定されたサイズで信頼区間のみを表示します。これは将来的に変更される可能性があります。

エラーバーだけで十分ですか?#

要約統計量とエラーバーのみを表示するプロットを使用するのが最適かどうかを常に自問自答する必要があります。多くの場合、そうではありません。

要約に関する質問(平均値がグループ間で異なるかどうか、または時間とともに増加するかどうかなど)に興味がある場合、集計はプロットの複雑さを軽減し、それらの推論を容易にします。しかし、そうすることで、分布の形状や外れ値の存在など、基礎となるデータポイントに関する貴重な情報が隠されます。

独自のデータを分析する際には、要約統計量に満足しないでください。常に基礎となる分布も確認してください。場合によっては、両方の視点を同じ図に組み合わせることが役立つ場合があります。多くのseaborn関数は、特にカテゴリチュートリアルで説明されている関数が、このタスクに役立ちます。