幾何標準偏差を使う場面
幾何標準偏差 (GSD) は、加法的ではなく乗法的なデータ—成長率、比率、濃度、あるいは対数正規分布に従う測定値—に対して適切な散布度の指標です。
株式リターンを考えてみましょう。10%の上昇後に10%の下落があっても、元の値には戻りません(元の99%になります)。このような乗法的な関係には、算術的な統計の代わりに幾何統計が必要です。
重要な洞察
データが数桁にわたる範囲を持ち、常に正の値で、通常のプロットでは右に歪んでいるが対数スケールでプロットすると対称に見える場合、幾何統計が必要な対数正規データを扱っています。
対数正規データの理解
データの自然対数が正規分布に従う場合、そのデータは対数正規分布に従います。一般的な例は以下の通りです。
- 株価と投資リターンの時系列
- 所得と資産の分布
- エアロゾルや医薬品の粒子径
- 細菌コロニー数やウイルス量
- 環境汚染物質の濃度
- 抗体価や薬物濃度
重要な特徴は、繰り返しの乗算を伴うプロセスが対数正規分布を生成するということです。ちょうど繰り返しの加算が正規分布を生成するのと同様です。
公式と計算方法
幾何標準偏差
GSD = exp(√[Σ(ln xᵢ - ln x̄ₘ)² / (n-1)])
より簡単に言えば、すべての値の自然対数を取り、通常の標準偏差を計算し、指数関数で戻します。
1
データを変換する
各値の自然対数を計算する:yᵢ = ln(xᵢ)
2
平均を計算する
対数値の算術平均を求める:ȳ = Σyᵢ/n
3
SDを計算する
対数値の標準偏差を求める:s = √[Σ(yᵢ-ȳ)²/(n-1)]
4
逆変換する
指数関数でGSDを求める:GSD = eˢ
Python
import numpy as np
from scipy import stats
def geometric_sd(data):
"""Calculate geometric standard deviation"""
log_data = np.log(data)
sd_log = np.std(log_data, ddof=1)
return np.exp(sd_log)
def geometric_mean(data):
"""Calculate geometric mean"""
return stats.gmean(data)
# Example: Antibody titers (highly variable, log-normal)
titers = [64, 128, 256, 128, 512, 64, 256]
gm = geometric_mean(titers)
gsd = geometric_sd(titers)
print(f"Geometric Mean: {gm:.1f}")
print(f"Geometric SD: {gsd:.2f}")GSD値の解釈
元のデータと同じ単位を持つ算術SDとは異なり、GSDは乗法的な係数—つまり比率です。GSD = 2.0は、データが典型的に2倍の範囲で変動することを意味します。
- GSD = 1.0:ばらつきなし(実際にはありえない)
- GSD ≈ 1.2:低いばらつき(典型的に±20%)
- GSD ≈ 2.0:中程度のばらつき(データが2倍/半分になる)
- GSD ≈ 3.0:高いばらつき(約1桁にわたる)
信頼区間
対数正規データの場合、95%の範囲はおよそ、幾何平均 ÷ GSD² から 幾何平均 × GSD² です。幾何平均=100、GSD=2の場合、範囲は25から400になります。
実世界での応用
製薬科学
粒度分布(D50、GSD) · 薬物濃度のばらつき · 生物学的利用能試験 · エアロゾル特性評価
金融・経済学
投資リターンのボラティリティ · 成長率の分析 · 所得分布の研究 · 資産価格モデリング
GSDと通常のSDの比較
対数正規データに算術SDを使うと、誤解を招く結果になります。
例:ウイルス量データ
値:1,000; 5,000; 10,000; 50,000; 100,000 copies/mL
算術平均 ± SD: 33,200 ± 41,424
幾何平均 × GSD: 10,000 × 4.5 → 範囲:2,222〜45,000
算術SDでは負の値が可能であることを示唆しますが、ウイルス量では不可能です!
必ず分布を確認すること
散布度の指標を計算する前に、データを視覚化してください。右に歪んだ長い裾を持つデータの場合、対数変換を試みてください。それで対称になれば、幾何統計を使用してください。