Up

カイ2乗検定

分布の適合度の検定

 

表1のような度数分布のデータに対して、その度数分布が所与の確率分布に合うかどうかの検定を行うカイ2乗検定(岡本安晴「データ分析統計学入門」2009おうpp8588)のプログラムを作成した。

表1は、サイコロを100回投げたときの出た目の数の度数を数えたものである(シミュレーションで作成)。比率は、各目の出る確率を相対比率で表したものである。全て1で等しいので、各目の出る確率はである。

 

表1 サイコロの目の出る確率の比率と頻度

目の数

比率

1

1

1

1

1

1

頻度

19

14

17

13

21

16

 

偶数の目の方が、奇数の目より2倍出易いという確率を表すときは、偶数の目には2、奇数の目には1を割り当てればよい。

 

表1のデータに対して、カイ2乗検定を行うプログラムを次のように作成した。

 

==============  chi2_test_distri.py  =====================

from calc_chi2 import Ccalc_chi2

 

prop =  [1, 1, 1, 1, 1, 1]

obs  =  [19, 14, 17, 13, 21, 16]

 

calc_chi2 = Ccalc_chi2(prop, obs)

chi2, p, df = calc_chi2.calc()

 

print("chi^2 = %f   df = %d"%(chi2, df))

print("p = %f"%(1.0 - p))

=============================================

 

比率をリストpropに、頻度データをリストobsに設定して、クラス型Ccalc_chiのオブジェクトcalc_chi2propobsを実引数として生成している。カイ2乗の値とp値および自由度は、calc_chi2のメソッドcalc_chi2.calc()を呼び出して得ている。クラス型Ccalc_chi2は以下のように宣言されている。

 

================  calc_chi2.py  ====================

from Calc_p_from_chi2 import calc_p

 

class Ccalc_chi2:

    def __init__(self, prop, obs):

        self.prop = prop

        self.obs = obs

 

    def calc(self):

        sump = 0.0

        for v in self.prop:

            sump += v

        prob = []

        for v in self.prop:

            prob.append(v / sump)

 

        N = 0

        for v in self.obs:

            N += v

 

        c = len(self.obs)

        df = c - 1

        E = []

        for i in range(0, c):

            E.append( prob[i] * N )

 

        print(" ")

        print("%10s"%"Obs.", "%10s"%"E")

        for i in range(0, c):

            print("%10d"%self.obs[i], "%10.2f"%E[i])

        print(" ")

 

        chi2 = 0.0

        for i in range(0, c):

            chi2 += ((self.obs[i] - E[i]) ** 2.0) / E[i]

 

        p = calc_p(chi2, df)

 

        return chi2, p, df

============================================

 

表1のデータに対する上のプログラムを実行すると図1のような結果を得る。

図1

 

表示されている結果は

であり、有意水準5%で判定すると、p値0.743058は有意水準5%=0.05より大きい。したがって、設定された確率、目の出る確率はすべて1/6、と頻度データとの有意差は認められない。

 

プログラムは圧縮ファイルchi2_test_distriPrg.zipにまとめた。ファイル名chi2_test_distriPrg.zipをクリックしてダウンロードすることができる。

 

 

Up