読者です 読者をやめる 読者になる 読者になる

カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまにRuby on Railsなども。

【統計】F分布をR言語で実験してみた

統計 R

前回、カイ二乗分布をR言語で実際に描いてみた。
totech.hateblo.jp
今回はカイ二乗分布とも関連のあるF分布を同じ要領で、Rを使って実際にヒストグラムを描いてみる。

F分布の定義

まずは教科書的なF分布の定義の確認から。
確率変数U, Vがそれぞれ自由度k_u, k_vのカイ二乗分布に従い、かつこれらが独立とする。
このとき、以下のFをフィッシャーの分散比と呼ぶ。
f:id:osn_th:20160409115008p:plain
このフィッシャーの分散比Fが従う分布を自由度(k_u, k_v)のF分布と呼ぶ。

F分布のヒストグラム

上の定義に従って、F値を算出するRの関数を以下のように実装する。
まず、算出のために前回と同様にカイ二乗分布に従う値を取得するための関数kai2を定義する。
そして、それを使って二種類のカイ二乗値をそれぞれの自由度をパラメータとしてF値を算出するf_valueを実装した。

# 標準正規分布から自由度dfの数だけサンプルを抽出し、それらの二乗和を求める
kai2 <- function(df) {
  sum(rnorm(df, mean=0, sd=1)**2)
}

# F値(2つのカイ二乗値を自由度で割った値の比)を求める
f_value <- function(df1, df2) {
  (kai2(df1) / df1) / (kai2(df2) / df2)
}

これを使ってヒストグラム、さらにR標準のF分布の関数をかぶせてみるとグラフは次のようになる。

自由度(10, 20)のF分布

# F分布
df1 <- 10
df2 <- 20
x <- sapply(c(1:10000), function(x) { f_value(df1, df2) } )
hist(x, freq=FALSE, breaks=30, main="F分布" )
curve(df(x, df1, df2), add=TRUE)

f:id:osn_th:20160409115010p:plain
一致していることが分かる!

※読んでいる本

統計学が最強の学問である[実践編]

統計学が最強の学問である[実践編]

F分布の説明はこちらの方を参考にしました。
統計学入門 (基礎統計学)

統計学入門 (基礎統計学)

関連記事