R上での様々な確率分布での計算について概説する.

離散分布

二項分布 \(B(n,p)\) の確率計算をしてみよう. 確率 \(p=0.3\) で成功する試行を \(n=10\) 回行いちょうど 2 回成功する確率 \(f(2)=P(X=2)\) は,dbinom 関数を用いて次のように計算できる.

dbinom(2, 10, 0.3)
## [1] 0.2334744

成功が5回以下である確率 \(F(5)=P(X \leq 5)\) は以下のようにする.

pbinom(2, 10, 0.3)
## [1] 0.3827828

この2つの関数名はよく似ている. 実際,1文字目の d は確率関数,p は累積分布関数を意味し, binom は二項分布(Binomial Distribution)を意味する.

同様に,他の離散分布についても確率計算が可能である. dp と分布名を組み合わせた関数を用いる.

確率関数をグラフにすることもできる.

xx <- c(0:10)
plot(dbinom(xx, 10, 0.3), type="h")

xx に 0 から 10 までの整数値を入れておき, 横軸をそれらの値で動かして dbinom 関数で確率を次々計算して plot 関数でグラフにしている.type="h" で線のグラフにしている.

連続分布

連続分布についても同様である. d が確率密度関数,p が累積分布関数を意味する.

例えば,標準正規分布 \(N(0,1)\) で 1.96 以下の確率 \(\Phi(1.96)=P(X \leq 1.96)\) は以下のように求められる.

pnorm(1.96)
## [1] 0.9750021

norm が正規分布に対応している. あるいは,平均50,標準偏差10の正規分布 \(N(50,10^2)\) で70以上の確率 \(P(X \geq 70)=1-F(70)\) は以下のように求められる.

pnorm(70, 50, 10, lower.tail=FALSE)
## [1] 0.02275013

lower.tail=FALSE を指定することにより上側確率が求まる. このオプションは離散分布でも使用可能であるが, 「\(\leq\)」ではなく「\(<\)」を意味するので十分注意されたい.

また,q で累積分布関数の逆関数を計算できる (すなわち,下側確率を指定して,確率変数の値を逆算できる). 例えば,平均50,標準偏差10の正規分布 \(N(50,10^2)\) で,下側確率が0.10となる点は以下のように求める.

qnorm(0.10, 50, 10)
## [1] 37.18448

他の連続分布は以下の通りである.

確率密度関数のグラフも plot で描くことが可能であるが, curve 関数を用いたほうが簡単かもしれない.

curve(dnorm(x, 50, 10), xlim=c(0,100))

curve 関数では x を含む関数を一つ目の引数に入れる. また,描画する x の最小値,最大値を xlim で指定する.

乱数生成

各分布に従う乱数を発生させたい場合には先頭の文字を r にすればよい. random の頭文字である.

例えば,標準正規分布 \(N(0,1)\) に従う乱数を30個得たい場合は次のようにすればよい.

rnorm(30, 50, 10)
##  [1] 40.69939 53.01153 41.41433 50.29874 37.85111 58.23607 21.85653
##  [8] 75.10455 50.80389 58.22395 39.85045 33.13546 50.06682 59.58891
## [15] 49.50141 43.10477 48.27229 55.53328 33.29914 45.61947 48.66883
## [22] 29.15556 51.37516 73.15820 42.18911 43.24982 44.86466 35.94622
## [29] 34.41840 54.92380