【问题标题】:Equivalence of lognormal and exp(normal) probability densities对数正态和 exp(正态)概率密度的等价
【发布时间】:2017-11-21 04:29:22
【问题描述】:

我想查看对数正态分布与正态分布指数的等价性。我在下面使用 SciPy 包,并从相应的文档中使用以下参数化:

s = sigma
scale = exp(mu)

这里是the link。我认为当使用这个参数化时,我没有发现绘制对数正态分布的 pdf 和正态分布的 exp 以及额外绘制正态分布和对数正态分布的对数的偏差。我试图关注:

from scipy.stats import lognorm
from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np

mu = 0.5
sigma = 0.2

x1 = np.linspace(norm.ppf(0.01, loc = mu, scale = sigma),
             norm.ppf(0.99, loc = mu, scale = sigma), 100)
y1 = norm.pdf(x1, loc = mu, scale = sigma)

x2 = np.linspace(lognorm.ppf(0.01, s = sigma, scale = np.exp(mu)),
             lognorm.ppf(0.99, s = sigma, scale = np.exp(mu)), 100)
y2 = lognorm.pdf(x2, s = sigma, scale = np.exp(mu))

fig, ax = plt.subplots(2, 1)
ax[0].plot(x1,y1, label = "normal")
ax[0].plot(np.log(x2), y2, label = "lognormal")
ax[0].grid()
ax[0].legend()

ax[1].plot(np.exp(x1),y1, label = "normal")
ax[1].plot(x2, y2, label = "lognormal")
ax[1].grid()
ax[1].legend()

fig.show()

如您所见,曲线并不相同。 SciPy 文档是否错误,我是否必须使用不同的参数化,或者我认为没有差异的想法是否错误?

【问题讨论】:

    标签: python numpy scipy normal-distribution


    【解决方案1】:

    线

    ax[1].plot(np.exp(x1), y1, label = "normal")
    

    应该是

    plot(np.exp(x1), y1*np.exp(-x1), label = "normal")
    

    其中 exp(-x) 出现是因为它是映射 x->exp(x) 的导数的倒数。或者,等效地,它是逆映射 (log y)' = 1/y 的导数,但用 x 变量表示。

    同样,

    plot(np.log(x2), y2, label = "lognormal")
    

    应该是

    plot(np.log(x2), y2*x2, label = "lognormal") 
    

    我们除以对数的导数,即除以 1/x2。

    要了解为什么这个具有导数的因子会在变量变化后出现在概率密度函数中,例如,请参阅these notes。简短的解释是“来自微积分 1 的链式法则”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多