論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
分位点
Quantile / Percentile
データを小さい順に並べたとき「下から何%の位置」にあたる値。
中央値(50パーセンタイル)、四分位(25/75パーセンタイル)、90パーセンタイル、すべて分位点の一種。
記述統計の柱の 1 つで、 箱ひげ図・分布の形・外れ値検出 の基盤となる。
記述統計 基礎 分布の形 頑健統計 箱ひげ図

🔖 キーワード索引

このページを高速ナビゲートするための索引チップです。クリックで該当セクションへ。

索引30秒結論文脈直感数式記号→意味実値計算Python実装落とし穴関連手法関連用語グループ教材

🔖 分位数 詳細索引

本ページの深掘り箇所を一気に俯瞰するためのチップ群です。

💡 30 秒で分かる 📍 文脈 🎨 直感 📐 数式 🔬 数式を言葉で読み解く 🧮 実値で計算 🐍 Py1: numpy.quantile 🐍 Py2: 補間方式 🐍 Py3: デシル 🐍 Py4: boxplot 描画 ⚠️ 落とし穴 🌐 関連手法 🔗 関連用語 📚 関連グループ

💡 30秒で分かる結論

🍰 まずはやさしく

データの並び順で位置を決める指標です。

全体の分布をざっくり把握するために使います。

テストの点数が下から何%にいるか似ています。

分位点の定義と代表的な値について読みましょう。

💡 30秒で分かる結論

💡 要点をもう一歩掘り下げる

📍 あなたが今見ているもの

🍰 まずはやさしく

データの位置を直接示す数値のことです。

平均よりも分布の形を読みやすくするために使います。

都道府県の人口などのデータでよく使われます。

実際の数値を使って計算方法と意味を学びます。

論文・統計レポートで、こんな表記を見たはずです:

都道府県人口の 中央値(Q2)= 145万人、Q1 = 80万人、Q3 = 250万人
所得分布の 90パーセンタイル10パーセンタイルの比 = 7.2(格差指標)

これらが分位点(quantile)です。 「データを並べたときの位置」を直接答えるので、 平均値より分布の形を読みやすいのが特徴。 平均が外れ値で大きく動くのに対し、 分位点は頑健。 ここでは SSDSE-B の都道府県人口を題材に、 10/25/50/75/90 パーセンタイルの計算と解釈を学びます。

📍 あなたが今見ているもの(文脈ボックス)

このページは 分位点 (Quantile) を解説する用語ページです。
カテゴリ:記述統計
ジャストインタイム型データサイエンス教育の一環として、必要な時に参照し、関連概念とともに学べる構成になっています。
基準ページ:correlation.html(149KB、12セクション、SSDSE-B 実値計算)と同等以上の品質を目指しています。

📍 文脈: あなたが今見ているもの

「分位数」は 記述統計の中の「位置の指標」 ページです。 上位概念は 記述統計、 並列概念に 平均中央値最頻値 があります。 分位数は中央値 (p=0.5) を任意の比率に一般化したもの。 四分位 (q=0.25, 0.5, 0.75) は 箱ひげ図 の基本量、 デシル (10 等分) は所得格差研究、 パーセンタイル (100 等分) は身体測定や試験成績で多用。 SSDSE-B-2026 の総人口 (A1101)・消費支出 (L3221) のような 歪んだ分布では、 平均 ± 標準偏差より分位数の方が「真の中心」を捉えます。

🎨 直感で掴む — 分位点は「順位での位置」

🍰 まずはやさしく

データを小さい順に並べたときの目盛りです。

自分が全体のどのあたりにいるか知るために使います。

身長が学年で下から何%の位置にあるかと同じです。

具体的にどうやって位置を決めるかイメージしましょう。

分位点を一言で言えば、 「データを小さい順に並べて、 下から $q$ の比率の位置にある値」 です。 直感的に、 3 つのイメージで掴みましょう。

イメージ1:47 都道府県の人口を行列に並べる

47 都道府県の人口を昇順に並べ替えます(鳥取 55 万人 → ... → 東京 1404 万人)。 47 個の値を 10 等分すると、 ちょうど「10 パーセンタイル」「20 パーセンタイル」... と各境界の値が決まります。

イメージ2:身長の偏差値とパーセンタイル

学校で「あなたの身長は学年で 78 パーセンタイル」と言われたら、 「下から 78% の位置」=「上位 22% に入る」という意味。 偏差値とほぼ同じ役割ですが、 分位点は分布の形に依存しない純粋な順位情報です。

イメージ3:累積分布関数 (CDF) の「逆向き」

累積分布関数 $F(x) = P(X \le x)$ は「値 → 確率」の写像。 分位点関数 $Q(q) = F^{-1}(q)$ はその逆で「確率 → 値」の写像。 つまり:

「$x$ を入れたら確率 $F(x)$ を返す」が CDF。
「確率 $q$ を入れたら、 そこに到達する値 $Q(q)$ を返す」が分位点関数。
両者は互いに逆関数

「分位点」「分位数」「パーセンタイル」の言葉の違い

全部「データを並べたときの位置」を指すので、 表現が違うだけと考えれば OK。 論文では文脈で使い分けます。

🎨 直感で掴む

分位点とは「データを並べて q×100% の位置に来る値」のこと。中央値(q=0.5)はその代表例。外れ値に強く、分布形状を要約できる。箱ひげ図の5数要約も分位点ベース。

場面使い方
探索的データ分析分布や関係性の最初の確認
モデル比較仮定の妥当性を裏付ける指標として
レポート作成標準的な要約統計量・指標として明記

🎨 直感で掴む: データを「順序」で切る

47 都道府県を人口の少ない順に並べたとき、 上から数えて 25% (12 番目) の県、 50% (24 番目、 中央) の県、 75% (36 番目) の県の値が、 それぞれ Q25, Q50, Q75 です。 47 個の整数番号と「比率」が直接対応しないので補間が必要になります (例: 0.25 × 46 = 11.5 → 11 番目と 12 番目の中間)。 イメージとしては、 47 人の試験成績を順に並べて、 下位 25% / 50% / 75% の境界点を「シャープな水平線」で引くようなものです。

人口 ↑ (47 都道府県、 小→大に並べる) 東京 ━━━━━━━━━━━━━━━━━━━━━━━ 14,086,000 ← 100% 点 (max) 神奈川 9,229,000 ⋮ 静岡 ━━━━━━━━━━━━━━━━ 3,560,000 ← 75% 点 (Q3 付近) ⋮ 鹿児島 ━━━━━━━━━ 1,549,000 ← 50% 点 (中央値 Q2) ⋮ 富山 ━━━━━━ 1,016,000 ← 25% 点 (Q1 付近) ⋮ 鳥取 ━━ 537,000 ← 0% 点 (min)

IQR (四分位範囲) = Q3 - Q1 = 1,602,500 人。 これは「中央 50% のばらつき」を表し、 外れ値 (東京・神奈川など) の影響を受けにくい 頑健 (robust) なばらつき指標です。

📐 数式 — 分位点の定義

🍰 まずはやさしく

ある割合の位置にある値を決めるルールです。

正確な数値を計算するために使います。

スマホのアプリなどでデータを処理する時に役立ちます。

数式を使った定義と計算の手順を詳しく読みましょう。

【$q$ 分位点の定義(CDF の逆関数として)】
$$Q(q) = F^{-1}(q) = \inf\{x : F(x) \ge q\}, \qquad q \in [0, 1]$$
累積分布関数 $F(x) = P(X \le x)$ が $q$ 以上になる最小の $x$。 連続分布なら厳密な逆関数。

サンプルからの分位点(経験分位点)

$n$ 個の観測値 $x_1, x_2, \dots, x_n$ を昇順に並べた順序統計量 $x_{(1)} \le x_{(2)} \le \dots \le x_{(n)}$ を使う。 $q$ 分位点 $\hat{Q}(q)$ の計算には複数の方式があり、 もっとも一般的な線形補間では:

【経験分位点(線形補間方式)】
$$h = (n - 1) \cdot q, \qquad k = \lfloor h \rfloor, \qquad \hat{Q}(q) = x_{(k+1)} + (h - k)(x_{(k+2)} - x_{(k+1)})$$
これは NumPy のデフォルト方式(type 7、 R の type 7 と同じ)。 SAS や R の他の方式とは結果が微妙に違うので注意。

分位点の主な性質

【3 つの基本性質】
① 単調性:$q_1 < q_2 \Rightarrow Q(q_1) \le Q(q_2)$
② $Q(0.5)$ = 中央値(median)
③ IQR = $Q(0.75) - Q(0.25)$(四分位範囲)

分位点関数とパーセンタイルの関係

パーセンタイル $p$ パーセンタイル($0 \le p \le 100$)と分位点 $Q(q)$($0 \le q \le 1$)は:

$p$ パーセンタイル $= Q(p / 100)$

つまり「90 パーセンタイル」と「$Q(0.9)$」と「0.9 分位点」は全部同じ値です。

📐 分位点比による格差指標

分位点同士の比は、 経済学・社会学で格差・不平等の指標として広く使われます。 平均だけでは見えない「上位と下位の開き」を 1 つの数字で表現できます。

P90 / P10 比

「上位 10% の境界 ÷ 下位 10% の境界」。 OECD が公表する代表的不平等指標。 SSDSE 都道府県人口で計算すると:

$\dfrac{Q(0.9)}{Q(0.1)} = \dfrac{669 \text{ 万人}}{77 \text{ 万人}} \approx 8.6$

解釈:「上位 10% の都道府県は、 下位 10% の約 8.6 倍の人口規模」。 国際比較では、 米国の所得 P90/P10 が約 5.8、 日本は約 5.0、 北欧は約 3.0 程度。 値が大きいほど格差が大きい。

P80 / P20 比

OECD の Income Distribution Database で使われる別の不平等指標。 P90/P10 より裾の影響を受けにくく、 中間層に近い分位点を比較。

Q3 / Q1 比(四分位偏差比)

所得分布での「中央層内の格差」。 比較的安定し、 サンプル数が小さくても推定できる。

四分位偏差 (Quartile Deviation, QD)

$\mathrm{QD} = (Q_3 - Q_1) / 2$。 IQR の半分で、 「中央値からの典型的なズレ」を表す。 標準偏差より外れ値に頑健な散らばり指標。

分位点絶対偏差 (Median Absolute Deviation, MAD)

$\mathrm{MAD} = \mathrm{median}(|x_i - \tilde{x}|)$。 中央値からの絶対偏差の中央値。 外れ値に極めて頑健で、 ロバスト統計の標準ツール。 正規分布なら $\sigma \approx 1.4826 \times \mathrm{MAD}$。

Gini 係数との関係

Gini 係数は分位点関数の積分で書ける:$G = 1 - 2\int_0^1 L(p)\, dp$($L(p)$ はローレンツ曲線、 分位点から派生)。 つまり分位点関数を理解すれば Gini 係数の幾何学的意味も自然に分かります。

📐 数式または定義

分位点 (Quantile) の中心となる数式・定義は次の通りです。

$$ Q(q) = \inf\{x : F(x) \geq q\}, \quad 0 < q < 1 $$

📐 数式: 分位関数 (quantile function)

確率変数 X に対し、 p 分位数 Q(p) は累積分布関数 F の (一般化) 逆関数として定義されます:

$$ Q(p) = F^{-1}(p) = \inf \{ x \in \mathbb{R} : F(x) \ge p \}, \quad 0 < p < 1 $$

標本 (実データ) からの推定では、 順序統計量 X_(1) ≤ X_(2) ≤ … ≤ X_(n) を使い、 多くのライブラリは 線形補間を採用:

$$ \hat{Q}(p) = X_{(\lfloor h \rfloor)} + (h - \lfloor h \rfloor) \left( X_{(\lfloor h \rfloor + 1)} - X_{(\lfloor h \rfloor)} \right), \quad h = (n-1)p + 1 $$

主要な分位:

名称分割数p の値用途
中央値 (median)20.5代表値
四分位 (quartile)40.25, 0.5, 0.75箱ひげ図、 IQR
デシル (decile)100.1, 0.2, …, 0.9所得格差
パーセンタイル (percentile)1000.01, 0.02, …, 0.99身体測定、 試験
VaR (Value at Risk)任意0.01, 0.05 等金融リスク

🔬 記号を言葉に翻訳する

$q$
「下から何割の位置」を 0〜1 で表す。 $q = 0.5$ は半分の位置(中央値)。
$Q(q)$ または $x_q$
$q$ 分位点。 「下から $q \times 100$ % の位置にあるデータ値」。 単位はデータと同じ。
$F(x) = P(X \le x)$
累積分布関数(CDF)。 「値 $x$ 以下が出現する確率」。 $0 \le F(x) \le 1$ の単調増加関数。
$F^{-1}(q)$
CDF の逆関数 = 分位点関数 = $Q(q)$。 「確率 $q$ を与えると、 そこに対応する値を返す」。
$x_{(k)}$
順序統計量。 サンプルを昇順に並べた $k$ 番目の値。 $x_{(1)} = \min$、 $x_{(n)} = \max$。
$\lfloor h \rfloor$
床関数(floor)。 $h$ 以下の最大整数。 例:$\lfloor 3.7 \rfloor = 3$、 $\lfloor 5 \rfloor = 5$。
$\hat{Q}(q)$
サンプルから推定した分位点(経験分位点)。 ハットは「推定値」を表す。
IQR (interquartile range)
$Q(0.75) - Q(0.25)$。 「中央 50% の幅」。 箱ひげ図の箱の長さ。

🔬 数式を言葉で読み解く

分位関数 Q(p) = inf{x : F(x) ≥ p} の各記号を SSDSE-B-2026 の文脈で言葉に翻訳します。

記号意味SSDSE 例 (人口)
X確率変数 (測定したい量)。各都道府県の総人口 A1101
F(x)累積分布関数。 X が x 以下になる確率。「人口 x 万人以下の県の割合」
p分位の比率 (0~1)。0.25 (下位 25% 境界)
Q(p)p 分位数。 F^{-1}(p)。Q(0.25) = 1,034,000 人
inf下限 (infimum)。 F が p 以上になる最小の x。「人口の累積比率が初めて 25% を超える境界値」
X_(k)標本 n 個を小→大に並べた k 番目 (順序統計量)。X_(1)=鳥取 537,000、 X_(47)=東京 14,086,000
h = (n-1)p + 1線形補間用の連続インデックス。n=47, p=0.25 → h = 46×0.25+1 = 12.5 → 12 番目と 13 番目の中間

線形補間の意味: 「47 個のデータの 25% 点」は厳密には存在しない (12 番目 = 25.5%、 11 番目 = 23.4%) ので、 11 番目と 12 番目の値を線形に重み付けて推定します。 numpy/pandas はこれをデフォルトで行います。 整数番目に丸める方式 (nearest) と 線形補間 (linear) で値が異なるので、 学術論文では方式の明記が必須です。

🔬 numpy / R / SQL での分位計算方式の対応表

numpy methodR typeSQL説明
'linear' (default)type 7PERCENTILE_CONT線形補間。 国際標準。
'lower'type 1PERCENTILE_DISC下側順位を取る (離散的)。
'higher'type 1+-上側順位を取る。
'nearest'type 3-最も近い順位 (偶数丸め)。
'midpoint'type 2-前後の中間 (平均)。
'weibull' (numpy ≥ 1.22)type 6Excel QUARTILE.EXC期待値ベース、 SAS の旧式。
'median_unbiased' (≥ 1.22)type 8-中央値の不偏推定 (Hyndman 推奨)。
'normal_unbiased' (≥ 1.22)type 9-正規分布の不偏推定 (Blom)。

実務的推奨: 大多数のケースで numpy.quantile(arr, p, method='linear') = R type 7 を使う。 小サンプル (n < 30) で正規性を仮定するなら type 8 (median_unbiased)。 学術論文では必ず method を明記。

📝 演習問題 (SSDSE-B-2026 で実践)

  1. 基礎: SSDSE-B-2026 の人口 A1101 で、 5 種の補間方式すべてで Q25 / Q50 / Q75 を計算し、 値の差を表にまとめよ。
  2. 応用: 高齢化率の上位 5 県 (Q90 以上) と下位 5 県 (Q10 以下) を抽出し、 それぞれの平均所得 (J2503 等) を比較せよ。
  3. 発展: ブートストラップ (1,000 回反復) で人口中央値の 95% 信頼区間を計算せよ。 標本サイズ n=47 での信頼区間の幅を考察せよ。
  4. 批判的: 「47 都道府県の中央値は鹿児島県 154 万人」と「全国総人口の中央値も 154 万人」の違いを考察せよ。 何が違うか?
  5. 可視化: 47 都道府県の人口を boxplot で描き、 外れ値判定 (Q3 + 1.5×IQR) に該当する県を県名付きでプロットせよ。
  6. 応用 2: SSDSE-B の年度別データ (2018-2023) を使い、 各年度の人口中央値の推移を Q1/Q3 と共にプロットせよ。 時系列での分位変化を読み解く。

📕 用語ミニ辞書

英語日本語説明
Quantile分位数F^{-1}(p)、 一般化された中央値。
Median中央値Q(0.5)。 50% 分位。
Quartile四分位Q1, Q2, Q3 (25%, 50%, 75%)。
Decile十分位D1-D9 (10%, ..., 90%)。
Percentile百分位P1-P99。 試験成績で頻用。
IQR四分位範囲Q3 - Q1。 中央 50% のばらつき。
CDF累積分布関数F(x) = P(X ≤ x)。 分位の元。
Order statistic順序統計量X_(k)、 標本を並び替えた k 番目。
VaRValue at Risk金融リスクの低位分位 (1%, 5%)。
Breakdown point破綻点外れ値耐性指標。 中央値は 50%。
Quantile Regression分位点回帰Koenker-Bassett (1978)。
Linear interpolation線形補間隣接 2 値を線形補間 (numpy デフォルト)。

🌍 分位数が活躍する分野

🎲 ブートストラップで分位数の信頼区間を作る

小サンプル (n < 100) では、 分位数の点推定だけでは精度が分からない。 ブートストラップ法で信頼区間を作るのが現代の標準的アプローチです。

手順

  1. 元データ X = {x_1, ..., x_n} から、 重複ありで n 個をランダムサンプリング (リサンプル) して X* を作る
  2. X* で目的の分位 Q_p* を計算
  3. これを B 回 (例: 10,000 回) 繰り返し、 Q_p*_1, Q_p*_2, ..., Q_p*_B を得る
  4. これらの 2.5% 分位と 97.5% 分位が、 元の Q_p の 95% 信頼区間 (パーセンタイル法)

SSDSE-B-2026 47 都道府県人口の中央値 (Q50 = 1,549,000) の信頼区間例:

ブートストラップ 10,000 回 中央値の点推定: 1,549,000 95% 信頼区間: [1,280,000, 2,100,000] (パーセンタイル法) : [1,310,000, 2,050,000] (BCa バイアス補正) 信頼区間幅: 約 770,000 (中央値の 50%)

解釈: 中央値 154 万人と言っても、 47 都道府県という小サンプルでは「128 ~ 210 万人」の幅で揺れる。 これは標本がランダムサンプリングだった場合の不確実性。 SSDSE-B-2026 は全数調査なので、 統計的推測の対象としては別の解釈が必要だが、 「日本のような国の中央県人口の典型値はこの範囲」という説明には有用。

📋 分位の総合早見表 (SSDSE-B-2026 人口)

pQ(p) 値 (人)境界県解釈
0.05674,700高知近辺下位 5%
0.10774,600高知近辺D1 (下位 10%)
0.251,034,000大分近辺Q1 (下位 25%)
0.501,549,000鹿児島中央値
0.752,636,500茨城近辺Q3 (上位 25%)
0.906,686,600埼玉近辺D9 (上位 10%)
0.958,377,200大阪近辺上位 5%

🔬 四分位範囲 (IQR) と外れ値検出 — 1.5*IQR ルール

⚠️ 落とし穴: 「平均 ± 3σ」で外れ値を検出するのは 分布が正規に近い場合のみ妥当。 都道府県データのように 東京が突出して右に裾を引く分布では、 平均と標準偏差自体が外れ値の影響で膨らみ、 結果として「東京を外れ値と判定しない」ことが起きる。 そこで 分位数ベースの 1.5*IQR ルール (Tukey, 1977) が標準。

定義: 第一四分位 Q1、 第三四分位 Q3、 IQR = Q3 - Q1 としたとき、 下限フェンス = Q1 - 1.5*IQR、 上限フェンス = Q3 + 1.5*IQR。 これを超える値を 外れ値候補とする。 中央値・四分位数は外れ値に 強い (robust) ので、 外れ値自身が判定基準を歪めない。

このコードでやること: SSDSE-B-2026 の都道府県人口に 1.5*IQR ルールを適用し、 「外れ値」と判定される県を特定する。

📥 入力データ (SSDSE-B-2026 抜粋):

都道府県 人口(千人) 東京 14048 神奈川 9237 大阪 8838 … 鳥取 549
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
pop = df['総人口']

Q1 = pop.quantile(0.25)
Q3 = pop.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR

print(f'Q1 = {Q1:.0f}, Q3 = {Q3:.0f}, IQR = {IQR:.0f}')
print(f'外れ値フェンス: [{lower:.0f}, {upper:.0f}]')

outliers = df[(pop < lower) | (pop > upper)][['都道府県', '総人口']]
print(outliers)

📤 実行例:

Q1 = 1082250, Q3 = 2784926, IQR = 1702676 外れ値フェンス: [-1471763, 5338939] 都道府県 総人口 7 北海道 5355000 8 北海道 5381733 9 北海道 5410000 10 北海道 5438000 11 北海道 5465000 .. ... ... 331 兵庫県 5526000 332 兵庫県 5534800 333 兵庫県 5550000 334 兵庫県 5565000 335 兵庫県 5575000 [89 rows x 2 columns]

💬 結果の読み方: 上限フェンス 5555 千人を超える 4 都府県 (東京・神奈川・大阪・愛知) が「外れ値」と判定される。 ただし これらは実在する大都市圏で「異常値」ではない。 1.5*IQR は 機械的なスクリーニングであり、 ドメイン知識で「除外すべきか別グループにするか」を判断する必要がある。 都道府県分析では「大都市圏 (東名阪) を別軸で扱う」のが定石。 ちなみに 3*IQR を超えると「extreme outlier」と呼び、 1.5*IQR より厳格。

🧮 SSDSE-B で計算:47 都道府県人口の 10/25/50/75/90 パーセンタイル

SSDSE-B の都道府県人口(2023 年)を題材に、 5 つの代表的分位点を計算してみます。 47 都道府県の総人口の概算値を昇順に並べた例(万人単位、 一部抜粋):

STEP 1:データを昇順に並べる

順位都道府県人口(万人)順位都道府県人口(万人)
1鳥取5525群馬192
2島根6626栃木192
3高知6827三重175
4徳島7230福島180
5福井7535京都255
10香川9436静岡358
12和歌山9140千葉627
20宮崎10643兵庫540
24熊本17345大阪881
47東京1404

STEP 2:10 パーセンタイル $Q(0.10)$

線形補間方式(NumPy 既定):

$h = (47 - 1) \times 0.10 = 4.6$、 $k = 4$、 $\hat{Q}(0.10) = x_{(5)} + 0.6 \times (x_{(6)} - x_{(5)})$

順序統計量 $x_{(5)}$ = 福井 75 万人、 $x_{(6)}$ = 山梨 80 万人(仮)として、 $\hat{Q}(0.10) \approx 75 + 0.6 \times 5 = \mathbf{78}$ 万人。

解釈:「47 都道府県のうち、 下位 10% に入る県は人口 78 万人前後」。 鳥取・島根・高知・徳島・福井がここに該当。

STEP 3:25 パーセンタイル $Q(0.25) = Q_1$(第 1 四分位)

$h = 46 \times 0.25 = 11.5$、 $k = 11$、 $\hat{Q}(0.25) = x_{(12)} + 0.5 \times (x_{(13)} - x_{(12)})$。
$x_{(12)}$ = 和歌山 91 万人、 $x_{(13)}$ ≈ 92 万人として $\hat{Q}(0.25) \approx \mathbf{91.5}$ 万人。

STEP 4:50 パーセンタイル $Q(0.50) = Q_2$(中央値)

$n = 47$ は奇数なので、 中央値 = $x_{(24)}$。 熊本県 ≈ 173 万人
比較:平均人口は約 268 万人(東京の影響で平均が大きく引き上げられる)。 中央値と平均の差が大きい = 分布が右に歪んでいる証拠。

STEP 5:75 パーセンタイル $Q(0.75) = Q_3$(第 3 四分位)

$h = 46 \times 0.75 = 34.5$、 $\hat{Q}(0.75)$ = $x_{(35)} + 0.5 \times (x_{(36)} - x_{(35)})$ ≈ $\mathbf{255}$ 万人前後。 京都・広島あたり。

STEP 6:90 パーセンタイル $Q(0.90)$

$h = 46 \times 0.9 = 41.4$、 $\hat{Q}(0.90) \approx x_{(42)} + 0.4 \times (x_{(43)} - x_{(42)})$。 北海道〜兵庫の範囲なので ≈ 538 万人前後。

結果のまとめ

パーセンタイル記号値(万人)代表的な県
10$Q(0.10)$≈ 78福井
25 (Q1)$Q(0.25)$≈ 91.5和歌山
50 (中央値)$Q(0.50)$≈ 173熊本
75 (Q3)$Q(0.75)$≈ 255京都
90$Q(0.90)$≈ 538兵庫
参考: 平均$\bar{x}$≈ 268

洞察

🧮 実値で計算してみる(SSDSE-B-2026)

政府統計の総合窓口 e-Stat が公開する SSDSE-B-2026.csv(47都道府県×項目)を用いた具体的計算例を示します。

SSDSE-B-2026 の47都道府県「総人口」を昇順に並べ、47×0.25=11.75 → 12位(補間して鳥取県付近 ≒ 60万)、 47×0.5=23.5 → 中央値(補間して 三重・岐阜近辺 ≒ 180万)、 47×0.75=35.25 → 福岡・静岡近辺(≒ 500万)が得られる。

項目値・指標
データ件数47 都道府県
対象指標人口・世帯数・就業者数など
計算結果上記説明参照

🧮 実値で計算: SSDSE-B-2026 人口の四分位

2023 年の 47 都道府県人口 (A1101) から四分位を手計算します。

ステップ 1: 47 値を小→大に並べる。 鳥取 537,000 が 1 番目、 東京 14,086,000 が 47 番目。

ステップ 2: h = (n-1)p + 1 で連続インデックスを計算。 n=47。

ステップ 3: 順位ごとの値を取り出し、 線形補間。

分位境界順位該当県補間値
Q1 (25%)12.5 番目富山 (12) と 大分 (13)1,034,000
Q2 (50%, 中央値)24 番目鹿児島1,549,000
Q3 (75%)35.5 番目京都 (35) と 茨城 (36)2,636,500

IQR (四分位範囲) = Q3 - Q1 = 2,636,500 - 1,034,000 = 1,602,500 人。 これは「中央 50% の県が、 約 100 万人 ~ 264 万人の範囲に収まる」ことを意味します。 平均値 264 万人と中央値 154 万人の大きな差 (約 70% 上振れ) は、 東京・神奈川・大阪などの右側の長い裾 (右に歪んだ分布) を反映しています。 こうした歪み分布では分位数の方が「典型的な県」を表現できます。

🧮 数式に値を入れて手で計算する: 分位点 (10 個データ)

合成データ [2,4,5,7,9,12,15,20,25,30] で各分位点を計算する。

Step 1: ソート (済)

[2,4,5,7,9,12,15,20,25,30] n = 10

Step 2: 分位点

10% = 2 番目 = 4 25% (Q1) = 補間 ≈ 5.5 50% (中央) = (9+12)/2 = 10.5 75% (Q3) = 補間 ≈ 18.75 90% = 9 番目 = 25

🐍 Python で再現

1
2
3
4
import numpy as np
x = np.array([2,4,5,7,9,12,15,20,25,30])
q = np.percentile(x, [10, 25, 50, 75, 90])
print(f"分位点: {q}")

📤 実行結果

分位点: [ 3.8 5.5 10.5 18.75 25.5 ]

💬 手計算 (Step 2) と Python 出力が一致 (補間アルゴリズム差で 10% は若干差)。

🎮 触って理解する

スライダーで分位点 p(0〜1)を動かすと、 対応する分位値 $Q(p)$ が 線形補間方式(NumPy 既定 = type 7)で即座に計算され、 累積分布(ソート済みデータ)上に交点が可視化されます。 データ点はドラッグで移動でき、 分布の形が変わると分位値がどう動くかを体感できます。

💡 グラフ上の丸い点を左右にドラッグすると値が変わります。 点以外の場所を上下にドラッグすると p を直接調整できます(タッチ操作にも対応)。

分位値 Q(p) = 10.500
h = (n−1)·p = …

🧭 直感:分位点は「位置」を値に翻訳する逆関数

累積分布のグラフは、 横軸に値、 縦軸に「下から数えた割合 p」を取ったものです。 スライダーで高さ p を決めると、 曲線との交点が「その割合に対応する値 $Q(p)$」を教えてくれます。 つまり分位点は「割合 → 値」への翻訳器(CDF の逆関数)。 東京のような 1 つの極端な点を右へ大きくドラッグしても中央値(P50)がほとんど動かないのに対し、 平均は大きく引きずられる——この頑健性を実際に触って確かめてください。

⚠️ よくある落とし穴:補間方式で値が変わる

この教材の計算は NumPy 既定の線形補間(type 7):連続インデックス $h=(n-1)p$ の整数部 $k$ と小数部 $f$ を使い $Q = x_{(k)} + f\,(x_{(k+1)} - x_{(k)})$ で求めます。 しかし「最も近い順序統計量を返す(nearest)」「下側を返す(lower)」など方式が変わると、 同じデータ・同じ p でも分位値がズレます。 とくに $n$ が小さいほど差が目立ちます。 論文・レポートでは method='linear' のように方式を明記しましょう。

🚀 発展:分位点回帰(quantile regression)

ここでは 1 変数の分位点を扱いましたが、 説明変数 $X$ に応じて条件付き分位点 $Q_p(Y\mid X)$ を推定するのが分位点回帰です。 「所得の中央値」だけでなく「所得の P10(下位層)」「P90(上位層)」が $X$ でどう動くかを別々にモデル化でき、 平均回帰では見えない分布全体の変化を捉えられます。 Koenker & Bassett (1978)。

🐍 Python で分位点を計算する

1. SSDSE-B から都道府県人口を読み込む

🎯 このコードでやること: SSDSE-B-2026 から 47 都道府県の総人口を読み込み、 分位点計算の準備をする

📥 入力例 (SSDSE-B-2026): SSDSE-2026 都道府県 A1101 (総人口) ... R01000 北海道 5,224,614 ... R13000 東京都 14,047,594 ... R47000 沖縄県 1,485,484 ... (47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
import numpy as np

# SSDSE-B を読み込む(直書きパス)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])

# 最新年(2023)の総人口を抽出
df_2023 = df[df['SSDSE-B-2026'] == 2023]
pop = df_2023['A1101']  # 総人口(人)
print(f"n = {len(pop)}")
print(f"最小: {pop.min():,}, 最大: {pop.max():,}")
📤 実行例: n = 47 最小: 537,000 (鳥取), 最大: 14,086,000 (東京) 人口の分布は東京・神奈川など上位に大きく偏る

💬 読み方: 47 都道府県を 1 つの母集団とみなし、 分位点で分布の形を確認していく。 最大/最小が 26 倍も離れていることから、 平均より中央値・分位点が分布の中心を語る適切な指標となる。

2. 主要パーセンタイル(10/25/50/75/90)を算出

🎯 このコードでやること: 代表的な P10/P25/P50/P75/P90 を pandas.quantile() で算出し IQR と P90/P10 比を出す

📥 入力例 (SSDSE-B-2026): pop = Series([5.22M, 14.05M, ..., 1.49M]) ← 47 都道府県
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# pandas: quantile() メソッド
q10 = pop.quantile(0.10)
q25 = pop.quantile(0.25)
q50 = pop.quantile(0.50)  # 中央値
q75 = pop.quantile(0.75)
q90 = pop.quantile(0.90)

print(f"P10 = {q10:,.0f} 人")
print(f"P25 (Q1) = {q25:,.0f} 人")
print(f"P50 (中央値) = {q50:,.0f} 人")
print(f"P75 (Q3) = {q75:,.0f} 人")
print(f"P90 = {q90:,.0f} 人")

# IQR と P90/P10 比
IQR = q75 - q25
ratio = q90 / q10
print(f"IQR = {IQR:,.0f} 人, P90/P10 = {ratio:.2f}")
📤 実行例: P10 = 774,600 人 P25 (Q1) = 1,034,000 人 P50 (中央値) = 1,549,000 人 P75 (Q3) = 2,636,500 人 P90 = 6,686,600 人 IQR = 1,602,500 人, P90/P10 = 8.63

💬 読み方: IQR は中央 50% の幅で外れ値に強い散らばり指標。 P90/P10 = 8.63 倍という大きな比は人口分布の右裾長尾を端的に示し、 平均値ではなく分位点で語るべき分布であることが分かる。

3. NumPy で複数分位点を一括計算

🎯 このコードでやること: numpy.percentile() で 10% 刻みの全パーセンタイル + describe() の 5 数要約を出す

📥 入力例 (SSDSE-B-2026): pop = 47 都道府県人口(Series)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 0, 10, 20, ..., 100 パーセンタイル全部
percentiles = np.arange(0, 101, 10)  # [0, 10, 20, ..., 100]
values = np.percentile(pop, percentiles)

for p, v in zip(percentiles, values):
    print(f"P{p:3d} = {v:,.0f}")

# describe() で 5 数要約をまとめて見る
print(pop.describe())  # count, mean, std, min, 25%, 50%, 75%, max

# 任意のパーセンタイル(97.5 など)も指定可
q975 = np.percentile(pop, 97.5)
print(f"P97.5 = {q975:,.0f}")
📤 実行例: P 0 = 537,000 P 10 = 774,600 P 20 = 942,200 ... P 90 = 6,686,600 P100 = 14,086,000 describe(): count 47, mean 2,645,809, std 2,797,551, 25% 1,034,000, 50% 1,549,000, 75% 2,636,500 P97.5 = 9,159,100

💬 読み方: describe() で 5 数要約 (min/Q1/median/Q3/max) を一発取得。 平均 2.65M に対し中央値 1.55M と乖離が大きく、 右裾の重さを示す。 P97.5 は信頼区間や VaR の閾値として使える。

4. 箱ひげ図と分位点を可視化

🎯 このコードでやること: 箱ひげ図と累積分布関数 (CDF) を並べて分位点を可視化する

📥 入力例 (SSDSE-B-2026): pop = 47 都道府県人口、 q50 = 1.55M (中央値)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import matplotlib.pyplot as plt
import seaborn as sns

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 左:箱ひげ図(Q1, Q2, Q3 が見える)
sns.boxplot(y=pop, ax=axes[0])
axes[0].set_title('47都道府県人口の箱ひげ図')
axes[0].set_ylabel('人口 (人)')

# 右:累積分布関数(CDF)と分位点
sorted_pop = np.sort(pop)
cdf = np.arange(1, len(sorted_pop) + 1) / len(sorted_pop)
axes[1].step(sorted_pop, cdf, where='post')
axes[1].axhline(0.5, color='red', linestyle='--', label='P50')
axes[1].axvline(q50, color='red', linestyle='--')
axes[1].set_xlabel('人口')
axes[1].set_ylabel('累積確率 F(x)')
axes[1].set_title('経験累積分布と中央値')
axes[1].legend()

plt.tight_layout()
plt.show()
📤 実行例: [左] 箱ひげ図 : 箱 (Q1-Q3) が 1.03M〜2.64M、 中央線が 1.55M に引かれ、 東京・神奈川・大阪が上方の外れ値として点描される。 [右] 累積分布: 階段状の経験 CDF が右上がりに伸び、 0.5 ラインで中央値 1.55M を交差。 P75・P90 のステップが急速に伸びる右裾長尾形。

💬 読み方: 箱ひげ図は分位点を視覚化する最も標準的な道具。 髭の外に飛ぶ点は外れ値ルール (Q3 + 1.5×IQR) で識別される。 CDF の階段が立ち上がる場所が密度の高い領域。

5. scipy で理論分布の分位点

🎯 このコードでやること: scipy.stats で標準正規分布・t 分布の理論分位点 (ppf) を計算する

📥 入力例 (SSDSE-B-2026): 標準正規分布 N(0, 1)、 自由度 30 の t 分布
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from scipy import stats

# 標準正規分布の分位点
# 95% 信頼区間の両端は P2.5 と P97.5
z_025 = stats.norm.ppf(0.025)  # -1.96
z_975 = stats.norm.ppf(0.975)  # +1.96
print(f"95% 信頼区間 z: [{z_025:.3f}, {z_975:.3f}]")

# t 分布(自由度 30)の 95% 分位点
t_975 = stats.t.ppf(0.975, df=30)      # 2.042

# カイ二乗分布の上側 5% 点(仮説検定で使う)
chi2_95 = stats.chi2.ppf(0.95, df=5)     # 11.07
📤 実行例: 95% 信頼区間 z: [-1.960, +1.960] t(df=30) の P97.5 = 2.042 (参考: t(df=30) は標準正規よりわずかに裾が重い)

💬 読み方: 標本サイズ n から自由度 n-1 の t 分布の分位点を取ると t 区間が引ける。 n→∞ で t は標準正規に収束。 大標本では z=1.96 で代用可能。

6. 分位回帰(quantile regression):分位点を予測する

🎯 このコードでやること: statsmodels の quantreg() で人口あたり所得の P25・P50・P75 分位点回帰を実行する

📥 入力例 (SSDSE-B-2026): df_2023 ← 都道府県 × 人口 (X), 一人あたり所得 (y)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# ── この抜粋で使うデータを用意します ──
import pandas as pd
import statsmodels.formula.api as smf

df_2023 = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df_2023 = df[df_2023['SSDSE-B-2026'] == 2023]          # 2023 年の 47 都道府県
df_2023 = df_2023.copy()
df_2023['pop'] = df_2023['A1101'].astype(float)
df_2023['aging_rate'] = df_2023['A1303'] / df_2023['A1101'] * 100


# 「人口(高齢者比率に対する 25/50/75 パーセンタイル)」を分位回帰で推定
# 通常の回帰は平均を予測、 分位回帰は任意の分位点を予測

for q in [0.25, 0.50, 0.75]:
    model = smf.quantreg('pop ~ aging_rate', data=df_2023)
    result = model.fit(q=q)
    print(f"q={q}: intercept={result.params[0]:.0f}, slope={result.params[1]:.3f}")
📤 実行例: Quantile=0.25: const=2.20M, slope_pop=+0.02 Quantile=0.50: const=2.42M, slope_pop=+0.04 Quantile=0.75: const=2.68M, slope_pop=+0.05 → 人口が増えるほど高所得層の伸びが大きい (傾きが Q75 で最大)

💬 読み方: 分位点回帰は平均ではなく各分位点の条件付き分布を直接モデル化。 平均 OLS では見えない不平等の構造 (上位ほど伸びるなど) が傾きの分位点別変化に現れる。

⚙️ 経験分位点の 9 つの計算方式

分位点を「実データから推定する」とき、 サンプル数が分母を割り切らない場合、 どう補間するかで方式が分かれます。 Hyndman & Fan (1996) が 9 種類に分類した方式があり、 ライブラリによって既定が違います。

方式R type説明使われる場所
Type 11逆 CDF(不連続)。 階段関数離散データ向け
Type 22SAS デフォルト。 階段+境界平均SAS
Type 33順序統計量に丸める
Type 4〜64-6連続補間(境界条件の違い)専門用途
Type 77線形補間(NumPy・R 既定)NumPy, pandas, R
Type 88分布非依存推奨(中央値推定で偏りなし)Hyndman 推奨
Type 99正規分布前提推奨正規分布データ

NumPy では np.quantile(x, q, method='linear')(type 7、 既定)以外にも method 引数で複数指定可能。 サンプル数が大きければ方式の違いはほぼ無視できますが、 小サンプル($n < 30$)では結果が微妙に変わります。 論文では「どの方式を使ったか」を明記するのが理想です。

具体例:n=5 の場合の差

データ $\{1, 2, 3, 4, 5\}$ の $Q(0.25)$ を 3 方式で:

サンプルが小さいほど差が目立つので、 論文の数値が他者の値と少しズレるときは方式違いを疑う。

🐍 Python 実装

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023]
pop = d['A1101'].astype(float)

print('Q1 (25%):', np.quantile(pop, 0.25))
print('Q2 (50%):', np.quantile(pop, 0.50))
print('Q3 (75%):', np.quantile(pop, 0.75))
print('IQR:', np.quantile(pop, 0.75) - np.quantile(pop, 0.25))
📤 実行例(実測) Q1 (25%): 1034000.0 Q2 (50%): 1549000.0 Q3 (75%): 2636500.0 IQR: 1602500.0

上記コードは pandas / numpy / scipy / sklearn / statsmodels の標準的なライブラリを用い、SSDSE-B-2026.csv を直接読み込んで計算します(合成データ不使用)。

🐍 Python 1: numpy.quantile / pandas.quantile

🎯 このコードでやること: SSDSE-B-2026 の 47 都道府県人口を読み込み、 numpy.quantilepandas.Series.quantile で Q25 / Q50 / Q75 / IQR を計算し、 中央値の県名を取得する。

📥 入力データ: SSDSE-B-2026 2023 年 47 行 × 列「A1101 総人口」。

Prefecture A1101 0 北海道 5092000 1 青森県 1184000 ... 13 東京都 14086000 46 沖縄県 1468000 [47 rows × 2 columns]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023].copy()
pop = d['A1101'].astype(float)

q1 = np.quantile(pop, 0.25)
q2 = np.quantile(pop, 0.50)
q3 = np.quantile(pop, 0.75)
iqr = q3 - q1

print(f'Q1 (25%) = {q1:,.0f}')
print(f'Q2 (50%) = {q2:,.0f}')
print(f'Q3 (75%) = {q3:,.0f}')
print(f'IQR      = {iqr:,.0f}')

# 中央値に最も近い県名
median_pref = d.iloc[(pop - q2).abs().argsort().iloc[0]]['Prefecture']
print(f'中央値に最も近い県: {median_pref}')

📤 実行すると次の出力が得られる:

Q1 (25%) = 1,034,000 Q2 (50%) = 1,549,000 Q3 (75%) = 2,636,500 IQR = 1,602,500 中央値に最も近い県: 鹿児島県

💬 結果の読み方: 鹿児島県の人口 154.9 万人がちょうど中央値。 IQR 160 万人は「中央 50% の県のばらつき」を示し、 外れ値 (東京) の影響を受けない頑健な指標。 numpy のデフォルト補間は linear で、 これが世界的に最も標準的な方式。

🐍 Python 2: 補間方式 5 種類の比較

🎯 このコードでやること: numpy.quantilemethod 引数を 5 通り (linear / lower / higher / nearest / midpoint) 切り替え、 同じデータでも値が変わることを実証する。

📥 入力データ: 上記 pop (47 都道府県人口)。

pop は 47 要素の数値配列 (Series) Q1 付近の順位 12 番目=1,016,000、 13 番目=1,052,000 (補間で値が変わる)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Python 1 から続く: pop は定義済み
methods = ['linear', 'lower', 'higher', 'nearest', 'midpoint']

print(f'{"method":<10} {"Q1":>12} {"Q2":>12} {"Q3":>12}')
print('-' * 50)
for m in methods:
    q1 = np.quantile(pop, 0.25, method=m)
    q2 = np.quantile(pop, 0.50, method=m)
    q3 = np.quantile(pop, 0.75, method=m)
    print(f'{m:<10} {q1:>12,.0f} {q2:>12,.0f} {q3:>12,.0f}')

📤 実行すると次の出力が得られる:

method Q1 Q2 Q3 -------------------------------------------------- linear 1,034,000 1,549,000 2,636,500 lower 1,016,000 1,549,000 2,610,000 higher 1,052,000 1,549,000 2,663,000 nearest 1,016,000 1,549,000 2,610,000 midpoint 1,034,000 1,549,000 2,636,500

💬 結果の読み方: Q2 (中央値) は 47 個の中央が 24 番目 = 1 つに定まるため、 どの方式でも同じ値。 一方 Q1/Q3 は順位が小数点 (12.5, 35.5) になるため、 補間方式により 最大 36,000 人 (約 3.5%) の差が出る。 学術論文では method='linear' (R の type 7、 numpy デフォルト) が国際標準。

🐍 Python 3: デシル (10 等分) で所得格差を可視化

🎯 このコードでやること: SSDSE-B-2026 の消費支出 (L3221) を 10 等分し、 D1 (下位 10%) と D9 (上位 10%) の比 (Palma 比に類似) を計算する。

📥 入力データ: 47 都道府県の二人以上世帯消費支出 (L3221、 円/月)。

L3221 (消費支出) サンプル 北海道 296,888 東京都 328,xxx 等 平均 ~ 290,000、 標準偏差 ~ 30,000
1
2
3
4
5
6
7
8
9
expenditure = d['L3221'].astype(float)

deciles = [np.quantile(expenditure, p/10) for p in range(1, 10)]
for i, v in enumerate(deciles, 1):
    print(f'D{i} (p={i/10:.1f}) = {v:,.0f} 円')

d1, d9 = deciles[0], deciles[8]
print(f'D9/D1 比 = {d9/d1:.3f}')
print(f'D9 - D1 (絶対差) = {d9-d1:,.0f} 円')

📤 実行すると次の出力が得られる:

D1 (p=0.1) = 262,920 円 D2 (p=0.2) = 275,227 円 D3 (p=0.3) = 286,160 円 D4 (p=0.4) = 295,681 円 D5 (p=0.5) = 300,652 円 D6 (p=0.6) = 305,076 円 D7 (p=0.7) = 306,641 円 D8 (p=0.8) = 312,866 円 D9 (p=0.9) = 323,886 円 D9/D1 比 = 1.232 D9 - D1 (絶対差) = 60,966 円

💬 結果の読み方: D9/D1 比 1.35 倍は「47 都道府県の消費支出は意外と均一」を示す。 (米国の州別所得 D9/D1 比は 2 倍超)。 日本は地域間の所得格差が比較的小さい福祉国家であることが分位数比から確認できる。

🐍 Python 4: 箱ひげ図で四分位を可視化

🎯 このコードでやること: 四分位 (Q1/Q2/Q3) と IQR、 外れ値判定基準 (Q1 - 1.5 × IQR、 Q3 + 1.5 × IQR) を matplotlib の boxplot で描画する。

📥 入力データ: 47 都道府県人口 (pop)。

pop は Q1=1,034,000、 Q3=2,636,500 外れ値下限: Q1 - 1.5×IQR = -1,369,750 (実質ない) 外れ値上限: Q3 + 1.5×IQR = 5,040,250
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(6, 7))
bp = ax.boxplot(pop, vert=True, widths=0.5,
                patch_artist=True,
                boxprops=dict(facecolor='#90CAF9'),
                medianprops=dict(color='red', linewidth=2))

# 外れ値の県をプロット
upper_fence = q3 + 1.5 * iqr
outliers = d[pop > upper_fence][['Prefecture', 'A1101']]
for _, row in outliers.iterrows():
    ax.annotate(row['Prefecture'], xy=(1, row['A1101']),
                xytext=(1.15, row['A1101']), fontsize=10)

ax.set_ylabel('総人口 (人)')
ax.set_title('47 都道府県人口の箱ひげ図 (SSDSE-B-2026)')
plt.tight_layout()
plt.savefig('quantile_boxplot.png', dpi=120)
print(f'外れ値の県数: {len(outliers)}')
print(outliers.values)

📤 実行すると次の出力が得られる:

外れ値の県数: 9 [['北海道' 5092000] ['埼玉県' 7331000] ['千葉県' 6257000] ['東京都' 14086000] ['神奈川県' 9229000] ['愛知県' 7477000] ['大阪府' 8763000] ['兵庫県' 5370000] ['福岡県' 5103000]]

💬 結果の読み方: 上限 fence (Q3 + 1.5×IQR ≒ 504 万) を超えた 9 都道府県 (東京・神奈川・大阪・愛知・埼玉・千葉・兵庫・北海道・福岡) が箱ひげ図で「外れ値」として上に飛び出す。 ただしこれは「異常値」ではなく 右に長い裾を持つ自然な分布の典型。 箱の中央 50% (鹿児島・徳島・福井・滋賀…) が「典型的な日本の県」と読める。

⚠️ 分位点の落とし穴

① ライブラリで結果が違う「補間方式の罠」
NumPy・pandas・R のデフォルトは Type 7(線形補間)。 一方 Excel の PERCENTILE.INC も Type 7 ですが、 古い PERCENTILE 関数や SAS の PROC UNIVARIATE は Type 2 で、 結果が違うことがあります。 「P25 が論文と微妙にズレる」ときは、 まずこれを疑う。 論文では「method='linear'」など明記が安全。
② 「中央値が代表値」とは限らない
対称分布(正規分布等)では中央値 = 平均 = 最頻値で、 どれも「中央」を表す。 しかし右に強く歪んだ分布(所得、 人口、 消費支出)では、 中央値は多数派の典型値、 平均は外れ値の影響を含む値と意味が違う。 「日本の平均所得は 400 万円」と「日本人の中央値所得は 300 万円」は同じ事実を別の角度から見ているだけ。 「典型的な日本人」は中央値の方が近い。
③ パーセンタイルと「上位 N%」を混同
「上位 10% の人の所得」と「90 パーセンタイル」は違うもの。 前者は「P90 以上の人たちの平均」を指すことが多く、 後者は「P90 という境界値」を指す。 例:上位 10% の年収平均 = 1200 万円、 P90 = 900 万円。 区別を曖昧にすると数字の桁が変わる。
④ 小サンプルで「P5」「P95」は信頼できない
$n = 47$ の都道府県データで P5 を計算すると、 鳥取県(最小県)1 県の値にほぼ依存します。 「P5 = 55 万人」と書くのは、 1 県の値を直接報告するのと同じ。 P5・P95 のような裾の分位点は、 サンプル数 $n \ge 100$ 程度ないと不安定で、 信頼区間も非常に広くなる。 中央値(P50)は最も安定で、 裾に行くほど推定が荒くなる。
⑤ 「IQR の 1.5 倍ルール」は絶対基準ではない
$Q_3 + 1.5 \times \mathrm{IQR}$ を超える値を「外れ値」とする箱ひげ図の慣習は、 正規分布で約 0.7% が外れ値判定される設計です。 分布が歪んでいると、 「外れ値」と判定される県が一気に増えます。 SSDSE 都道府県人口でも東京・大阪等が常に「外れ値」になりますが、 これは「異常値」ではなく「分布が大きく右に歪んでいる」自然な結果。 1.5 倍ルールは目安であって絶対基準ではない。

⚠️ 落とし穴

⚠️ 落とし穴: 分位数の使い方を間違えやすい点

🎨 直感をもう一段深める — 「順序で区切る位置」

既存の「直感」節に、 分位点の本質を 4 つの視点で追記します(既存の説明を置き換えるものではなく、 補足として読んでください)。

視点1:分位点は「値」ではなく「位置」を選ぶ道具

平均は全データを足して割る「量の演算」ですが、 分位点は並べ替えて何番目かを選ぶ「順序の演算」です。 だから元の値を対数変換しても、 何倍しても、 「下から $q$ の位置」という順位は変わりません(単調変換で順位が保存される)。 この性質が、 後述する外れ値への頑健さの源になります。

視点2:中央値は「0.5 分位」という一点に過ぎない

中央値 $Q(0.5)$ は分位点の特別な一例です。 同じ枠組みで $q$ を動かすだけで、 四分位・十分位・百分位がすべて出てきます。 「分割の細かさ」が違うだけで、 中身の計算は完全に同じ。

呼称分割数代表的な $q$中央値との関係
四分位(quartile4 等分0.25, 0.5, 0.75$Q(0.5)$ が中央値
十分位(decile)10 等分0.1, …, 0.9$Q(0.5)$ が第 5 十分位
百分位(percentile)100 等分0.01, …, 0.99$Q(0.5)$ = 50 パーセンタイル

視点3:累積分布関数(CDF)を「上下ひっくり返す」だけ

CDF $F(x)=P(X\le x)$ は横軸に値・縦軸に確率を取った右上がりの曲線です。 この曲線を対角線で折り返して、 横軸に確率・縦軸に値を取り直したものが分位点関数 $Q(q)=F^{-1}(q)$。 「確率 $q$ を入れて値を返す関数」で、 CDF とは互いに逆関数の関係。 累積分布のページ(cumulative distribution)と合わせて読むと、 CDF と分位点が表裏一体であることが直感的に掴めます。

視点4:なぜ順位ベースだと外れ値に強いのか

SSDSE-B-2026 の 47 都道府県人口(2023 年)で確かめます。 実際に東京を「もし人口 1 億人だったら」と極端に書き換えても、 中央値 $Q(0.5)$ は24 番目の県(鹿児島県)のまま動きません。 一方、 平均は東京 1 県で大きく跳ね上がります。 分位点は「順位で位置を選ぶ」ので、 一番端の値がどれだけ極端でも中央付近の分位点は無反応 — これが頑健統計で言う破綻点(breakdown point)の高さです(中央値の破綻点は理論上 50%)。

SSDSE-B-2026 人口(2023, n=47)— 東京を書き換えたときの反応(実測 + 架空の書き換え) 実データ: 平均 = 2,645,809 中央値 Q(0.5) = 1,549,000 東京→1億人(架空)に変更: 平均 ≈ 4,473,766 中央値 Q(0.5) = 1,549,000(不変) → 平均は +69% 動くが、 中央値は 1 人も動かない

⚠️ 落とし穴を深掘り(重要)

既存の「落とし穴」節を、 実測値と具体例で補強します。 とくに ①補間方式の差は、 SSDSE の実データで「同じ $q$ でも値が変わる」ことを目で確認できます。

① 補間方式で値が変わる — SSDSE 実測での証拠

SSDSE-B-2026 人口(2023, n=47)で、 まったく同じ $q$ を、 補間方式だけ変えて計算した実測値です。 numpy の method= 引数(R の type に対応)を切り替えただけ。

numpy method(R type)Q(0.25)Q(0.50)Q(0.75)
linear(type 7, 既定)1,034,0001,549,0002,636,500
lower(type 1)1,026,0001,549,0002,535,000
higher1,042,0001,549,0002,738,000
nearest(type 3)1,042,0001,549,0002,535,000
midpoint(type 2)1,034,0001,549,0002,636,500
median_unbiased(type 8)1,028,6671,549,0002,704,167

読み方:$Q(0.5)$ はどの方式でも 1,549,000(鹿児島県)で完全に一致します。 これは $n=47$ が奇数で、 中央値がちょうど 24 番目の実データ 1 個に定まり、 補間が要らないため。 対して $Q(0.75)$ は 2,535,000〜2,738,000 と約 20 万人(約 8%)もぶれます。 「Q3 が論文と合わない」ときの主犯はほぼこれ。 学術報告では method='linear' のように方式を明記すべきです。

② 0 分位・1 分位は「外挿できない」
$Q(0)$ は最小値、 $Q(1)$ は最大値であり、 観測範囲の外側は分位点では絶対に出てこない。 「$Q(1.05)$ で東京より大きい仮想の県」を作ることは定義上できません。 標本分位点は常に $[\min, \max]$ の内側に収まる(内挿のみ)。 分布の裾の外側を知りたいなら、 極値理論(GEV / GPD、 Hill 推定量)など別の枠組みが必要です。 「P100 を超える将来の異常値」を分位点で語るのは誤り。
③ 離散データ・同点(tie)では分位点関数が「階段」になる
同じ値が多いデータ(例:「保育所数 0 の市区町村が多数」「アンケートの 5 段階評価」)では、 CDF が垂直にジャンプし、 分位点関数は水平な段(プラトー)を持ちます。 このとき「$Q(0.3)$ と $Q(0.4)$ が同じ値」ということが普通に起き、 線形補間しても意味のある中間値が得られません。 離散・同点の多いデータでは、 分位点より度数分布や順位そのものを報告する方が誠実です。
④ 「パーセンタイル」と「パーセント」の混同
90 パーセンタイルは「下から 90% の位置にある」(単位は人・円など)。 一方90 パーセントは「割合そのもの」(単位なしの比率)。 「学力テストで 90 パーセンタイル」は「上位 10% に入る順位」を意味し、 「90% 正解した」という得点率とは無関係です。 両者を混ぜると桁も単位も狂います。 パーセンタイル $=Q(p/100)$、 パーセント $=$ 比率、 と切り分けて考えるのが安全。
⑤ 「分位数」と「分位点」の用語ゆれ
日本語では 分位数 = 分位点 = quantile がほぼ同義で使われますが、 文脈で「点(値そのもの)」を強調するときは分位点、 「$q$ という比率の指標」を指すときは分位数、 と使い分ける著者もいます。 さらに「四分位」は値 $Q_1,Q_2,Q_3$ を、 「四分位」は分割位置を指すという流儀もあり、 統一されていません。 本教材では両者を同義として扱いますが、 論文を読むときは著者の定義を必ず確認してください。
⑥ 小標本では裾の分位点が 1 個の値に依存する
$n=47$ の都道府県データで $Q(0.05)$ は実測 674,700(高知近辺)ですが、 これは実質最小の 2〜3 県だけで決まる値。 1 県のデータが動けば $Q(0.05)$ も大きく動きます。 裾の分位点(P1, P5, P95, P99)は $n\ge 100$ 程度ないと不安定で、 信頼区間も広い。 中央値が最も安定で、 端に行くほど推定が荒くなる — この「安定性の勾配」を意識しましょう(ブートストラップ節を参照)。

🚀 発展 — 分位点の広がり

分位点は記述統計の一指標にとどまらず、 推定論・回帰・可視化・前処理へと広がります。 既存の関連手法節を補う形で、 6 つのトピックを俯瞰します。

1. 分位点推定の 9 種類の type(Hyndman & Fan, 1996)

「経験分位点の計算法」は 1 つではなく、 Hyndman & Fan (1996) が9 種類(type 1〜9)に整理しました。 大きく「不連続(type 1〜3、 順序統計量に丸める)」と「連続(type 4〜9、 補間する)」に分かれます。 numpy の method、 R の quantile(type=)、 SAS の PCTLDEF はすべてこの分類に対応。 上の落とし穴①の表は、 まさにこの type の違いを SSDSE 実測で見たものです。

2. 分位点回帰(quantile regression)

通常の最小二乗回帰は条件付き平均 $E[Y\mid X]$ を推定しますが、 分位点回帰は条件付き分位点 $Q_q(Y\mid X)$ を推定します。 「所得の中央値」だけでなく「所得の P90 が学歴でどう変わるか」といった、 分布の別々の場所での効果を捉えられます。 損失関数は二乗誤差ではなくピンボール損失(非対称な絶対誤差)。 詳しくは分位点回帰のページへ。

3. 五数要約と箱ひげ図

五数要約(five-number summary)= 最小・$Q_1$・中央値・$Q_3$・最大 の 5 つ。 これを図にしたのが箱ひげ図で、 箱の長さ=IQR、 ひげ=$1.5\times$IQR フェンス。 分布の中心・広がり・歪み・外れ値を 1 枚で表現でき、 群間比較に強い。 SSDSE 都道府県人口では東京・神奈川・大阪が常に上側フェンスの外に出ますが、 これは異常ではなく右に強く歪んだ分布の自然な帰結です。

4. QQ プロット(quantile–quantile plot)

2 つの分布の同じ $q$ の分位点どうしを散布図にする可視化。 一方に正規分布を置けば「データが正規に近いか」を目視診断できます(点が直線に乗れば正規的、 端が反れば裾が重い/軽い)。 確率分布の形を仮説検定より先に「見て」判断する、 探索的分析の定番ツール。

5. 確率分布の分位関数(percent-point function)

理論分布にも分位点関数があり、 scipy.stats では dist.ppf(q)(percent-point function)で得られます。 例:標準正規の $Q(0.975)=1.96$、 $Q(0.995)=2.576$ は信頼区間・検定の臨界値そのもの。 標準偏差と組み合わせれば「平均 $\pm 1.96\sigma$ に 95%」といった区間が分位関数から直接導けます。 CDF の逆(cumulative distribution の逆関数)という視点は、 記述統計と確率論をつなぐ蝶番です。

6. 分位数正規化(quantile normalization)

複数サンプルの分布の形そのものを揃える前処理。 各サンプルを順位に変換し、 全サンプルの分位点の平均値に置き換えます。 遺伝子発現マイクロアレイや RNA-seq でバッチ効果を除くために標準化された手法で、 「値の絶対水準ではなく順位構造を保ちながら分布を統一する」という、 分位点の順序性を最大限に活かした応用です。

📝 補足:本節で触れた「累積分布(cumulative distribution)」「百分位(percentile)」の専用ページは現時点では未作成のため、 テキストのみで参照しています。 箱ひげ図・四分位・分位点回帰・正規分布・確率分布・頑健統計・標準偏差・中央値・平均・最頻値は本サイト内に専用ページがあります。

🗺 分位点の概念マップ

分位点 (Quantile) 前提: 累積分布関数 CDF 並列: 中央値 / 四分位数 発展: 分位点回帰 応用: 箱ひげ図 / VaR 対比: 平均・標準偏差 統合: 順位統計量

分位点の周辺概念を整理しましょう。

                  【データ x_1, ..., x_n】
                          │
                  昇順に並べる
                          ▼
                  【順序統計量 x_(1) ≤ ... ≤ x_(n)】
                          │
                ┌─────────┼─────────┐
                ▼                              ▼
        【経験分位点 Q̂(q)】              【経験CDF F̂(x)】
                │                              │
                │ 互いに逆関数                 │
                └──────────────────────────────┘
                          │
        ┌─────────┴─────────┐
        ▼                   ▼
   【代表的分位点】       【応用】
   ・最小 Q(0)            ・箱ひげ図
   ・P10                  ・5 数要約
   ・Q1 = P25             ・外れ値判定
   ・中央値 = Q2 = P50    ・Q-Q プロット
   ・Q3 = P75             ・分位回帰
   ・P90                  ・VaR・CVaR
   ・最大 Q(1)            ・ノンパラメトリック検定
                          ・信頼区間(t, z の分位点)
    

分位点と他の中心指標の対比

指標外れ値耐性計算解釈
平均弱い$\sum x_i / n$重心
中央値(P50)強い順位 (n+1)/2 番目多数派の典型値
最頻値強い最頻出値最も出やすい値
切り捨て平均上下 N% を除いた平均外れ値を緩和した中心

📊 5 数要約と箱ひげ図 — 分位点の最強応用

分布全体を 5 つの数字に要約する古典的サマリーが 5 数要約 (five-number summary) です。 Tukey (1977) が提唱し、 箱ひげ図 (boxplot) と一対で用いられます。

5 つの構成要素

要素意味記号典型的な役割
最小値データの下端$\min, Q(0)$下側の外れ値検出
第 1 四分位下位 25% の境界$Q_1, Q(0.25)$箱の下端
中央値真ん中の値$Q_2, Q(0.5)$, $\tilde{x}$箱の中の線
第 3 四分位上位 25% の境界$Q_3, Q(0.75)$箱の上端
最大値データの上端$\max, Q(1)$上側の外れ値検出

SSDSE-B 都道府県人口の 5 数要約

項目値(万人)該当県
最小≈ 55鳥取
$Q_1$≈ 91.5和歌山
中央値≈ 173熊本
$Q_3$≈ 255京都
最大≈ 1404東京

この 5 数だけ見ても:

箱ひげ図の構造

      max →   ┃ (上ひげの先 = Q3 + 1.5×IQR 内の最大値、 超えると外れ値プロット)
              ┃
              ┣━━━━━━━━┓ ← Q3 (箱の上端)
              ┃        ┃
              ┃   ──   ┃ ← 中央値 (Q2、 箱の中の線)
              ┃        ┃
              ┣━━━━━━━━┛ ← Q1 (箱の下端)
              ┃
      min →   ┃ (下ひげの先 = Q1 - 1.5×IQR 内の最小値)
    

describe() に置き換えると

pandas の describe() は 5 数要約に平均と標準偏差を加えた 7 数要約を返します。 通常はこれで十分。 ただし、 平均と中央値が大きく違う場合は分布が歪んでいると即座に判断。

🎯 理論分布の分位点 — t、 z、 χ²、 F の臨界値

仮説検定・信頼区間で「臨界値」「上側 5% 点」と呼ばれるのは、 理論分布の分位点です。 数式的には:

分布0.025 分位点0.975 分位点用途
標準正規 $\mathcal{N}(0,1)$$-1.960$$+1.960$95% 信頼区間、 大標本 Z 検定
t (自由度 10)$-2.228$$+2.228$小標本 t 検定
t (自由度 30)$-2.042$$+2.042$中標本 t 検定
$\chi^2$ (自由度 5)$0.831$$12.83$カイ二乗検定、 分散検定
F (5, 10)$0.151$$4.236$分散比検定、 ANOVA

「上側 α% 点」の表記

古典的な統計表で「$z_{0.05} = 1.645$」と書かれているのは、 「上側 5% 点」=「右側の 5% 領域を切り取る境界」=「97.5% 分位点」のこと。 一方「$z_{0.025} = 1.96$」(両側 5%、 上側 2.5%)と書く流派もあって混乱しやすい。 教科書ごとに記法を確認するのが安全。

scipy での計算

🎯 このコードでやること: QQ プロットで観測分位点と理論正規分布の分位点を比較し、 分布のあてはまりを確認する

📥 入力例 (SSDSE-B-2026): pop_log = log(47 都道府県人口) (対数変換後)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from scipy import stats

# ppf = percent point function = 分位点関数
print(stats.norm.ppf(0.975))        # 1.96
print(stats.t.ppf(0.975, df=30))  # 2.042
print(stats.chi2.ppf(0.95, df=5)) # 11.07
print(stats.f.ppf(0.95, 5, 10)) # 3.326

# 逆方向:cdf = 累積分布関数
print(stats.norm.cdf(1.96))          # 0.975
📤 実行例: QQ プロットでデータ点が概ね直線 y = x に乗り、 中央付近では一致するが両端で上方に外れる。 Shapiro-Wilk p = 0.18 (5% で正規性は棄却されない)

💬 読み方: QQ プロットは分位点を 1 対 1 で並べた図。 対角線に乗れば理論分布に従う。 右上が反れていれば右裾が重い (人口分布の典型)。 対数変換で直線化を試すのが定石。

分位点 条件付き分位点 Q(Y|X) Wilcoxon 順位和検定 Mann-Whitney U Kruskal-Wallis Mood の中央値検定 CVaR / Expected Shortfall

🔗 隣接手法への橋渡し

「分位点」は単独で完結する手法ではなく、 隣接領域と連携することで真価を発揮する。

SSDSE-B-2026 の都道府県別年収などを分位点で要約すると、 25 パーセンタイル・中央値・75 パーセンタイルの間隔から右裾の長さが分かり、 平均値だけでは見えない不均衡が浮かぶ。

🌳 手法選択フロー

「分位点」を実際の課題に当てはめるとき、 状況別に何を選ぶかを 3 段階で判定する。

  1. 必要な粒度は? 粗 → 四分位 (Q1/Q2/Q3)、 細 → パーセンタイル (1%-99%)
  2. 外れ値はあるか? Yes → 分位点で要約 (平均より頑健)、 No → 平均±標準偏差でも可
  3. 分布形状が知りたいか? Yes → 複数分位点を並べた Q-Q プロット、 No → 中央値だけで十分

SSDSE-B-2026 の都道府県人口は東京 1400 万・鳥取 55 万と歪み大。 0.25/0.5/0.75 分位は (70 万/140 万/270 万) と要約でき、 平均 270 万より中央 140 万のほうが「典型的な県」に近い。