My Notes

統計学とかR(R言語)とかPython3の覚え書きとか走り書きとか。 座右の銘にしたい: All work and no play makes Jack a dull boy.

Python3(pandas, Scipy)で、差に対するカイ二乗検定。stats.chisquare()

Python3コード

#!/usr/bin/env python3


"""(docstring)
"""


# 使用したデータは『すぐできる生物統計』
#
# 差に対するカイ二乗検定
#
# メンデルの法則に従う遺伝実験で、しわのないえんどう豆としわのあるえんどう豆の
# 雑種第1世代(F1)が交雑された。
# しわのないえんどう豆の個数 = 69
# しわのあるえんどう豆の個数 = 31
# この100個のF1について、メンデルの法則で予想される3:1の比と違うかどうか検定する。
#
# 帰無仮説
# 得られた比が期待される比に等しい。
# 具体的には、しわ無えんどう豆:しわ有えんどう豆の比が3:1に等しい。


# import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats


def main():
    """(docstring)
    """

    # matplotlib
    # macOSやOS Xで文字化けするなら。
    # font = {'family' : 'Osaka'}

    # 簡単な方法を先に書いておく。
    #
    # わざわざDataFrame()等を作りたくなければ、
    # sp.stats.chisquare([69, 31], f_exp=[75, 25])
    # 第1引数に観測度数(個数)、第2引数にf_expとして期待度数(個数)。
    # 引数名f_expは省略できるが、他の引数もあるため明示的に書いた。
    #
    # 出力
    # Power_divergenceResult(statistic=1.9199999999999999, pvalue=0.16585666034290991)

    # 書籍では、度数ではなく個数となっているのでそれに従う。
    dat = {'観測個数': [69, 31], '期待個数': [75, 25]}

    # DataFrameを作成する。indexを付けたいので引数として書く。
    df = pd.DataFrame(dat, index = ['しわ無えんどう豆', 'しわ有えんどう豆'])
    print(df)
    print('')

    # sp.stats.chisquare()
    # 第1引数に観測度数(個数)、第2引数にf_expとして期待度数(個数)。
    res = sp.stats.chisquare(df.ix[:, '観測個数'], f_exp=df.ix[:, '期待個数'])
    print(res)
    print('')

    # sp.stats.chisquare()
    # カイ二乗値とp値として代入。
    chi_squared_test_statistic, p_value = sp.stats.chisquare(df.ix[:, '観測個数'], f_exp=df.ix[:, '期待個数'])

    # 少数を第3位まで丸める。
    chi_squared_test_statistic = round(chi_squared_test_statistic, 3)
    p_value = round(p_value, 3)
    print('カイ二乗値とp値')
    print('{0}{1} {2}'.format(chi_squared_test_statistic, ',', p_value))
    print('')

    # 帰無仮説が棄却されるかどうか判定。
    if p_value < 0.05:
        print('{0}{1} {2}'.format('p値', p_value, '< 0.05'))
        print('帰無仮説は棄却される。')
    else:
        print('{0}{1} {2}'.format('p値', p_value, '> 0.05'))
        print('帰無仮説は棄却されない。')

if __name__ == '__main__':
    main()

出力

          期待個数  観測個数
しわ無えんどう豆    75    69
しわ有えんどう豆    25    31

Power_divergenceResult(statistic=1.9199999999999999, pvalue=0.16585666034290991)

カイ二乗値とp値
1.92, 0.166

p値0.166 > 0.05
帰無仮説は棄却されない。

参考文献

パソコンで簡単!すぐできる生物統計―統計学の考え方から統計ソフトSPSSの使い方まで

パソコンで簡単!すぐできる生物統計―統計学の考え方から統計ソフトSPSSの使い方まで