χ2分布(カイ2乗分布)
χ2分布はχ2検定などの仮説検定を行うための確率分布です。
 標準正規分布からランダムに一定数のデータを取り出して、その2乗和を計算するという作業を無限回繰り返したときに描かれる確率分布をχ2分布といいいます。2乗するわけですから、χ2値は正の値しかとりません。χ2分布が左右非対称な確率分布であることも予想できるでしょう。
 また、ここで「一定数」としていたものがχ2分布の「自由度」です。カイ2乗分布は、自由度で形が変わります。

χ2分布関連の呪文
確率分布の呪文は、頭文字1字で「Rがすべき作業内容」を表し、2文字目から確率分布の略称となっていることが多いです。
χ2分布の英名はchi-squared distributionなので「chisq」が分布の略称です。
頭文字1字には、d、p、rの3通りがあります。χ2分布ではrを滅多に使わないので、省略します。
dchisq: 想定したχ2分布におけるX軸の値ごとの「確率密度」を求める。densityのd
pchisq: 想定したχ2分布において、X軸が、ある値以下となる(orより大きな値となる)「確率」を求める。probabilityのp

χ2分布の確率密度
あるχ2分布における各値の確率密度を計算したい場合はdchisqを用います。
自由度が1のχ2分布で、それぞれのχ2値の確率密度を求めましょう。
dchisq(1, df=1)
dchisq(2, df=1)
dchisq(5, df=1) 
今度は自由度が3のχ2分布で、それぞれのχ2値の確率密度を求めましょう。
dchisq(1, df=3)
dchisq(2, df=3)
dchisq(5, df=3)
χ2分布は自由度に応じて変化することが分かります。

χ2分布の確率
今度は確率密度ではなく、確率を計算します。例えば、自由度が1のχ2分布で、χ2値が8よりも大きな値をとる確率を求めてみましょう。
pchisq(8, df=1, lower.tail=F) 
デフォルトがlower.tail=TRUEなので、ここではFALSEに変えて、χ2値が8よりも大きな値となる確率Pを求めています。
pchisq(8, df=3, lower.tail=F) 
pchisq(8, df=5, lower.tail=F) 
このように、χ2値が同じでも自由度が異なるときはP値も異なります。
χ2検定などではχ2値とP値だけでなく、自由度dfの値も必要です。

χ2分布の形
χ2分布は自由度dfによって形が決まるので、dfの値を変えて比べてみましょう。
x <- seq(0.1, 10, 0.01)
plot(x, dchisq(x, df=1), type="l", ylim=c(0, 0.5))  #type="l"の「l」はイチではなくエルの小文字です。
lines(x, dchisq(x, df=3), col="red")
lines(x, dchisq(x, df=5), col="blue")

χ2分布を自作してみる
χ2値とは、標準正規分布からランダムに取り出した値を2乗して、それらを全て足し合わせた総和です。なので、正の値しかとりません。まず、上記と同じように、この分布を描きます。

par(mfrow=c(2, 1))
x <- seq(0, 20, 0.01)
plot(x, dchisq(x, df=1), lwd=3, type="l", ylim=c(0,1))
このχ2分布を標準正規分布からランダムに値をとって2乗することで自作してみましょう。
rnorm(10000)^2 -> z2
hist(z2, breaks=seq(0, 20, 0.5))
par(mfrow=c(1, 1))
たしかに、さきほどのplotのような分布になりましたね。こんどは、自由度5のχ2分布を描いてみます。
par(mfrow=c(2, 1))
x <- seq(0, 30, 0.01)
plot(x, dchisq(x, df=5), type="l")
自由度によって「山」の形は変わりますね。

では、自由度5のχ2分布を標準正規分布から作って描いてみましょう。
z3 <- c()
for(i in 1:10000){
    sum(rnorm(5)^2) ->z3[i]
}
hist(z3)
par(mfrow=c(1, 1))

最後に自由度を変えてχ2分布を比べてみましょう。
x <- seq(0, 15, 0.01)
plot(x, dchisq(x, df=1), lwd=3, type="l", ylim=c(0,1))
lines(x, dchisq(x, df=2), lwd=3, lty=2)
lines(x, dchisq(x, df=3), lwd=3, col=2)
lines(x, dchisq(x, df=5), lwd=3, col="darkblue")
このように、山の形がぜんぜん違うので、χ2値 (X軸の値) が同じでも、
自由度が違えば、そこから左裾野側の面積であるP値も全然違います。
pchisq(5, df=1, lower.tail=F)
pchisq(5, df=3, lower.tail=F)
pchisq(5, df=5, lower.tail=F)

最終更新日時: 2021年 02月 13日(土曜日) 14:53