カイ二乗値からp値を積分計算,Excel関数と比較

執筆責任:井口豊(長野県岡谷市・生物科学研究所

カイ二乗値(χ2)から p 値を算出するのに使われる Excel の関数が, CHIDIST 関数である。自由度を n とすると
CHIDIST(χ2, df)
と入力することによって,カイ二乗分布の右側確率が得られる。

例えば,
χ2 = 10
df = 10
ならば,
=CHIDIST(20, 10)
と入力すると
0.02925269
が得られ,これがp値となる。

これを,統計解析ソフト R で計算するには, pchisq 関数を使えば良い。もし, R を使えなければ, Rweb に以下のスクリプトをコピペして計算してほしい。

# カイ二乗 p 値の計算
k<- 20 #カイ二乗値
n<- 10 # 自由度

# 組み込み関数によるp値
pchisq(k, n, lower=F)

結果
0.02925269
当然ながら,Excel の CHIDIST 関数の場合と全く同じである。 

この具体的な計算は,カイ二乗分布の確率密度関数を,区間 (k, ∞) の範囲で積分して求められる。

カイ二乗分布のp値の計算

ここで,ガンマ関数 Γ は,以下のように定義される。

カイ二乗分布の確率密度関数で使われるガンマ関数


この積分計算を R で行なうためには,以下のようなスクリプトになり,当然ながら,同じ p 値が算出される。

# p 値を積分で求める。
k<- 20 #カイ二乗値
n<- 10 # 自由度

# ガンマ関数の計算
g<- function(x) {
x^(n/2-1)*exp(-x)
}

gam<- integrate(g, 0, Inf)$value

カイ二乗分布の確率密度関数(ガンマ関数の部分を除く)
f<- function(x) {
x^(n/2-1)*exp(-x/2)
}

# カイ二乗分布の確率密度関数を,区間 (k, ∞) の範囲で積分
1/(2^(n/2)*gam)*integrate(f, k, Inf)$value

# カイ二乗分布における p値 の範囲
x1<- k
x2<- 30
d<- seq(x1, x2, 0.01)
xa<- c(x1, d, x2) 
ya<- c(0, dchisq(d, 10), 0) 
curve(dchisq(x, 10),xlim=c(0, 30),
 ylab="Probability density",
 main="Chi-square distribution") 
polygon(xa, ya, col="magenta")

カイ二乗分布における p値 の範囲