fit对数正态分布matlab,拟合对数正态分布使用Scipy与Matlab

我想使用Scipy拟合对数正态分布。我之前已经使用Matlab来完成它,但由于需要将应用程序扩展到统计分析之外,我正在试图在Scipy中重现拟合值。拟合对数正态分布使用Scipy与Matlab

下面是Matlab代码我用适合我的数据:

% Read input data (one value per line)

x = [];

fid = fopen(file_path, 'r'); % reading is default action for fopen

disp('Reading network degree data...');

if fid == -1

disp('[ERROR] Unable to open data file.')

else

while ~feof(fid)

[x] = [x fscanf(fid, '%f', [1])];

end

c = fclose(fid);

if c == 0

disp('File closed successfully.');

else

disp('[ERROR] There was a problem with closing the file.');

end

end

[f,xx] = ecdf(x);

y = 1-f;

parmhat = lognfit(x); % MLE estimate

mu = parmhat(1);

sigma = parmhat(2);

而这里的拟合图:

nFA9L.png

现在,这里是我的Python代码实现同样的目的:

import math

from scipy import stats

from statsmodels.distributions.empirical_distribution import ECDF

# The same input is read as a list in Python

ecdf_func = ECDF(degrees)

x = ecdf_func.x

ccdf = 1-ecdf_func.y

# Fit data

shape, loc, scale = stats.lognorm.fit(degrees, floc=0)

# Parameters

sigma = shape # standard deviation

mu = math.log(scale) # meanlog of the distribution

fit_ccdf = stats.lognorm.sf(x, [sigma], floc=1, scale=scale)

下面是使用Python代码的配合。

mDxHE.png

正如你看到的,代码两套能够产生良好的配合,至少在视觉上来讲的。

问题是估计参数mu和sigma存在巨大差异。

来自Matlab:mu = 1.62 sigma = 1.29。 Python:mu = 2.78 sigma = 1.74。

为什么会有这样的差异?

注意:我已经仔细检查过两套数据都是正确的,一样。分数相同,分布相同。

非常感谢您的帮助!提前致谢。

其他信息:

import scipy

import numpy

import statsmodels

scipy.__version__

'0.9.0'

numpy.__version__

'1.6.1'

statsmodels.__version__

'0.5.0.dev-1bbd4ca'

Matlab的版本是R2011b。

版:

正如下面的回答证明,故障在于SciPy的0.9。我能够使用Scipy 11.0从Matlab重现mu和sigma结果。

一个简单的方法来更新您的SciPy的是:

pip install --upgrade Scipy

如果你不具备PIP(你应该!):

sudo apt-get install pip

2013-03-26

Mike

+1

看看这两组数据点,它们看起来相当不同(例如,比较右下角蓝色圆圈的位置)。如果数据不相同,则没有理由认为适合。 –

2013-03-26 06:29:18

+0

两组数据*完全相同。我已经彻底检查过,以确保事实并非如此。这些图显示略有不同,因为我用来在Matlab中绘制的代码是非库代码。无论如何,要点是所拟合的数据完全相同,因此它们应该产生相同的平均值和标准偏差值。 –

2013-03-26 06:40:59

+0

我很抱歉,但我不买这个(除非情节是关闭的)。只是直观地比较两个图上最右边的点的横坐标,看看它们是*非常*不同。如果您肯定数据是相同的,请将它与您用于将其读入Python和MATLAB的代码一起包含它。 –

2013-03-26 06:44:34

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值