2016-04-01 35 views
2

Verilerime kümülatif bir Gauss dağılımı yerleştirmeye çalışıyorum, ancak uyuşmazlıklar açıkça yanlış. Neden yanlış yol ve standart sapmalar alıyorum? Aşağıda kodumu ve çıktısını buluyorsunuz.Kümülatif gauss uyumu için doğru parametreleri nasıl tahmin edebilirim?

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.stats import norm 

testrefratios=np.array([ 0.2, 0.4, 0.6, 0.8, 0.9, 1. , 1.1, 1.2, 1.4, 1.6, 1.8]) 
Pn_final=np.array([ 0. , 0. , 0.03 , 0.35 , 0.47, 0.57 , 0.68, 0.73, 0.76 , 0.85 , 0.91]) 
Pd_final=np.array([ 0. , 0.03, 0.36 , 0.85 , 0.97, 0.98 , 0.98 , 0.99 , 1., 1., 1. ]) 

# cumulative gaussian fit 
fg = plt.figure(1); fg.clf() 
ax = fg.add_subplot(1, 1, 1) 
t = np.linspace(0,2, 1000) 

ax.grid(True) 
ax.set_ylabel("Cumulative Probability Density") 
ax.set_title("Fit to Normal Distribution") 

mu1,sigma1 = norm.fit(Pn_final) # classical fit 
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5) 

mu1,sigma1 = norm.fit(Pd_final) # classical fit 
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5) 

ax.plot(testrefratios, Pn_final, 'bo',label='numerosity comparison') 
ax.plot(testrefratios, Pd_final, 'ro', label='density comparison') 

plt.legend(loc='lower right') 


fg.canvas.draw() 

Çıktı: Şu anda

Fit results with code shown

cevap

3

, hiçbir şey size kümülatif Gauss sığdırmak için çalışıyoruz sistemini anlatıyor yapıyoruz. norm.fit(Pn_final), Pn_final'un Gaussian değerini temsil ettiği varsayımı altında elinden gelenin en iyisini yapıyor.

Tek yön scipy.optimize.curve_fit kullanmak olmalı ve

from scipy.optimize import curve_fit 

mu1,sigma1 = curve_fit(norm.cdf, testrefratios, Pn_final, p0=[0,1])[0] 
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5) 

mu1,sigma1 = curve_fit(norm.cdf, testrefratios, Pd_final, p0=[0,1])[0] 
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5) 

bana en azından daha inandırıcı görünüyor

example fit

verir ekleyerek olacaktır.

+0

Bu, "Pn_final" ve "Pd_final" değerlerini ampirik cdf değerleri olarak kabul eder, değil mi? – ayhan

+0

Teşekkür ederim, bu mükemmel. – galliwuzz