統計学を学んでいてRでシミュレーションをしたくなったある日のこと、確率密度関数の使い方がよく分からず困った....
今回は、確率密度関数の使い方を正規分布を例にまとめてみます!!
正規分布の確率密度
Rの確率密度関数を調べてみると、
- rnorm
- dnorm
- pnorm
- qnorm
があるようです。
最初の1文字が違うだけで、何が違うんだ!と私は思ったので、一つずつ検証してみました。
まずはdnromから
まずはdnormから試してみます。 helpをみると第一引数にquantiles、第二引数にmean、第三引数にsdとあります。第一引数がよく分かりませんが、とりあえず平均0、分散1の標準正規分布で試してみます。
> dnorm(3,mean = 0,sd = 1) [1] 0.004431848 > dnorm(0,mean = 0,sd = 1) [1] 0.3989423
出ました!どうやらdnormのdはdensityのdで、正規分布の確率密度の値を返してくれるようです。 ちなみに確率密度関数はこんなのです!
ここのuに0、σに1が入っています。
試しにマイナス無限大からプラス無限大まで積分してみると、、、
> integrate(dnorm,-Inf,Inf) 1 with absolute error < 0.000094
無事に1になりましたー
グラフでみてみると
確かにX軸が3のところは0に近く、0のところは0.4付近にあります!
これがdnormです。しかし、グラフを書いたりする以外にあまり使い道はなさそうです.....
rnorm
次はrnomです。dnormと違って第一引数はsizeなので、個数のようです。
とりあえず実行してみます。
> rnorm(10,0,1) [1] 0.4626736 -0.1871801 0.4449611 0.8936388 [5] -0.6656489 0.7289715 -2.0133530 -0.7423946 [9] -0.6219160 0.4033237
出ました!これは標準正規分布に従う10個の乱数のようですね。 適当に1000個ぐらい発生させて、平均と分散を計算してみます。
> rm <-rnorm(1000,0,1) > mean(rm) [1] 0.06051489 > var(rm) [1] 1.016525
平均と分散も理論上の値とだいたいあってます。
qnormとpnorm
続いてqnormとpnormです。この二つは同時に学んだ方が理解が深まります。
> qnorm(0.95,0,1) [1] 1.644854 > pnorm(1.6448,0,1) [1] 0.9499945
qnormは第一引数に確率を受けて、確率密度を返し、
pnormは第一引数に確率密度を受けて、確率を返すようです。
グラフでみてみましょう!
qnormは累積確率が95%になる確率密度の値(1.6448)を返して、pnormは確率密度がマイナス無限大から1.6448までの累積確率(94.9%)を返します。
最後にマイナス無限大から1.6448までの範囲で積分してみます。
> integrate(dnorm , -Inf, 1.6448) 0.9499945 with absolute error < 0.000000086
予想通りほぼ95%になりました!
まとめ
- dnorm : xの値を受けて、確率密度関数の値を返す。あまり使わなさそう。
- rnorm : 第一引数は個数を受けて、正規分布に従う乱数を返す。
- qnorm : 第一引数に確率を受けて、確率密度を返す。
- pnorm : 第一引数に確率密度を受けて、確率を返す。
使いながら慣れるのが一番ですね!
最後までお読み頂き、ありがとうございました!
Rを学ぶおすすめ書籍
Rを使ったデータ分析をするなら、手元において損はない一冊です。
参考にさせて頂いたサイト
http://www2.hak.hokkyodai.ac.jp/fukuda/lecture/SocialLinguistics/Rshagen/05distributionR.html
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/60.html
http://cse.naro.affrc.go.jp/minaka/R/R-normal.html