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()
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>]
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()
tfp.distributions.Cauchy の使い方がわからない
- tfp.distributions.Cauchy | TensorFlow Probability | TensorFlow
という Tensorflow の 確率分布関数がありましたが、以前と同様で使い方がわかりませんでした…
参考
以下、記事作成時に参考にしました。
以上です。
コメント