分布の可視化と外れ値
このトピックを終えると
ヒストグラム、ドットプロット、箱ひげ図がそれぞれどのような情報を示すのかを説明できます。目立つ観測値をただちに誤りや除外の対象として分類するのではなく、データ品質の点検と研究上の問いの再検討につなげることができます。
出発点: 平均値の表には見えないもの
stat-004で中心と散らばりを計算しました。しかし要約表は値の順序や密集の程度を圧縮してしまいます。二つの条件の平均とIQRが似ていても、一方に複数の山や長い裾がある場合があります。
可視化の目的は「きれいな図」を作ることではありません。一行の意味と測定単位を保ったまま、値の分布・グループ差・欠測・異常な範囲を目で点検することです。
三つの図が投げかける問い
ドットプロット
各観測値を点で表示すると、実際のデータの個数と位置を確認できます。標本が多くないとき、一つの点が一つの解析単位なのか、技術的反復なのかを説明するのに適しています。点が重なる場合はランダムにずらすjitterを使えますが、ずらした位置が新しい測定値を意味するわけではないという説明が必要です。
ヒストグラム
値の区間ごとの頻度を示します。区間幅によって形が変わりうるため、特定の形を自然界の固定された構造として解釈しません。長い裾、空の区間、複数の山の可能性を探索する出発点として用います。
箱ひげ図
中央値、四分位数、範囲とともに極端に離れた点を要約します。箱ひげ図の外側の点は「除去すべき誤り」という判定ではありません。その規則から遠く離れた観測であるという視覚的なシグナルです。
Pythonで分布を描く
以下のコードは stat-004 と同じ自作の合成構造を使用します。可視化に入る前に、condition と outcome のデータ型、欠測、解析単位を確認する必要があります。
import matplotlib.pyplot as pltimport seaborn as sns
fig, axes = plt.subplots(1, 2, figsize=(9, 3.5))sns.stripplot(data=data, x="condition", y="outcome", ax=axes[0])sns.boxplot(data=data, x="condition", y="outcome", ax=axes[1])axes[0].set_title("individual observations")axes[1].set_title("distribution summary")fig.tight_layout()このコードは、data が前編で作成した DataFrame であることを前提に実行されます。ドットプロットは個々の値の位置を、箱ひげ図は分布の要約と離れた点を示します。軸名と任意単位は実際のデータ契約に合わせて変更する必要があります。画像ファイルを作成した場合は、生成コード・環境・入力 hash を manifest に記録します。
ヒストグラムを追加する場合も同じ原則を適用します。
fig, ax = plt.subplots(figsize=(5, 3.5))sns.histplot( data=data, x="outcome", hue="condition", bins=8, element="step", stat="count", common_norm=False, ax=ax,)ax.set_xlabel("outcome (arbitrary unit)")ax.set_ylabel("number of observations")fig.tight_layout()bins の選択は見た目の形に影響します。したがって、区間幅を変えても保たれるパターンかどうかを確認し、ヒストグラム一つだけで分布の本質を宣言しません。hue でグループを重ねて描く場合は、色だけで解析単位や標本数を隠さないよう、凡例と観測数を併せて提供します。
可視化の結果は画像よりも生成条件が重要です。図のタイトル、軸の単位、使用したsubset、欠測除外のルール、グループごとの観測数を記録してこそ、他の人が同じ図を再生成できます。
外れ値を発見した後の手順
目立つ値を発見したら、まずデータを削除せずに記録を確認します。
- 値の行IDと分析単位を確認します。
- 入力・変換・測定ログにその値が存在するかを見ます。
- 単位、小数点、日付、グループラベルが正しいかを点検します。
- 測定誤差であれば、修正の根拠と原本を保存します。
- 実際の変動であれば、恣意的な削除ではなく、包含基準と感度分析を記録します。
この手順は、特定の値が異常であるという視覚的な判断を研究記録と結びつけます。「箱の外なら除去」という規則は、観測値の原因を説明できません。
感度分析で判断を切り分ける
測定ログを確認しても、値の処理の可否が決まらない場合があります。そのときは元データを保存したまま、事前に定めた規則で含めた結果と、別の規則を適用した結果を比較できます。この比較は、どちらの結果が「本物」かを自動的に選ぶ仕組みではなく、結論が特定の観測にどれほど依存しているかを明らかにする方法です。
ただし、感度分析を行いながら結果がより良く見える規則だけを選ぶと、分析の目的が変わってしまいます。除外基準、適用理由、結果の差を併せて記録し、どの基準が研究上の問いに合致するのかを説明する必要があります。
反復構造を図に示す
同一の biological replicate から複数の technical replicate が得られた場合、すべての点を同じ独立した標本のように表現することはしません。上位単位ごとの連結線、色、facet または要約表示を用いることはできますが、視覚的な装飾が独立性の構造を代替するわけではありません。図の説明に「点ひとつが何を意味するのか」を書くことが先です。
研究の問いに立ち返って解釈する
分布の可視化は、条件ごとのデータがどのような形で観測されたのかという問いをより具体化します。中心の差がすべての区間で現れるのか、一部の値が結果を引っ張っているのか、測定単位が混ざっているのかを確認できます。
しかし、図ひとつで条件の因果効果や生物学的な重要性を確定することはしません。可視化は品質と仮説を点検する段階であり、独立性・不確実性・研究デザインを代替するものではありません。
図を読む順序
図を作ってすぐに差を語ることはしません。次の順序で読みます。
- 軸の単位と変換を確認します。
- 各点がどの分析単位なのかを確認します。
- 条件ごとの観測数と欠測を確認します。
- 中心、ばらつき、裾、複数のピークの可能性を分けて見ます。
- 特定の点が結果に与える影響を、生データと記録から確認します。
この順序は、視覚的な印象をデータ契約と結びつけます。たとえば B 群の箱ひげ図がより広く見えても、B の観測数が少なかったり一部の単位が欠けていたりする場合は、同一条件の比較として読む前にその事実を記録する必要があります。群間の色のコントラストは解釈を助けますが、色だけで条件の意味・順序・優劣を伝えることはしません。
アクセシビリティと報告
色だけでグループを区別すると、色覚特性や白黒出力では情報が失われることがあります。凡例のテキスト、軸ラベル、点の形状またはパネル分割を併用します。画像の説明には、データが何を意味するのか、点一つの単位が何か、未処理の観測を含めているかを記します。
グラフを報告書に載せるときは、図のファイルだけをコピーせず、生成コードとデータバージョンを結び付けます。同じファイル名で別の subset を描かないよう、figure_id、入力 hash、コードバージョン、生成時点を記録します。可視化も解析成果物であり、provenance の一部です。
図では語れないこと
分布が一方に偏っているという観察は、「なぜ偏ったのか」という機序を与えません。ある条件の値がより広く散らばっているという観察も、変動の原因が生物学的なものか、測定過程か、batch 構成によるものかを教えてくれません。図から得た観察と原因の説明を同じ文で書かないようにします。
また、二つの箱ひげ図が重なっているという理由だけで条件が同じだと結論づけません。重なりは視覚的な範囲の関係を示すにすぎず、研究の問いに必要な効果量・不確実性・設計上の判断には別途の解析が必要です。逆に、箱が離れて見えるからといって因果効果が確定するわけでもありません。
図を保存する際には、次のメタデータを併せて記録します。
| 項目 | 記録例 |
|---|---|
figure_id | stat-005-eda-01 |
| input | 合成 DataFrame、生成規則のバージョン |
| unit | 一行の解析単位 |
| missing_rule | 欠測を除外、または なし |
| group_rule | condition の許容値 |
| code_version | 実行した原稿の commit または hash |
この記録は、視覚的な結果を後から見直し、どのような前提で作られたのかを確認するためのものです。
よくある失敗と点検法
- 軸を切り取ったり単位を隠したりして差を誇張しません。
- jitter の仮想的な位置を実際の測定値として読み取りません。
- 箱ひげ図の外側の点を自動的に削除しません。
- 技術的反復と biological replicate を同じ色の独立した点として表示しません。
- グループごとの観測数と欠測数を図の説明で隠しません。
要点整理
- 点グラフは個々の観測を、ヒストグラムは区間ごとの頻度を、箱ひげ図は分布の要約を示します。
- 外れ値は削除の指示ではなく、記録・測定・変換を再確認せよというシグナルです。
- 可視化には軸、単位、観測単位、欠測と反復の意味が必要です。
- 図はデータ品質と問いを点検しますが、因果的な結論を自動的に作り出すわけではありません。
次のトピックへ
次回は欠測・重複・変換を扱います。図から見つかった空欄と異常な範囲を、どのような仮定と記録で処理するかにつなげます。
参考資料
- pandas User Guide: https://pandas.pydata.org/docs/user_guide/index.html
- NumPy Reference: https://numpy.org/doc/stable/reference/
本編のシナリオと可視化コードは、BioStatPyが独自に作成した教育用の構成です。