我希望看到对数正态分布与正态分布的指数的等价性。我在下面使用SciPy包,并从相应的doc中进行以下参数化:
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文档是否错误,我是否必须使用不同的参数化,或者我的想法是没有错误?
答案 0 :(得分:0)
该行
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"的链规则。