適合度検定とは、観測度数分布が期待度数分布と同じかどうかを統計的に確かめる方法である。

適合度検定を行う手順は次の通りである。

  1. 仮説を立てる。
    • 帰無仮説 H0:観測度数分布と期待度数分布が同じ。
    • 対立仮説 H1:観測度数分布と期待度数分布が同じではない。
  2. A1 A2 ・・・ An 合計
    観測度数 x1 x2 ・・・ xn X
    期待度数 y1 y2 ・・・ yn Y
  3. 期待度数yi{i=1,..,n}が5以下の場合は、隣接する列と合わせる。
  4. 検定統計量Tを次のように計算する。
    chi-square-test-test-of-goodness-of-fit-test-statistic
  5. このとき、検定統計量Tは自由度(n-1)のカイ二乗分布に従うので、有意水準のカイ二乗値kと比較する。
  6. T>kであれば、帰無仮説を棄却して、対立仮説を採用する。

日本人のABO式血液型の分布は大まかにA型が40%、B型が20%、O型が30%、AB型が10%とされている(「ABO式血液型 – Wikipedia」より)。
100人に血液型を調査したとき、A型が47人、B型が18人、O型が27人、AB型が8人であった場合、日本人のABO式血液型の分布に従っているかを確認してみる。
そこで、帰無仮説は次のようになる。

  • 帰無仮説 H0:A型が40%、B型が20%、O型が30%、AB型が10%である。

期待度数は観測度数合計×割合となるので、まとめると次のようになる。

血液型 A型 B型 O型 AB型 合計
観測度数 47 18 27 8 100
割合 0.4 0.2 0.3 0.1 1
期待度数(=観測度数合計×割合) 40 20 30 10 100

次にそれぞれに対して、(観測度数 – 期待度数)2/期待度数を求める。

血液型 A型 B型 O型 AB型 合計
(観測度数-期待度数)2/期待度数 (47-40)2/40 (18-20)2/20 (27-30)2/30 (8-10)2/10
(観測度数-期待度数)2/期待度数 1.225 0.200 0.300 0.400 2.125

これから検定統計量はT=2.125となる。
これは、自由度(4-1)=3のカイ二乗分布に従うので、有意水準を0.05とするとカイ二乗値は7.81473となる。
エクセルでこの値を求めるときは、CHIINV関数を使えば良い。

CHIINV(確率,自由度)

今回の例では、セルに「=CHIINV(0.05,3)」を入力する。

chi-square-test-test-of-goodness-of-fit-excel-chiinv
T=2.125<7.81473から棄却域に入らないので帰無仮説H0を棄てられない。
よって、調査結果は統計的にA型が40%、B型が20%、O型が30%、AB型が10%であるといえる。

Rで計算する

Rで適合度検定を行う場合は、次のようになる。


> chisq.test(c(47, 18, 27, 8), p = c(0.4, 0.2, 0.3, 0.1))

    Chi-squared test for given probabilities

    data:  c(47, 18, 27, 8)
    X-squared = 2.125, df = 3, p-value = 0.5469

よって、有意水準を5%(=0.05)とすると、p-value=0.5469>0.05となるため、帰無仮説は棄却されない。

Pythonで計算する

Pythonで適度度検定を行う場合は、次のようになる。あらかじめ、scipyパッケージをインストールしておく。


from scipy import stats
result = stats.chisquare([47, 18, 27, 8], f_exp = [40, 20, 30, 10])
print(result)

これを実行すると、次のようになる。


(2.125, 0.5468716738890154)

これは、カイ二乗値2.125、p値0.5468という意味である。

関連する記事

  • WindowsにMariaDBをインストールする手順WindowsにMariaDBをインストールする手順 WindowsにMariaDBをインストールする手順についてお伝えいたします。 ファイルのダウンロード MariaDBのインストールファイルをダウンロードするために、次のサイトに移動します。 MariaDB.org - Supporting continuity and open […]
  • R言語 CRAN Task View:追跡データの処理と分析R言語 CRAN Task View:追跡データの処理と分析 CRAN Task View: Processing and Analysis of Tracking Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Rocío Joo and Mathieu Basille Contact: rocio.joo at […]
  • R ggplot2を用いて散布図と周辺分布をプロットする方法R ggplot2を用いて散布図と周辺分布をプロットする方法 ggplot2を用いて散布図と周辺分布をプロットする2つの方法をお伝えします。 最初の方法は、ggExtraパッケージのggMarginal関数を用いる方法で、周辺分布を簡単にプロットすることができます。 二番目の方法は、散布図と周辺分布を作成した上で、一つにまとめる方法です。 それぞれ一長一短があります。 最初の方法は、コード量が少ないですがグラフとして […]
  • R言語 CRAN Task View:心理モデルや手法R言語 CRAN Task View:心理モデルや手法 CRAN Task View: Psychometric Models and Methodsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Patrick Mair, Yves Rosseel, Kathrin Gruber Contact: mair at […]
  • R 文字列ベクトルで文字列を指定して要素を削除する方法R 文字列ベクトルで文字列を指定して要素を削除する方法 Rの文字列ベクトルで、文字列を指定して要素を削除する方法をお伝えする。 通常、ベクトルの要素を削除する場合は、次のように添字にマイナスを付加して削除する。 > s # 1番目の要素を削除 > s[-1] [1] "猫である。" "名前は" "まだ無い。" > # 1番目から2番目の要素を削除 > s[-1:-2] [1] "名前は" […]
カイ二乗検定 – 適合度検定