このページで扱う主要キーワード(クリックで該当セクションへ):
「比例尺度(比尺度)」 (Ratio Scale) は、 SSDSE-B-2026 などの公的統計データを使った教材・分析で頻出するキーワードです。 本ページでは、 まず直感、 次に数式、 そして 47 都道府県の実値で確かめる、 という流れで体系的に整理します。 加えて、 ケーススタディ・FAQ・歴史的経緯・参考文献までを 1 ページに集約し、 用語の「地図」として使えるようにしました。
関連用語(前提・並列・発展)と関連グループ教材も末尾にまとめてあるので、 用語の地図として活用してください。
比例尺度(比尺度、 ratio scale)は Stevens の尺度水準分類における最も情報量の多い水準で、 「ゼロが 無 を意味し、 比 (a/b) に意味がある」尺度です。
たとえば総人口は比尺度です。 「東京の人口 (14,086,000) は鳥取の人口 (537,000) の 26.2 倍」 と言えますし、 「人口がゼロ」は文字通り「住民が誰もいない」を意味します。 一方、 摂氏温度 (℃) は比尺度ではありません。 「20℃ は 10℃ の 2 倍暑い」 とは言えませんし、 0℃ も「熱が無い」状態ではないからです。
| 尺度 | 等しい/異なる | 順序 | 等距離 | 絶対零点・比 | 例 |
|---|---|---|---|---|---|
| 名義尺度 | ○ | × | × | × | 性別、 都道府県名 |
| 順序尺度 | ○ | ○ | × | × | 満足度 1-5 |
| 間隔尺度 | ○ | ○ | ○ | × | 摂氏温度、 西暦年 |
| 比例尺度 | ○ | ○ | ○ | ○ | 人口、 身長、 所得、 距離、 絶対温度 (K) |
比例尺度は、 線形変換 $y=\alpha x$($\alpha>0$)に対してのみ不変な尺度です。 つまり単位の取り換えはできますが、 原点を動かす平行移動はできません。
例:km と m の換算(×1000)。 0 km が 0 m に対応する。
比例尺度では 幾何平均と 変動係数(CV)に意味があります。
単位を持たない無次元量。 比尺度でないと意味を持たない。
| 性質 | 意味 | 例 |
|---|---|---|
| 絶対零点 | 0 は「無」を表す | 所得 0 円=収入なし |
| 比の意味 | $a/b$ が「何倍」を表す | 東京は沖縄の約 9.6 倍人口 |
| 正値性 | 多くの場合、 $x>0$ | 身長・体重・距離は負を取らない |
| 対数変換可 | $\ln x$ が有意 | 所得・人口は対数で見るのが自然 |
| 無次元化 | CV、 比、 シェア | 東京シェア=11.3% |
| 幾何平均 | 「増加率の平均」に意味 | 10 年平均成長率 |
2023 年 47 都道府県の総人口(A1101)で計算してみます。
もし「都道府県コード」を平均しても意味はありません — それは名義尺度です。 同様に「満足度の平均」も、 厳密には順序尺度なので議論の余地があります。 一方、 人口・所得・距離・面積などは比尺度なので、 平均・幾何平均・比・シェア・CV すべて使えます。
import pandas as pd, numpy as np
from scipy.stats.mstats import gmean
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)
pop = df['総人口'].astype(int).to_numpy()
print('算術平均:', pop.mean())
print('幾何平均:', gmean(pop))
print('変動係数:', pop.std(ddof=1) / pop.mean())
share = pop / pop.sum() * 100
tokyo = df.loc[df['都道府県']=='東京都', '総人口'].astype(int).iloc[0]
tottori = df.loc[df['都道府県']=='鳥取県', '総人口'].astype(int).iloc[0]
print('東京シェア (%):', share.max())
print('東京/鳥取:', tokyo / tottori, '倍')
df['log_pop'] = np.log(df['総人口'].astype(int)) print(df[['都道府県','総人口','log_pop']].head()) # 対数を取ると分布が正規に近くなり、 散布図が見やすくなる
years = df['年度'].astype(int)
tokyo_ts = df[df['都道府県']=='東京都'].sort_values('年度')
ratios = tokyo_ts['総人口'].astype(int).pct_change().dropna() + 1
geo_growth = gmean(ratios) - 1
print('東京の年平均人口成長率:', geo_growth*100, '%')
| 統計量 | 名義 | 順序 | 間隔 | 比例 |
|---|---|---|---|---|
| 最頻値 | ○ | ○ | ○ | ○ |
| 中央値 | × | ○ | ○ | ○ |
| 算術平均 | × | △ | ○ | ○ |
| 標準偏差 | × | × | ○ | ○ |
| Pearson 相関 | × | × | ○ | ○ |
| 幾何平均 | × | × | × | ○ |
| 変動係数 CV | × | × | × | ○ |
| 比 (a/b) | × | × | × | ○ |
「0 のとき、 その量は 本当に「無い」 と言えるか?」 を自問。 身長 0cm = 身長なし → 比尺度。 IQ = 0 = 知能なし、 ではない → 間隔尺度。
$\ln x$ は $x > 0$ で定義されるので、 比尺度のデータ(正値)に対してのみ意味があります。 SSDSE の人口や所得は対数変換しても比尺度の性質を引き継ぎ、 「対数差 = 比率の差」 という解釈ができます。
import pandas as pd, numpy as np
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)
pop = df['総人口'].astype(int)
print('生:', pop.describe())
print('対数:', np.log(pop).describe())
# 歪度が大きく改善するはず
| X 尺度 | Y 尺度 | 適切な分析 |
|---|---|---|
| 名義 | 比例 | 群間比較(t 検定、 ANOVA) |
| 順序 | 順序 | Spearman / Kendall |
| 比例 | 比例 | Pearson 相関、 線形回帰、 弾性(対数-対数回帰) |
| 順序 | 比例 | 順位回帰、 Kruskal-Wallis |
ステップ 1:データの尺度を判定
ステップ 2:許可される統計量
名義 → 最頻値・度数。 順序 → 中央値・四分位範囲・順位相関。 間隔 → 平均・分散・Pearson。 比例 → 加えて幾何平均・CV・比。
ステップ 3:SSDSE で計算
import pandas as pd, numpy as np
from scipy.stats.mstats import gmean
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)
pop = df['総人口'].astype(int).to_numpy()
print('算術平均:', pop.mean())
print('幾何平均:', gmean(pop)) # 比尺度なら意味あり
print('中央値:', np.median(pop)) # 順序以上で OK
print('CV:', pop.std()/pop.mean()) # 比尺度なら意味あり
ステップ 4:尺度の取り違い検出
# 都道府県コード(名義)を回帰の説明変数に直接入れるのは NG
# → ダミー変数化が必要
codes = df['地域コード'].str.replace('R','').astype(int)
print('コードの平均:', codes.mean()) # 計算は可能だが意味なし
import pandas as pd
dummies = pd.get_dummies(df['都道府県'])
print(dummies.shape) # 47 ダミー列
ステップ 5:尺度に応じた相関
from scipy.stats import pearsonr, spearmanr
df['高齢化率'] = df['65歳以上人口'].astype(int) / pop
print('Pearson:', pearsonr(pop, df['高齢化率'])[0]) # 比例×比例
print('Spearman:', spearmanr(pop, df['高齢化率'])[0]) # 順序×順序
GDP・所得・売上はすべて比尺度。 「成長率」「シェア」「対前年比」は比尺度ならではの統計。
SSDSE-B-2026 の総人口、 出生数、 死亡数。 比例計算(高齢化率=65歳以上÷総人口)が自然。
身長、 体重、 距離、 速度、 質量、 力、 エネルギー。 単位換算(cm→m)は許容変換。
「実行時間 2 秒は 1 秒の 2 倍」は比尺度。 一方、 西暦年は間隔尺度(2024 ÷ 1012 は無意味)。
モル濃度、 pH(実質対数尺度)、 pH は注意。 100 ppm は 50 ppm の 2 倍、 は比尺度。
標準化(z-score)は間隔尺度に保つ、 Min-Max は範囲を [0,1] に変換するが比は保たない。 対数変換は比尺度を保つ(厳密には正値前提)。
比尺度では「中央値の bootstrap CI」「幾何平均の CI」 が意味を持つ。
「都道府県コード(01-47)」を回帰の説明変数に直接入れる → ダミー変数化が必要。 名義尺度を比尺度として扱うミスは初学者の典型。
| 尺度 | 許容変換 | 意味のある演算 | 典型統計 |
|---|---|---|---|
| 名義 | 1 対 1 置換 $\phi$ | =, ≠ | 最頻値、 度数 |
| 順序 | 単調変換 | + 大小比較 | 中央値、 順位相関 |
| 間隔 | $y=ax+b$ ($a>0$) | + 差・距離 | 平均、 SD、 Pearson |
| 比例 | $y=ax$ ($a>0$) | + 比・倍率 | 幾何平均、 CV |
| 絶対 | 恒等変換 | 無次元数 | 確率、 個数 |
| 用語 | 意味 |
|---|---|
| 名義尺度 | 区別のみ。 性別、 都道府県名 |
| 順序尺度 | 順序のみ。 5 段階評価 |
| 間隔尺度 | 等間隔。 摂氏温度、 西暦 |
| 比例尺度 | 絶対零点。 人口、 身長、 所得 |
| 絶対尺度 | 無次元数。 確率、 個数 |
| 絶対零点 | 0 が「無」を意味する点 |
| 幾何平均 | $\sqrt[n]{\prod x_i}$ |
| 変動係数 (CV) | $\sigma/\mu$ |
| 対数変換 | 比尺度をそのまま保つ非線形変換 |
| 単位換算 | 比尺度の許容変換 $y=\alpha x$ |
| Stevens | 尺度水準理論を提唱した心理学者 |
| PICO | 医学リサーチ設計の枠組み |
| レシピ | コード |
|---|---|
| 尺度別チェック | pop.dtype, pop.min(), (pop>=0).all() # 比尺度なら 0 以上 |
| 対数変換 | np.log(pop) |
| 幾何平均 | from scipy.stats.mstats import gmean; gmean(pop) |
| 変動係数 | pop.std() / pop.mean() |
| Min-Max スケーリング (比は崩れる) | (pop - pop.min()) / (pop.max() - pop.min()) |
| z-score (間隔は保つ) | (pop - pop.mean()) / pop.std() |
| シェア | pop / pop.sum() * 100 |
| 対数差 = 比率の対数 | np.log(pop[1:]) - np.log(pop[:-1]) |
| ピアソン相関 (比×比) | np.corrcoef(pop, gdp)[0,1] |
| スピアマン (順序×順序) | from scipy.stats import spearmanr; spearmanr(pop, gdp) |
| 尺度判定関数 | def is_ratio(x): return (x >= 0).all() and np.issubdtype(x.dtype, np.number) |
| ダミー変数化 | pd.get_dummies(df['都道府県']) |
| 年齢ビン化 | pd.cut(df['年齢'], bins=[0,18,40,65,100]) |
| ヒストグラム | import matplotlib.pyplot as plt; plt.hist(np.log(pop)) |
| 尺度サマリ | df.describe(include='all') |
歴史と位置づけ:尺度水準の体系化は 1946 年、 心理学者 Stanley Smith Stevens による論文「On the Theory of Scales of Measurement」(Science 誌)に始まります。 Stevens は 名義 → 順序 → 間隔 → 比 の 4 階層を提案し、 各水準で「許容される変換」と「意味を持つ統計量」を整理しました。
| 尺度 | 許容変換 | 典型統計 |
|---|---|---|
| 名義 | 1 対 1 置換 | 最頻値・度数 |
| 順序 | 単調変換 | 中央値・順位相関 |
| 間隔 | $y=ax+b$($a>0$) | 平均・分散・Pearson |
| 比例 | $y=ax$($a>0$) | 幾何平均・CV・比 |
この分類は強い批判もあります(Velleman & Wilkinson, 1993 は「現実のデータは混合的」と指摘)。 しかし、 「どんな統計量を計算してよいか」の判断には今も最初のチェックリストとして有効です。
Stevens の尺度水準ピラミッド:
▲ 情報量
│ ┌──────────┐
│ │ 比尺度 │ ← 人口、 所得、 距離(絶対零点 + 比)
│ └────┬─────┘
│ ┌────┴─────┐
│ │ 間隔尺度 │ ← 摂氏温度、 西暦年(等間隔のみ)
│ └────┬─────┘
│ ┌────┴─────┐
│ │ 順序尺度 │ ← 満足度ランク(順序のみ)
│ └────┬─────┘
│ ┌────┴─────┐
│ │ 名義尺度 │ ← 都道府県コード(区別のみ)
│ └──────────┘
└─────────────────────────────►
許される統計量