Juliaで学ぶ確率変数(1) - 確率変数の定義 - Qiita
Juliaで学ぶ確率変数(2) - 2項分布(離散型) - Qiita
Juliaで学ぶ確率変数(3) - 幾何分布(離散型) - Qiita
Juliaで学ぶ確率変数(4) - ポアソン分布(離散型) - Oiita
Juliaで学ぶ確率変数(5) - 正規分布(連続型) - Qiita
Juliaで学ぶ確率変数(6) - 一様分布(連続型) - Qiita
Juliaで学ぶ確率変数(7) - 指数分布(連続型) - Qiita
Juliaで学ぶ確率変数(8) - ガンマ分布(連続型) - Qiita
Juliaで学ぶ確率変数(9) - ベータ分布(連続型) - Qiita
Juliaで学ぶ確率変数(10) - コーシー分布(連続型) - Qiita
Juliaで学ぶ確率変数(11) - まとめ - Qiita
本記事は、これまで書いた分布の記事をまとめたものです。各分布を簡単に比較できるように表にしてみました。また分布関連でよく使われるJulia言語のパッケージや関数、使い方についても簡単にまとめてあります。
Juliaの離散型確率変数のライブラリのドキュメントです。 ==>Distributions/Univariate/DiscreteDistributions
Juliaの連続型確率変数のライブラリのドキュメントです。 ==>Distributions/Univariate/ContinuousDistributions
#1.確率分布のまとめ
##1-1.確率分布の意味
分布名 | 種類 | 記号 | 意味 |
---|---|---|---|
2項 | 離散 | B(n;p) | 成功確率pのベルヌーイ試行(2値の試行)をn回行った時の、 成功する回数Xが従う確率分布 |
幾何 | 離散 | Ge(p) | 成功確率がである独立なベルヌーイ試行を繰り返す時、 初めて成功するまでの試行回数Xが従う確率分布 |
ポアソン | 離散 | Po(λ) | nが十分大きく確率pが非常に小さい場合、「np=一定。 λ=npとして、2項分布をポアソン分布で近似する。 |
正規 | 連続 | N(μ,σ) | 滑らかな左右対称の山の形の確率分布 平均値μが山頂で、標準偏差σが大きいほど急なカーブ。 実験の測定の誤差,テストの点数などは正規分布に従う。 定数μ=np、σ^2=np(1-p)として2項分布B(n;p)を近似する。 |
一様 | 連続 | U(a,b) | ランダムな事象を表現する確率分布 |
指数 | 連続 | Ex(λ) | 期間1/λあたりに1回起きると期待される事象が 1回起きるまでの時間の分布 |
ガンマ | 連続 | G(α,ν) | 期間1/αあたりに1回起こると期待されるランダムな事象が ν回起こるまでの時間の分布 |
ベータ | 連続 | Be(α,β) | |
コーシー | 連続 | C(μ,β) |
##1-2.確率密度関数、平均、分散
\begin{array}{|c|c|c|c|c|c|}
\hline
分布名 & 記号 & 確率密度関数 & 平均 E[X] & 分散 V[X]\\
\hline
2項 & B(n;p) & f(k) = \begin{pmatrix} n \\k \end{pmatrix} p^k (1-p)^{n-k} & np & np(1-p)\\
\hline
幾何 & Ge(p) & f(k)=p(1-p)^k & \frac{1-p}{p} & \frac{1-p}{p^2}\\
\hline
ポアソン & Po(\lambda) & f(k)=e^{-\lambda}\frac{\lambda ^k}{k!} & \lambda & \lambda\\
\hline
正規 & N(\mu,\sigma) & f(x) = \frac{1}{\sqrt {2\pi \sigma^2}} \exp\Biggl(-\frac{(x-\mu)^2}{2\sigma^2}\Biggr) & \mu & \sigma\\
\hline
一様 & U(a,b) & f(x) =
\left\{
\begin{array}{ll}
\frac{1}{b-a} & (a \leqq x \leqq b) \\
0 & (x<a\;or\;b<x)
\end{array}
\right.
& \frac{a+b}{2} & \frac{(b-a)^2}{12}\\
\hline
指数 & Ex(λ) & f(x) =
\left\{
\begin{array}{ll}
\lambda e^{-\lambda x} & (x \geqq 0) \\
0 & (x<0)
\end{array}
\right.& \frac {1} {\lambda} & \frac {1} {\lambda^2}\\
\hline
ガンマ & G(\alpha,\nu) & f(x) =
\left\{
\begin{array}{ll}
\frac{1}{\Gamma (\nu)} \alpha^\nu x^{\nu-1} e^{-\alpha x} & (x \geqq 0) \\
0 & (x<0)
\end{array}
\right. & \frac{\nu}{\alpha} & \frac{\nu}{\alpha^2}\\
\hline
ベータ & Be(\alpha,\beta) & f(x) =
\left\{
\begin{array}{ll}
\frac{1}{B(\alpha,\beta)} x^{\alpha-1} (1-x)^{\beta-1} & (0\leqq x \leqq 1) \\
0 & (otherwise)
\end{array}
\right. & \frac {\alpha}{\alpha + \beta} & \frac {\alpha \beta}{(\alpha+\beta+1)(\alpha+\beta)^2}\\
\hline
コーシー & C(\mu,\beta) & f(x) = \frac{1}{\pi} \frac{\alpha}{(x-\mu)^2+\alpha^2} & & \\
\hline
\end{array}\\
\\
##1-3.分布のグラフ
各分布のグラフの形です。それぞれのグラフが持つ意味は、それぞれの分布の解説記事をご参照ください。
2項分布 Binomial(10000, 0.001) | 幾何分布 Geometric(1/10) |
ポアソン分布 Poisson(8) | 正規分布 Normal(171,6) |
一様分布 Uniform(0,5) | 指数分布 Exponential(100) |
ガンマ分布 Gamma(100, 0.2) |
#2.Juliaで確率分布を扱う
復習ですが、分布F(x)は確率密度関数f(x)を使って以下のように定義されます。
\begin{align}
&離散型確率変数 \qquad F(x) = p(\{X \leqq x\}) = \sum_{k \leqq x} f(k)\\
&連続型確率変数 \qquad F(x) = p(\{X \leqq x\}) = \int_{-\infty}^{x} f(v) dv\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad\\
\end{align}
Juliaで分布を扱うためには、Distributionsパッケージを扱います。
Distributionsパッケージには代表的な確率分布を定義する関数が提供されています。例えば正規分布N(μ,σ)に対してNormal(μ,σ)という関数が提供されていますので、これで分布を定義し、それにpdf関数を適用すると確率密度関数を計算します。cdf関数を適用すると分布を計算します。
つまり確率密度関数(Probability Density Function = PDF)の評価はpdf関数を使い、分布(累積分布関数) (Cumulative Distribution Function = CDF)の評価はcdf関数を使います。
Distributions.pdf # 確率密度関数
pdf(d::UnivariateDistribution, x::Real)
Evaluate the probability density (mass) at x.
Distributions.cdf # 確率分布
cdf(d::UnivariateDistribution, x::Real)
Evaluate the cumulative probability at x.
分布のPlotには、標準のPlotsに加えて、StatPlotsというパッケージを使っています。これはPlots.jlを拡張する機能であるrecipesを使って、統計に関する拡張を行ってます。Juliaでデータ分析を行うときは、よく使われているパッケージです。
例として平均身長171、偏差6の正規分布を考えます。
using Plots
using Distributions
using StatPlots # これがないとエラーになります。
d=Normal(171, 6) # 平均171cm、標準偏差6の正規分布
println( cdf(d,175) - cdf(d,165) ) # F(175)-F(165) = 身長165cm-175cmの確率
plot(d, fill=(0, .5,:orange))
(補足)Juliaでは破壊的な関数の名前に ! をつけるのが慣習です。
scatter(d, leg=false) # 確率密度を散布図にする
bar!(d, func=cdf, alpha=0.3) # 分布を棒グラフにする
分布の期待値(平均値)、分散、標準偏差などはStatisticsパッケージを用います。
https://juliastats.github.io/Distributions.jl/latest/univariate.html#Common-Interface-1
Statistics.mean 期待値
Statistics.var 分散
Statistics.std 標準偏差 i.e. = sqrt(var(d))
Statistics.median 中央値
例えば2項分布 B(10000, 0.001) に適用した例です。
using Statistics, Distributions
n=10000
p=0.001
d= Binomial(n, p)
println("平均=", n*p) # 自力で計算
println("平均=", Statistics.mean(d)) # 平均関数で計算
println("分散=", n*p*(1-p)) # 自力で計算
println("分散=", Statistics.var(d)) # 分散関数で計算
当然ですが、平均値と分散は、自力の計算とStatisticsの関数で計算した値は等しいです。
平均=10.0
平均=10.0
分散=9.99
分散=9.99
#3.補足
##3-1.ガンマ関数の定義
\begin{align}
\\
&ガンマ関数の定義\\
&x>0の時\\
&\Gamma(x) =\int_{0}^{\infty} t^{x-1}e^{-t} dt\\
\\
\\
&ガンマ関数の性質\\
&[G1] \; \Gamma(1) = 1\\
\\
&[G2] \; \Gamma(x+1) = x\Gamma(x) \qquad 任意の実数x \geqq 1\\
&\qquad とくに、\\
&\qquad \Gamma(n+1) = n! \qquad 任意の非負整数n\\
\\
&[G3] \; \Gamma = \sqrt {\pi}\\
\\
\\
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
##3-2.ベータ関数の定義
\begin{align}
\\
&ベータ関数の定義\\
&x>0,\; y>0の時\\
&B(x,y) =\int_{0}^{1} t^{x-1} (1-t)^{y-1} dt\\
\\
\\
&ベータ関数の性質\\
&[B1] \; B(x,y) = B(y,x) \qquad 任意の実数x>0,\;y>0\\
\\
&[B2] \; B(x,y) = 2 \int_0^{\frac{\pi}{2}} \sin^{2x-1}\theta \;\; \cos^{2y-1}\theta \;\;d\theta \qquad 任意の実数x>0,\;y>0\\
\\
&[B3] \; B(x,y)=\frac {\Gamma(x)\Gamma(y)}{\Gamma(x+y)} \qquad 任意の実数x>0,\;y>0\\
\\
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
今回は以上です。