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

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

  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という意味である。

関連する記事

  • R UbuntuでRからMariaDBへ接続する方法 UbuntuでRからMariaDBへ接続して、データフレームとして取得する方法をお伝えする。 環境 Ubuntuのバージョン $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu […]
  • R言語 CRAN Task View:時系列解析R言語 CRAN Task View:時系列解析 CRAN Task View: Time Series Analysisの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Rob J Hyndman Contact: Rob.Hyndman at […]
  • UCI 機械学習リポジトリのデータセット一覧UCI 機械学習リポジトリのデータセット一覧 UCI machine learning repositoryで公開されているデータセットの一覧をご紹介します。英語での要約(abstract)をgoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。データセットのサンプルを探す参考にしていただければ幸いです。 掲載内容は2021年10月01日の情報で、データセット数は576です。 2.4 […]
  • 適切な回答を得るためのアンケートの作り方適切な回答を得るためのアンケートの作り方 アンケートは正しく質問をしないと、適切な回答が得られずにアンケートが持つ情報の価値が半減すると言っても過言ではない。 アンケートを回答しているときの気持ちを思い出して欲しい。おそらく、さっさと終わらせようと思いながら回答用紙に記入しているのではないだろうか。 あなたが質問者の側になったときは、この気持ちを常に念頭に置いて質問を考えよう。 ここでは、質問を作成 […]
  • R K-means法のクラスタ数を機械的に決定する方法R K-means法のクラスタ数を機械的に決定する方法 K-means法(K平均法)を用いてクラスタリングする場合は、あらかじめクラスタ数を指定しなければならない。 このときのクラスタ数をどのように決めてよいか迷ったことはないだろうか。 ここでは、K-means法のクラスタ数を機械的に決定する方法をお伝えする。 K-means法のクラスタ数を機械的に決定するために用いるのが、Gap統計量である。 Gap統計量を用いたク […]
カイ二乗検定 – 適合度検定