我已经使用 R 和一组数据拟合了一个对数正态模型。结果参数是:
meanlog = 4.2991610
sdlog = 0.5511349
我想将此模型转移到我以前从未使用过的 Scipy。使用 Scipy,我能够得到 1 和 3.1626716539637488e+90 的形状和比例——非常不同的数字。我也尝试使用 meanlog 和 sdlog 的 exp,但继续得到奇怪的图表。
我已经阅读了所有关于 scipy 的文档,但仍然对形状和比例参数在这种情况下的含义感到困惑。自己编写函数是否有意义?不过,这似乎很容易出错,因为我是 scipy 的新手。
SCIPY 对数正态(蓝色)与 R 对数正态(红色):
关于采取什么方向的任何想法?顺便说一句,这些数据非常适合 R 模型,所以如果它看起来像 Python 中的其他东西,请随时分享。
谢谢!
更新:
我正在运行 Scipy 0.11
这是数据的一个子集。实际样本为 38k+,平均值为 81.53627:
子集:
x
[60, 170, 137, 138, 81, 140, 78, 46, 1, 168, 138, 148, 145, 35, 82, 126, 66, 147, 88, 106, 80, 54, 83, 13, 102, 54, 134, 34]
numpy.mean(x)
99.071428571428569
或者:
我正在研究捕获pdf的功能:
def lognoral(x, mu, sigma):
a = 1 / (x * sigma * numpy.sqrt(2 * numpy.pi) )
b = - (numpy.log(x) - mu) ^ 2 / (2 * sigma ^ 2)
p = a * numpy.exp(b)
return p
但是,这给了我以下数字(我尝试了几个,以防我混淆了 sdlog 和 meanlog 的含义):
>>> lognormal(54,4.2991610, 0.5511349)
0.6994656085799437
>>> lognormal(54,numpy.exp(4.2991610), 0.5511349)
0.9846125119455129
>>> lognormal(54,numpy.exp(4.2991610), numpy.exp(0.5511349))
0.9302407837304372
有什么想法吗?
更新:
重新运行“UPQuark”的建议:
形状、位置、比例(1.0、50.03445923295007、19.074457156766517)
然而,图表的形状非常相似,峰值出现在 21 附近。