SciPyのlognorm()関数の引数指定について

SciPyのlognorm()関数を使おうと思ったのだが、引数をどうするのかが分からなくて苦労した。あれこれ試行錯誤してようやく分かったので、メモとして残す。

LibreOffice Calcで適当なセルに「=LOGNORMDIST(4,3.5,1.2,1)」と入力すると「0.0390835557」と返される。

「4」は調べたい数値(対数にする必要はなく、そのままでよい)、「3.5」はデータを対数に変換した後の平均、「1.2」はデータを対数に変換した後の標準偏差、「1」は戻り値として累積分布を指定、という意味である。

書式はExcelと同じである(Excelの場合は「LOGNORM.DIST」だが)。これと同じことをSciPyでやりたい。

この場合、

import numpy as np
from scipy.stats import lognorm
lognorm.cdf(x=4, s=1.2, loc=0, scale=np.exp(3.5))

とすればよい。

出力

0.039083555706800471

つまり、「x」には調べたい数値、「s」にはデータを対数に変換した後の標準偏差、「loc」には0、「scale」にはデータを対数に変換した後の平均を指数に変換(ややこしい)した数値を指定するのである。

非常に紛らわしいのだが、SciPyのnorm()関数で

norm.cdf(x=1.0, loc=0, scale=1)

とした場合、xは同じだが、「loc」は平均、「scale」は標準偏差を指定する。

これが頭にあったので、大混乱した。もう少し統一性を持たせてほしいものだが...。

(2016/10/07更新)

コメント

非公開コメント