问题描述
我一直在听麻省理工学院关于数学在金融中的应用的公开课的讲座。我正在尝试对概念进行编码以便更好地理解。
根据讲座(据我所知),如果随机变量 X 是正态分布的,那么 exp(X) 是对数正态分布的,反之亦然(如果我在这里错了,请纠正我)。
这是我尝试过的:
我有正态分布的整数列表:
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
X = np.array(l)
mu = np.mean(X)
sigma = np.std(X)
count,bins,ignored = plt.hist(X,35,density=True)
plt.plot(bins,1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins - mu)**2 / (2 * sigma**2)
),linewidth=2,color='r')
plt.show()
输出:
现在我想从上面的数据中得到对数正态分布,这是我尝试过的:
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
X = np.array(l)
ln = []
for x in X:
val = np.e**x
ln.append(val)
X_ln = np.array(ln)
X_ln = np.array(X_ln) / np.min(X_ln)
mu = np.mean(X_ln)
sigma = np.std(X_ln)
count,ignored = plt.hist(X_ln,10,density=True)
x = np.linspace(min(bins),max(bins),10000)
pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2)) / (x * sigma * np.sqrt(2 * np.pi)))
plt.plot(x,pdf,color='r',linewidth=2)
plt.show()
输出:
我知道有更好的方法可以做到这一点,但我不知道怎么做。任何建议将不胜感激。
这里有几个参考:
Log normal distribution in Python
如果这是相关的,这里是我试图处理的元素列表:
更新 1:
在向 ln 添加值之前,我已经对 X 进行了标准化。这修复了直方图的分布,但是,我似乎无法修复以显示对数正态分布的红线。此外,新的直方图分布与正态分布没有太大区别。我想不出任何合适的理由。
def normalize(v):
norm=np.linalg.norm(v,ord=1)
if norm==0:
norm=np.finfo(v.dtype).eps
return v/norm
X = np.array(l)
X = normalize(X)
新输出:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)