Python でコーシー分布の計算をする方法を調べてみました。 結果を記載します。


コーシー分布とは

コーシー分布 - Wikipedia記載から内容を抜粋します。

  • 連続確率分布の一種

  • ローレンツ分布 とも呼ばれる。物理学分野ではブライト・ウィグナー分布呼ばれる。

  • 期待値も分散も存在しない。

  • 株価の分析に使われる

  • 計算式は以下の通り
    $$ f(x) = \alpha / \pi { \alpha^2 + (x - \lambda)^2 } (\alpha > 0) $$


Python でのコーシー分布の計算方法

調べた限り、以下で計算ができるようです。
* numpy.random.standard_cauchy — NumPy v1.15 Manual

numpy.random.standard_cauchy を使う

numpy の ドキュメントのサンプルプログラムを実行します。

import numpy as np
import matplotlib.pyplot as plt
s = np.random.standard_cauchy(1000000)
s = s[(s>-25) & (s<25)]  #  グラフ描画できるように配列の範囲を切り出す    
plt.hist(s, bins=100)
plt.show()

20190324_output_2_0.png - Google ドライブ

scipy.stats.cauchy を使う

scipy.stats.cauchy — SciPy v1.2.1 Reference Guide
サンプルプログラムを実行し、コーシー分布の計算を行います。
cauchy.stats コーシー分布のモーメントを求めます。

from scipy.stats import cauchy
mean, var, skew, kurt = cauchy.stats(moments='mvsk')
print(mean, var, skew, kurt)

nan nan nan nan

mean 平均、var 分散、skew 歪度、 kurt 尖度 は全て未定義です。
続いて、コーシー分布のグラフを描きます。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
# %点関数 0.01、0.99 を100等分した等間隔な配列を作成する   
x = np.linspace(cauchy.ppf(0.01),cauchy.ppf(0.99), 100)
#  lw :線の太さ 5、alpha: グラフの透過度 0.6 
ax.plot(x, cauchy.pdf(x),'r-', lw=5, alpha=0.6, label='cauchy pdf')
rv = cauchy()
#  lw :線の太さ 2   、pdf 確率密度関数
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')

[<matplotlib.lines.Line2D at 0x118514160>]

20190324_output_7_1.png - Google ドライブ

vals = cauchy.ppf([0.001, 0.5, 0.999])
# allclose 2つのarrayが近似的に同じか確認する cdf 累積分布関数
np.allclose([0.001, 0.5, 0.999], cauchy.cdf(vals))

True

グラフの範囲を広げてヒストグラムを描きます。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
x = np.linspace(cauchy.ppf(0.01),cauchy.ppf(0.99), 100)
ax.plot(x, cauchy.pdf(x),'r-', lw=5, alpha=0.6, label='cauchy pdf')
rv = cauchy()
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
r = cauchy.rvs(size=1000)
# density=True で 密度プロット、線形の塗りつぶされたグラフを引く   
ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
ax.legend(loc='best', frameon=False)
plt.show()

20190324_output_10_0.png - Google ドライブ

tfp.distributions.Cauchy の使い方がわからない


参考

以下、記事作成時に参考にしました。

以上です。

コメント