私はJohnson SUの分布を経験豊富なS & P 500に返します。私の理解(免責事項:数学者ではない)は、この分布は3番目と4番目の瞬間(スキュー&尖度)を取り入れているということです。 loc
(平均)およびscale
(標準偏差)に加えて、johnsonsu
は、2つの追加パラメータ、a
およびb
を取ります。しかし、これらのパラメータの順序と仕様は混乱します。私の混乱が由来のはここscipy.stats.johnsonsuのaとbのパラメータは何ですか?
です:私はSPDR S & P 500 ETF信託(SPY)に復帰して引っ張った場合、私は以下の経験的な統計情報を取得する:
今from pandas_datareader.data import DataReader as dr
r = dr('SPY', 'google', start='2000')['Close'].pct_change().dropna()
mean, var, std, skew, kurt = r.mean(), r.var(0), r.std(0), r.skew(), r.kurt() # ddof = 0
# mean: 0.00027732907268771364
# var: 0.00014416720067485022
# std: 0.012006964673673785
私は正規分布に合わせた場合この経験的データ、.fit
は、loc
とscale
のパラメータを返すことになっています。 (正規分布のために必要とされているすべてのこと。)チェックアウトすること:
import scipy.stats as scs
normmean, normstd = scs.norm.fit(r)
print(np.allclose(normmean, mean))
print(np.allclose(normstd, std))
True
True
しかし、scs.johnsonsu.fit
によって返されるものそれほど明確ではない:
print(scs.johnsonsu.fit(r))
(0.098009661042083682, 1.022060362199493, 0.0013471690867203458, 0.0072653444313926403)
これらの分布にfour parametersする必要があります:xi、ガンマ、デルタ、ラム。
しかし、私は彼らがあるべき経験的平均、にバックアップすることができません。
すなわち:
def johnsonmean(gamma, xi, delta, lam):
mean = xi - lam * np.exp(delta ** -2/2) * np.sinh(gamma/delta)
return mean
gamma, xi, delta, lam = scs.johnsonsu.fit(r) # correct order?
print(johnsonmean(gamma, xi, delta, lam))
-inf
そして
mean, var, skew, kurt = scs.johnsonsu.stats(loc=xi, scale=lam,
a=gamma, b=delta, moments='msvk')
はNaN
Sの束を取得します。