Monte Carlo Simulation中Lognormal distribution参数配置相关问题
对数正态分布参数设置及统计量计算指南
1 核心前提说明
对数正态分布与正态分布的参数定义完全不同:如果随机变量$X$服从对数正态分布,那么它的自然对数$\ln(X)$服从正态分布$N(\mu, \sigma^2)$。对数正态分布的均值、标准差计算逻辑和正态分布完全不一致。
2 MC模拟中的参数设置方法
根据你已知的条件可以分为两种设置场景:
2.1 已知对数域的正态分布参数
如果你已经确定了$\ln(X)$对应的正态分布均值$\mu$(对数均值)和标准差$\sigma$(对数标准差),直接按照以下逻辑生成样本即可:
- 先生成服从标准正态分布$N(0,1)$的随机数$Z$
- 按照公式
X = exp(μ + σ * Z)转换得到符合要求的对数正态分布样本
2.2 已知真实参数$X$的期望均值和标准差
如果你明确的是待调整参数$X$本身需要满足的均值$\mu_X$、标准差$\sigma_X$,需要先反推对应的对数域参数,再生成样本:
- 首先计算对数域方差:$\sigma^2 = \ln(1 + \frac{\sigma_X2}{\mu_X2})$
- 再计算对数域均值:$\mu = \ln(\mu_X) - \frac{\sigma^2}{2}$
- 最终对数域标准差为$\sigma = \sqrt{\sigma^2}$,代入2.1的生成逻辑即可
3 对数正态分布的均值与标准差计算方式
和正态分布参数直接对应本身均值、标准差的逻辑不同,对数正态分布的统计量需要从对数域参数转换得到:
- 分布均值:$\mu_X = \exp(\mu + \frac{\sigma^2}{2})$
- 分布方差:$\sigma_X^2 = \exp(2\mu + \sigma^2) * (\exp(\sigma^2) - 1)$
- 分布标准差为上述方差的算术平方根
4 快速实现示例(Python)
import numpy as np # 设定待生成参数的目标均值、标准差 target_mean = 10 target_std = 2 # 反推对数域参数 log_var = np.log(1 + (target_std ** 2) / (target_mean ** 2)) log_mean = np.log(target_mean) - log_var / 2 log_std = np.sqrt(log_var) # 生成10000个MC模拟样本 mc_samples = np.random.lognormal(mean=log_mean, sigma=log_std, size=10000) # 验证生成结果 print("样本实际均值:", np.mean(mc_samples)) print("样本实际标准差:", np.std(mc_samples))
注意:对数正态分布所有取值均为正数,非常适合用于物理意义上不能为负的参数模拟,避免MC过程中出现无意义的负参数值。
内容的提问来源于stack exchange,提问作者Assia Chadly
相关产品推荐
相关产品推荐

