【发布时间】:2019-01-25 03:02:09
【问题描述】:
我试图获得对数正态分布的均值和标准差,其中 mu=0.4104857306 和 sigma=3.4070874277012617,我期望均值 = 500 和标准差 = 600。我不确定我做错了什么。代码如下:
import scipy.stats as stats
import numpy as np
a = 3.4070874277012617
b = 0.4104857306
c = stats.lognorm.mean(a,b)
d = stats.lognorm.var(a,b)
e = np.sqrt(d)
print("Mean =",c)
print("std =",e)
输出在这里:
Mean = 332.07447304207903
sd = 110000.50047821256
提前谢谢你。
编辑:
感谢您的帮助。我检查并发现有一些计算错误。我现在可以得到平均值 = 500,但仍然无法得到标准 = 600。这是我使用的代码:
import numpy as np
import math
from scipy import exp
from scipy.optimize import fsolve
def f(z):
mean = 500
std = 600
sigma = z[0]
mu = z[1]
f = np.zeros(2)
f[0] = exp(mu + (sigma**2) / 2) - mean
f[1] = exp(2*mu + sigma**2) * exp(sigma**2 - 1) - std**2
return f
z = fsolve (f,[1.1681794012855686,5.5322865416282365])
print("sigma =",z[0])
print("mu =",z[1])
print(f(z))
sigma = 1.1681794012855686
mu = 5.5322865416282365
我试过用我的计算器检查结果,我可以按要求得到std=600,我仍然得到853.5698320847896和lognorm.std(sigma, scale=np.exp(mu))。
【问题讨论】:
-
检查标准差的计算。当我修复你的代码时,我得到了 500 和其他东西 (165831.240)。