私はelmと統計学、そしてSVGの初心者でかつ初学者です。何か間違っているところがあったらコメントお願いします。
ソースコード:https://github.com/saburooo/simple-stat
成果物:https://mysimple-stat.web.app
確率変数とは
はじめての統計学によると確率変数とは
確率分布に従って起こる変数のことである。
と書いてあります。
確率分布とは何らかの事象が起きる確率の集まりを複数の数字あるいはグラフで表現したものと考えています。
この変数は大きく分けて2種類あるそうです。
- 離散的確率変数
- 連続的確率変数
離散的確率変数とは
- 変数の値が数で表せるもの
- 変数の値が記号で表せるもの
の二種類が存在します。数で表せるものの典型はサイコロの目やトランプの組み合わせになるでしょう、それとは別に変数の値が記号で表せるものの典型は硬貨の表と裏が挙げられます。
そしてその変数になる確率は0と1の間に存在します。
これらがわかった上で確率分布とは何か、それは確率的には100%超えは無いけど一方で0%を下回ることもない。
直感的にしっくりきますね!!
確率密度と確率の違い
この2つは似てるようで違います。確率密度とはグラフで見た時の山の高さのことでそれをより集めた図形のことを確率密度関数と呼びます。
この2つは分布のタイプによって同じ値になったり違う値になったりします、具体的には
- 離散型分布では確率密度と確率は同じである。
- 連続型分布ではそれぞれ違う値である。
- 確率密度 = 確率密度関数の1箇所の高さ
- 確率 = 確率密度関数の下の一定の幅の面積
こんな感じになります。これらを説明してから本題に入ります。
二項分布
二項分布とは最も知られた離散型の確率分布であらゆる分布の中で一番応用範囲が広いと評判です。
これを作る前にまずは同じ条件のもとで何回も同じことを行うベルヌーイ試行というやり方を実行します。
何度も行ったらその時々に出した数字を計測してグラフにしてみます。
そうして出てくるグラフにはある特徴があります、それは
- nが0から始まるため、奇数のときはグラフの境が偶数に、偶数なら奇数になる。
- 確率が0.5なら左右対称に、それ以上なら右にグラフが歪み、それ以下なら左に歪む。
非常に単純にelmで表現すると以下の通り。
-- そのまんま直訳しちゃいました。
biDistributionProbability : Float -> Int -> Int -> Float
biDistributionProbability p n c =
toFloat (combination n c) * (p ^ toFloat c) * ((1 - p) ^ toFloat (n - c))
回数を追ってみたい場合はこれを使ってリストを返す関数を作ります。
biDistribution : Float -> Int -> List Float
biDistribution p n =
let
lRange = List.range 0 n
in
List.map (\x -> biDistributionProbability p n x |> roundNum 4) lRange
組み合わせの計算を使っているのですがその詳細はこちら
ポアソン分布
先程の二項分布と同じくらいには有名な離散型確率分布、ベルヌーイ試行の回数が非常に大きい時に便利な関数で二項分布でやろうとすると大変なものはこれを使って計算します。
poissonDistributionProbability : Float -> Int -> Int -> Float
poissonDistributionProbability p n x =
let
nn =
toFloat n
mu =
p * nn
el =
Basics.e ^ -mu
in
( el * (mu ^ toFloat x) ) / toFloat (factorial x)
これにもリストを返す関数を定義したいと思います。
poisson : Float -> Int -> List Float
poisson p n =
let
lRange = List.range 0 n
in
List.map (\x -> poissonDistributionProbability p n x |> roundNum 6) lRange
まだまだわかっていないところも多く、もう少し調べていきたいと思っています。