何时使用几何标准差
几何标准差 (GSD) 是处理乘法性而非加法性数据的适当离散度指标——如增长率、比率、浓度或任何服从对数正态分布的测量值。
以股票收益为例:上涨 10% 之后下跌 10% 并不会回到原点(你只剩下本金的 99%)。这种乘法关系需要使用几何统计量而非算术统计量。
核心要点
如果你的数据跨越数个数量级、始终为正值、在普通坐标下呈右偏但在对数坐标下呈对称——那就是对数正态数据,需要使用几何统计量。
理解对数正态数据
当数据的自然对数服从正态分布时,该数据为对数正态分布。常见的例子包括:
- 股票价格和长期投资收益
- 收入和财富分布
- 气溶胶和药物中的颗粒大小
- 细菌菌落数和病毒载量
- 环境污染物浓度
- 抗体滴度和药物浓度
关键特征是:涉及重复乘法的过程会产生对数正态分布,就像重复加法产生正态分布一样。
公式与计算
几何标准差
GSD = exp(√[Σ(ln xᵢ - ln x̄ₘ)² / (n-1)])
更简单地说:对所有值取自然对数,计算普通标准差,然后取指数。
1
数据变换
计算每个值的自然对数:yᵢ = ln(xᵢ)
2
计算均值
求对数值的算术均值:ȳ = Σyᵢ/n
3
计算标准差
求对数值的标准差: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 值
与算术标准差使用原始数据单位不同,GSD 是一个乘法因子——一个比率。GSD 为 2.0 意味着数据通常变动一倍。
- GSD = 1.0:无变异(实际中不可能)
- GSD ≈ 1.2:变异性低(典型波动 ±20%)
- GSD ≈ 2.0:中等变异性(数据翻倍或减半)
- GSD ≈ 3.0:变异性高(跨越一个数量级)
置信区间
对于对数正态数据,95% 的数据大约分布在:几何均值 ÷ GSD² 到 几何均值 × GSD²。若 GM=100,GSD=2,则范围为 25 到 400。
实际应用
制药科学
粒径分布(D50,GSD)· 药物浓度变异 · 生物利用度研究 · 气溶胶表征
金融与经济
投资收益波动性 · 增长率分析 · 收入分布研究 · 资产价格建模
几何标准差与普通标准差对比
对对数正态数据使用算术标准差会产生误导性的结果:
示例:病毒载量数据
数据:1,000; 5,000; 10,000; 50,000; 100,000 copies/mL
算术均值 ± 标准差:33,200 ± 41,424
几何均值 × GSD:10,000 × 4.5 → 范围:2,222 到 45,000
算术标准差暗示数据可能出现负值——这对病毒载量来说是不可能的!
务必先检查分布
在计算任何离散度指标之前,先将数据可视化。如果数据呈右偏且有长尾,尝试对数变换。如果变换后变得对称,就应该使用几何统计量。