在python中编写对数正态函数

时间:2018-01-10 20:08:25

标签: python numpy scipy

我试图在python中编写逆对数正态函数:

import numpy as np
import scipy.stats as sp
from scipy.optimize import curve_fit

def lognorm1(x,s,scale):
    ANS = sp.lognorm(s,scale=scale).ppf(x)
    return ANS

curve_fit(lognorm1,x,y)

我没有适应曲线的麻烦,但是比例参数是Excel上LOGNORM.INV函数的指数。我知道我可以在最后记录scale参数,但无论如何都要重写函数,以便我不必每次都这样做?

1 个答案:

答案 0 :(得分:0)

确实,SciPy documentation says

  

对数正态随机变量Y的常见参数化是根据唯一正态分布随机变量X的均值,μ和标准差sigma,使exp(X)= Y.此参数化对应于设置s = sigma和scale = exp(mu)。

所以让我们这样设置:

def lognorm1(x, mu, sigma):
    ANS = sp.lognorm(s=sigma, scale=exp(mu)).ppf(x)
    return ANS

curve_fit(lognorm1, x, y)

现在curve_fit返回的参数具有基础正态分布的均值和标准差的含义。