独立性検定とは、クロス集計表を作成したとき、2つの属性が独立であるかどうかを統計的に判定する方法である。
独立性検定を行う手順は次の通りである。

  1. 仮説を立てる。
    • 帰無仮説H0:属性Ai(i=1,…,m)とBj(j=1,…,n)は独立である。
    • 対立仮説H1:属性Ai(i=1,…,m)とBj(j=1,…,n)は少なくとも一つ以上は独立でない。
  2. B1 B2 ・・・ Bn 合計
    A1 x11 x12 ・・・ x1n a1
    A2 x21 x22 ・・・ x2n a2
    ・・・ ・・・ ・・・ ・・・ ・・・ ・・・
    Am xm1 xm2 ・・・ xmn am
    合計 b1 b2 ・・・ bn N
  3. AiとBjの期待度数yijを次の式により求める。
    chi-square-test-test-of-independence-expectation
  4. 検定統計量Tを次のように計算する。
    chi-square-test-test-of-independence-test-statistic
  5. このとき、検定統計量Tは自由度(m-1)(n-1)のカイ二乗分布に従うので、有意水準のカイ二乗値kと比較する。
  6. T>kであれば、帰無仮説を棄却して、対立仮説を採用する。

男女200人に朝食・昼食・夕食について、どの時間帯の食事を最も重要視するかの調査を行った結果、次の表になった。このとき、男女と朝食・昼食・夕食について独立であるかどうかを調べる。

朝食 昼食 夕食 合計
50 15 55 120
10 40 30 80
合計 60 55 85 200
  • 帰無仮説H0:男女と朝食・昼食・夕食は独立である。

期待度数の計算式は次のようになる。

朝食 昼食 夕食 合計
200×(120/200)×(60/200) 200×(120/200)×(55/200) 200×(120/200)×(85/200) 120
200×(80/200)×(60/200) 200×(80/200)×(55/200) 200×(80/200)×(85/200) 80
合計 60 55 85 200

期待度数の値は次のようになる。

朝食 昼食 夕食 合計
36 33 51 120
24 22 34 80
合計 60 55 85 200

検定統計量は次のようになる。

朝食 昼食 夕食 合計
(50-36)2/36 (15-33)2/33 (55-51)2/51
(10-24)2/24 (40-22)2/22 (30-34)2/34
合計
朝食 昼食 夕食 合計
5.4444 9.8181 0.3137 15.5762
8.1666 14.7272 0.4705 23.3643
合計 13.611 24.5453 0.7842 38.9405

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

CHIINV(確率,自由度)

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

chi-square-test-test-of-independence-excel-chiinv

T=38.9405>5.991465から棄却域に入るので、帰無仮説H0は棄てられる。よって、男女と朝食・昼食・夕食は少なくとも一つ以上は独立でない。

Rで計算する

Rで独立性検定を行う場合は、次のようになる。


> chisq.test(matrix(c(50, 15, 55, 10, 40, 30), ncol=3, byrow=T))

	Pearson's Chi-squared test

data:  matrix(c(50, 15, 55, 10, 40, 30), ncol = 3, byrow = T)
X-squared = 38.9409, df = 2, p-value = 3.5e-09

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

Pythonで計算する

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


import numpy as np
from scipy import stats

print(stats.chi2_contingency(np.array([[50, 15, 55], [10, 40, 30]]))

これを実行すると、次のように表示される。


(38.940879382055854, 3.5002211279659769e-09, 2, array([[36., 33., 51.], [24., 22., 34.]]))

これは、次のような意味である。

  • 検定統計量:38.940879382055854
  • p値:3.5002211279659769e-09
  • 自由度:2
  • 期待度数:array([[36., 33., 51.], [24., 22., 34.]])

関連する記事

  • UbuntuにRStudioをインストールするための手順UbuntuにRStudioをインストールするための手順 Ubuntuにデスクトップ版のRStudioをインストールするための手順をお伝えする。 まず、Ubuntuが32bitか64bitかを確認するため、端末を起動させ(ショートカットキー:Ctrl+Alt+t)、以下のコマンドを実行する。 i686、i386と表示されれば32bit、x86_64、amd64と表示されれば64bitということである。 $ […]
  • R言語 CRAN Task View:メタアナリシスR言語 CRAN Task View:メタアナリシス CRAN Task View: Meta-Analysisの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Michael Dewey Contact: lists at […]
  • 基本統計量基本統計量 [latexpage] 基本統計量とは、データの基本的な特徴を表す値のことで、代表値と散布度に区分できる。代表値とは、データを代表するような値のことで、例えば、平均値、最大値、最小値などがある。散布度とは、データの散らばり度合いを表すような値のことで、例えば、分散、標準偏差などがある。 平均値 […]
  • CakePHP:プラグイン・パッケージ一覧CakePHP:プラグイン・パッケージ一覧 CakePHPのプラグイン・パッケージのサイトで公開されているプラグイン・パッケージの一覧をGoogle翻訳を使用させていただき機械的に翻訳したものとあわせてご紹介する。プラグイン・パッケージの情報は2017年04月01日時点のものであることに注意していただきたい。何かのお役に立てれば幸いだ。 1.3 2.x 3.x 3.x 2.x API […]
  • R ggpartyパッケージを用いた決定木の可視化R ggpartyパッケージを用いた決定木の可視化 決定木の可視化において、とても柔軟性が高いggpartyパッケージをご紹介します。 ggpartyパッケージは、ggplot2の機能をpartykitに拡張し、partyクラスのツリーオブジェクトのために明瞭に構造化され、高度にカスタマイズ可能なビジュアライゼーションを作成するために必要なツールを提供します。 ggpartyパッケージを用いると、ノードやエッジに対 […]
カイ二乗検定 – 独立性検定