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);
을 그리고 여기에 장착 줄거리입니다 :
지금 여기 내 파이썬 코드가 동일 달성을 목표로입니다 :
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 코드를 사용하는 경우입니다. 당신이 볼 수 있듯이
은, 코드의 두 세트는 적어도 시각, 잘 맞는 생산 말하기 할 수있다.
문제는 예상 매개 변수 mu 및 sigma에 큰 차이가 있다는 것입니다.
Matlab에서 : mu = 1.62 시그마 = 1.29. 파이썬에서 : mu = 2.78 시그마 = 1.74.
왜 이러한 차이가 있습니까?
참고 : 두 데이터 세트가 모두 이고 정확히이라는 것을 확인했습니다. 동일 포인트 수, 동일한 분포.
귀하의 도움에 감사드립니다! 미리 감사드립니다.
기타 정보 : matlab에의
import scipy
import numpy
import statsmodels
scipy.__version__
'0.9.0'
numpy.__version__
'1.6.1'
statsmodels.__version__
'0.5.0.dev-1bbd4ca'
버전 R2011b입니다.
는에디션 :
아래 질문에 대해 답 보듯, 오류가 Scipy 0.9로 자리 잡고 있습니다. Scipy 11.0을 사용하여 Matlab에서 mu 및 sigma 결과를 재현 할 수 있습니다.
당신의 Scipy를 업데이트하는 쉬운 방법은 다음과 같습니다
pip install --upgrade Scipy
당신이 (당신이해야!) 핍이없는 경우 :
sudo apt-get install pip
데이터 세트의 두 세트를 보면 모양이 약간 다릅니다 (예 : 오른쪽 하단의 파란색 원의 위치 비교). 데이터가 동일하지 않은 경우 적합하다고 생각할 이유가 없습니다. – NPE
두 데이터 세트는 모두 정확히 동일합니다. 그것이 사실이 아닌지 확인하기 위해 철저히 조사했습니다. Matlab에서 플롯하기 위해 사용한 코드가 라이브러리가 아닌 코드이기 때문에 플롯이 약간 다르게 표시됩니다. 어쨌든 요점은 맞는 데이터가 정확히 동일하므로 동일한 평균 및 표준 편차 값을 산출해야한다는 것입니다. – Mike
미안하지만 나는 이것을 구입하지 않습니다 (플롯이 꺼져 있지 않는 한). 두 그래프의 가장 오른쪽에있는 점의 가로 좌표를 시각적으로 비교하여 두 점의 차이가 매우 다른지 확인하십시오. 데이터가 동일하다고 확신하는 경우, 질문을 파이썬과 MATLAB 모두에서 읽는 데 사용하는 코드와 함께 포함하십시오. – NPE