2013-01-11 30 views
-1

我想繪製正常與使用下面的代碼對數正態函數:規範VS lognorm情節

from scipy.stats import norm, lognorm 
import numpy as np 
import matplotlib.pyplot as plt 
# example: r(t) = ln(1 + R(t)) ~ N(0.05, (0.5)^2)) 
#   1 + R(t) = exp(r(t)) ~ logNormal(0.05, (0.5)^2) 
#   R(t) = e(r(t)) - 1 ~ logNormal(0.05, (0.5)^2) - 1 
# 
# plot normal and log normal density 
mu = .05 
sd = .5 
x = np.linspace(mu - 3 * sd, mu + 3 * sd, 100) 
plt.plot(x, norm.pdf(x, mu, sd), label="Normal") 
plt.plot(exp(x)-1, lognorm.pdf(exp(x), mu, sd), '--', label="Log-Normal") 

有什麼不對?我期望得到如下結果:norm vs lognorm

回答

3

lognorm.pdf函數中參數的順序並非您想象的那樣! 當您將訂單轉換爲: lognorm.pdf(exp(x), sd, mu)時,您會得到您期望的情節。

編輯:documentationpdf(x, s, loc=0, scale=1)

+0

非常感謝!真討厭!範數和lognorm的參數順序是相反的?!爲什麼不一致? – ronnydw

+1

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.lognorm.html#scipy.stats.lognorm給出pdf(x,s,loc = 0,scale = 1) – Floris

+0

由方式 - 我認爲不同順序的原因是事實上lognorm分佈通常會有一個「loc」爲零;因此它是您通常不會設置的參數,並且它可用作默認值爲0的可選參數。 – Floris

1

簡要一邊閱讀Python文檔/功能如何調用工作:

論點了默認值,即some_fun(a,b)都需要哪些位置參數(或Python會引發有關參數個數的錯誤),並根據函數調用中的位置進行分配。如果具有默認值,即some_other_fun(a,b,c=None,d=0),則它們被稱爲關鍵字參數並且是可選的。您可以通過兩種方式使用可選參數,如果您不使用關鍵字,則會將它們視爲位置參數。如果您給出的參數數少於簽名中參數的總數,則會按順序分配這些值,其餘參數將採用其默認值。您也可以使用關鍵字的形式來分配只是你想從列表中的一切提供一個值之前,它們即some_other_fun(1,2,d=3)some_other_fun(1,2,3)

所以不同的可選參數,當你調用lognorm.pdf(x,sd,mu)要綁定爲x=xs=sdloc=muscale=1在那裏與norm.pdf(x,mu,sd)你結合x=xloc=mu

另見tutorial的這個部分。

+0

我知道python函數調用是如何工作的,那不是重點。 scipy.stats在規範和lognorm的函數簽名中不一致。看看具有這種一致性的R。 – ronnydw